Comment utiliser l'interface de la ligne de commande AWS (AWS CLI) pour réaliser des appels AssumeRole et stocker les informations d'identification temporaires des utilisateurs ?

Lecture de 4 minute(s)
0

Je souhaite obtenir les informations d'identification des opérations AssumeRoleWithSAML, AssumeRole et AssumeRoleWithWebIdentity à l'aide de l'interface de la ligne de commande AWS (AWS CLI).

Résolution

Pour obtenir les informations d'identification fournies par AssumeRoleWithSAML, AssumeRole et AssumeRoleWithWebIdentity, procédez comme suit pour appeler l'API et enregistrer la sortie dans un fichier texte. Utilisez ensuite la sortie pour appeler une commande API avec l'AWS CLI.

Important :

AssumeRoleWithSAML

Remarque : Vous devez disposer d'une réponse SAML 2.0 valide de votre fournisseur d'identité et d'un rôle IAM faisant confiance à l'IdP.

Obtenez la réponse SAML auprès des outils pour développeur.

1.    Suivez les instructions de la section Comment afficher une réponse SAML dans votre navigateur à des fins de dépannage.

2.    Accédez aux journaux, puis ouvrez le fichier journal SAML.

3.    Copiez la totalité de la réponse SAML.

4.    Collez la réponse SAML dans un fichier du répertoire local nommé samlresponse.log. Exécutez ensuite assume-role-with saml pour appeler le jeton STS :

Remarque : cet exemple utilise awk. Awk est compatible avec les distributions basées sur Linux.

aws sts assume-role-with-saml --role-arn arn:aws:iam::ACCOUNTNUMBER:role/IAM_ROLE --principal-arn arn:aws:iam::ACCOUNTNUMBER:saml-provider/SAML_PROVIDER --saml-assertion file://samlresponse.log

