Passer au contenu

Comment utiliser l'AWS CLI pour passer des appels AssumeRole et stocker des informations d'identification utilisateur temporaires ?

Lecture de 4 minute(s)
0

Je souhaite utiliser l'interface de la ligne de commande AWS (AWS CLI) pour obtenir les informations d'identification de AssumeRoleWithSAML, AssumeRole et AssumeRoleWithWebIdentity.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.

Pour obtenir les informations d'identification de AssumeRoleWithSAML, AssumeRole et AssumeRoleWithWebIdentity, appelez l'API et enregistrez la sortie dans un fichier texte. Puis, utilisez la sortie pour appeler une commande d'API à l'aide de l'AWS CLI.

Remarque : Les commandes AssumeRoleWithSAML, AssumeRole et AssumeRoleWithWebIdentity requièrent les paramètres role-arn et role-session-name.

Obtenir les informations d'identification grâce à l'authentification SAML

Exigence : Vous devez disposer d'une réponse SAML 2.0 valide de la part de votre fournisseur d'identité (IdP) et d'un rôle Gestion des identités et des accès AWS (AWS IAM) qui approuve l'IdP.

Procédez comme suit :

  1. Obtenez la réponse SAML.

  2. Localisez les journaux, puis ouvrez le fichier journal SAML.

  3. Copiez l'intégralité de la réponse SAML.

  4. Collez la réponse SAML dans le fichier nommé samlresponse.log qui se trouve dans le répertoire local.

  5. Exécutez la commande assume-role-with-saml suivante pour appeler le jeton Service de jetons de sécurité AWS (AWS STS) :

    aws sts assume-role-with-saml --role-arn arn:aws:iam::444455556666:role/IAM_ROLE --principal-arn arn:aws:iam::444455556666: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
    

    Remarque : Remplacez l'ARN principal par l’Amazon Resource Name (ARN) de votre fournisseur SAML. Cet exemple utilise awk, qui est compatible avec les distributions basées sur Linux. Lorsque vous exécutez la commande assume-role-with-saml, les informations d'identification sont enregistrées dans un profil au sein du fichier ~/.aws/credentials.

  6. (Facultatif) Exécutez la commande suivante pour sauvegarder les informations d'identification :

    cp -a ~/.aws/credentials ~/.aws/credentials.bak.
  7. Exécutez la commande describe-instances suivante pour appeler les informations d'identification utilisateur :

    aws ec2 describe-instances --profile PROFILENAME

    Remarque : Remplacez PROFILENAME par le nom de votre profil.
    Exemple de sortie qui n'est pas enregistrée dans un fichier :

    {            
        "SubjectType": "persistent",
        "AssumedRoleUser": {
           "AssumedRoleId": "111122223333:example@corp.example.com",
           "Arn": "arn:aws:sts::44445555666: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 enregistrée dans 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]
    

Obtenir des informations d'identification avec AssumeRole

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

Procédez comme suit :

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

    aws sts get-caller-identity

    Remarque : Si vous ne recevez pas de réponse, vérifiez si le fichier .aws/credentials contient un accès IAM valide ou une clé secrète.

  2. Exécutez la commande assume-role suivante :

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

    Exemple de réponse :

    {
        "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. À partir de la réponse, exportez AccessKeyId, SecretAccessKey et SessionToken pour créer des 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. Exécutez la commande get-caller-identity suivante pour vérifier l'identité :

    aws sts get-caller-identity

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

Obtenir des informations d'identification avec AssumeRoleWithWebIdentity

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

  1. Exécutez la commande assume-role suivante :

    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

    Exemple de sortie des informations d'identification issues de l'appel assume-role :

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

Informations connexes

Comment puis-je autoriser mes utilisateurs Active Directory à accéder à l'API ou à l'AWS CLI avec AD FS ?

Configurer l'identité fédérée à l'aide des outils AWS pour PowerShell

Paramètres du fichier de configuration et d'informations d'identification dans l'AWS CLI