awk -F:  '
                BEGIN { RS = "[,{}]" ; print "[PROFILENAME]"}
                /:/{ gsub(/"/, "", $2) }
                /AccessKeyId/{ print "aws_access_key_id = " $2 }
                /SecretAccessKey/{ print "aws_secret_access_key = " $2 }
                /SessionToken/{ print "aws_session_token = " $2 }
' >> ~/.aws/credentials

Cette action enregistre les informations d'identification dans un profil contenu dans le fichier ~/.aws/credentials.

5.    (Facultatif) Pour sauvegarder les informations d'identification, exécutez la commande suivante :

cp -a ~/.aws/credentials ~/.aws/credentials.bak.

Astuce : assurez-vous d'avoir un profil correspondant dans ~/.aws/config contenant les paramètres de sortie et de région, afin de ne pas être invité à les saisir de manière répétée.

6.    Appelez les informations d'identification utilisateur avec le paramètre -profile :

aws ec2 describe-instances --profile PROFILENAME

Exemple de sortie assume-role-with-saml sans l'envoyer vers un fichier :

{            
    "SubjectType": "persistent",
    "AssumedRoleUser": {
       "AssumedRoleId": "ROLE_ID_NUMBER:example@corp.example.com",
       "Arn": "arn:aws:sts::ACCOUNTNUMBER:assumed-role/ROLE_ID/example@corp.example.com"
    },    
    "Audience": "https://signin.aws.amazon.com/saml",
    "NameQualifier": "RANDOM_GENERATED_STRING",
    "Credentials": {
       "SecretAccessKey": "SECRET_ACCESS_KEY",
       "SessionToken": "TOKEN_KEY",
       "Expiration": "2015-05-11T20:00:49Z",
       "AccessKeyId": "ACCESS_KEY_ID"
},
"Subject": "CORP\\\\EXAMPLE",
"Issuer": "http://SERVER_NAME.corp.example.com/adfs/services/trust"
}

Exemple de sortie assume-role-with-saml envoyée vers le fichier d'informations d'identification :

aws_access_key_id =  ACCESS_KEY_ID
aws_session_token =  SESSION_TOKEN
aws_secret_access_key =  SECRET_ACCESS_KEY
[PROFILENAME]

AssumeRole

Remarque : Vos informations d'identification IAM doivent approuver le rôle IAM que vous assumez.

1.    Exécutez la commande AWS get-caller-identity pour vérifier une réponse :

aws sts get-caller-identity

Remarque : Si vous ne recevez pas de réponse, vérifiez qu'une clé secrète ou un accès IAM valide est stockée dans le fichier .aws/credentials.

2.    Exécutez la commande assume-role :

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSession

La réponse obtenue est semblable à la l'exemple suivant :

{
    "AssumedRoleUser": {
        "AssumedRoleId": "AROAZRG5BQ2L7OB87N3RE:ExampleSession",
        "Arn": "arn:aws:sts::123456789012:assumed-role/RoleA/ExampleSession"
    },
    "Credentials": {
        "SecretAccessKey": "JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe",
        "SessionToken": "FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA==",
        "Expiration": "2020-03-16T21:11:01Z",
        "AccessKeyId": "ASIAZRG8BQ4K2EBXGR42”
    }
}

3.    Exportez AccessKeyId, SecretAccessKey et SessionToken dans les variables d'environnement :

export AWS_ACCESS_KEY_ID=ASIAZRG8BQ4K2EBXGR42
export AWS_SECRET_ACCESS_KEY=JCNFKY7XCUwHWTKcQhmmFokpjLetCmNLZ7pg9SJe
export AWS_SESSION_TOKEN=FwoGZXIvYXdzEL7//////////wEaDNoBLBJUNYWKaHXZXCKvARBGJ4CqOs+p2JR2a7Euni0d0XuSs31ZA/1QqpX6Spfuz2WAvHCyqwbE3+oxyvyqYlO8dTJwp56YCFCJ6K4Prt9pMeZU9R5NGBJHvRbXXKfxp+jktLc/ItrAfn4GMXWpoyJKZrY7hzv3MASomlIcwSD/RqWIBS1vAoo1UAxwjy29jai0OAPQ51LAnuFKeabgmllyP5Y2gu488P19D7ikfgQtmBtH5I/Q8+5IEn4qMwYo1bq/8wUyLe1b3+mQwhq+zEz4TSyHD8HBXd9W3KYcB53MIotwiJNS+m0P5ZlZnpcJm3JwtA==

4.    Vérifiez l'identité :

aws sts get-caller-identity

La sortie affiche les informations d'identification d'identité de l'appel assume-role.

AssumeRoleWithWebIdentity

Remarque : Vous devez disposer d'un jeton d'accès OAuth 2.0 valide, d'un jeton OpenID Connect et d'un rôle IAM faisant confiance à l'IdP.

1.    Exécutez la commande assume-role comme dans l'exemple suivant :

aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789012:role/FederatedWebIdentityRole --role-session-name ExampleSession --web-identity-token
Atza%7CIQEBLjAsAhRFiXuWpUXuRvQ9PZL3GMFcYevydwIUFAHZwXZXXXXXXXXJnrulxKDHwy87oGKPznh0D6bEQZTSCzyoCtL_8S07pLpr0zMbn6w1lfVZKNTBdDansFBmtGnIsIapjI6xKR02Yc_2bQ8LZbUXSGm6Ry6_BG7PrtLZtj_dfCTj92xNGed-CrKqjG7nPBjNIL016GGvuS5gSvPRUxWES3VYfm1wl7WTI7jn-Pcb6M-buCgHhFOzTQxod27L9CqnOLio7N3gZAGpsp6n1-AJBOCJckcyXe2c6uD0srOJeZlKUm2eTDVMf8IehDVI0r1QOnTV6KzzAI3OY87Vd_cVMQ

Exemple de réponse :

{
    "SubjectFromWebIdentityToken": "amzn1.account.AF6RHO7KZU5XRVQJGXK6HB56KR2A"
    "Audience": "client.5498841531868486423.1548@apps.example.com",
    "AssumedRoleUser": {
        "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession",
        "AssumedRoleId": "AROACLKWSDQRAOEXAMPLE:ExampleSession"
    }
    "Credentials": {
        "AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY",
        "SessionToken": "AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE",
        "Expiration": "2020-05-19T18:06:10+00:00"
    },
    "Provider": "www.amazon.com"

2.    Enregistrez AccessKeyId, SecretAccessKey et SessionToken dans le fichier .aws/credentials :

[ExampleRoleProfile]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYzEXAMPLEKEY
aws_session_token=AQoEXAMPLEH4aoAH0gNCAPyJxz4BlCFFxWNE1OPTgk5TthT+FvwqnKwRcOIfrRh3c/LTo6UDdyJwOOvEVPvLXCrrrUtdnniCEXAMPLE/IvU1dYUg2RVAJBanLiHb4IgRmpRV3zrkuWJOgQs8IZZaIv2BXIa2R4OlgkBN9bkUDNCJiBeb/AXlzBBko7b15fjrBs2+cTQtpZ3CYWFXG8C5zqx37wnOE49mRl/+OtkIKGO7fAE

3.    Exécutez la commande get-caller-identity :

aws sts get-caller-identity --profile ExampleRoleProfile

La sortie montre les informations d’identification issues de l'appel assume-role comme dans l'exemple suivant :

{
"UserId": "AROACLKWSDQRAOEXAMPLE:ExampleSession",
"Account": "123456789012",
"Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession"
}

Informations connexes

Comment accorder à mes utilisateurs Active Directory l'accès à l'API ou à l'interface de ligne de commande AWS avec ADFS ?

Configuration d'une identité fédérée avec AWS Tools for PowerShell

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an