Direkt zum Inhalt

Wie kann ich über die AWS CLI „AssumeRole“ aufrufen und temporäre Benutzeranmeldeinformationen speichern?

Lesedauer: 4 Minute
0

Ich möchte die AWS Command Line Interface (AWS CLI) verwenden, um Anmeldeinformationen von AssumeRoleWithSAML, AssumeRole und AssumeRoleWithWebIdentity abzurufen.

Behebung

Hinweis: Wenn du beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Wenn du Anmeldeinformationen über AssumeRoleWithSAML, AssumeRole und AssumeRoleWithWebIdentity abrufen möchtest, rufe die API auf und speichere die Ausgabe in einer Textdatei. Verwende dann die Ausgabe, um einen API-Befehl über die AWS CLI aufzurufen.

Hinweis: Die Befehle AssumeRoleWithSAML, ** AssumeRole** und AssumeRoleWithWebIdentity erfordern die Parameter role-arn und role-session-name.

Anmeldeinformationen mit SAML-Authentifizierung abrufen

Anforderung: Du benötigst eine gültige SAML 2.0-Antwort von deinem Identity Provider (IdP) und eine AWS Identity and Access Management (IAM)-Rolle, die dem IdP vertraut.

Führe die folgenden Schritte aus:

  1. Erhalte die SAML-Antwort.

  2. Suche die Protokolle und öffne die SAML-Protokolldatei.

  3. Kopiere die gesamte SAML-Antwort.

  4. Füge die SAML-Antwort im lokalen Verzeichnis in eine Datei mit dem Namen samlresponse.log ein.

  5. Führe den folgenden Befehl assume-role-with-saml aus, um das AWS Security Token Service (AWS STS)-Token aufzurufen:

    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
    

    Hinweis: Ersetze den Principal-ARN durch den Amazon Resource Name (ARN) deines SAML-Anbieters. In diesem Beispiel wird awk verwendet, das mit Linux-basierten Distributionen kompatibel ist. Wenn du den Befehl assume-role-with-saml ausführst, werden die Anmeldeinformationen in einem Profil in der Datei ~/.aws/credentials gespeichert.

  6. (Optional) Führe den folgenden Befehl aus, um die Anmeldeinformationen zu sichern:

    cp -a ~/.aws/credentials ~/.aws/credentials.bak.
  7. Führe den folgenden Befehl describe-instances aus, um die Benutzeranmeldeinformationen aufzurufen:

    aws ec2 describe-instances --profile PROFILENAME

    Hinweis: Ersetze ** PROFILENAME** durch deinenProfilnamen.
    Beispielausgabe, die nicht in einer Datei gespeichert wird:

    {            
        "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"
    }
    

    Beispielausgabe, die in der Anmeldeinformationsdatei gespeichert wird:

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

Anmeldeinformationen mit AssumeRole erhalten

Wichtig: Deine IAM-Anmeldeinformationen müssen der von dir angenommenen IAM-Rolle vertrauen.

Führe die folgenden Schritte aus:

  1. Führe den folgenden Befehl get-caller-identity aus, um eine Antwort zu überprüfen:

    aws sts get-caller-identity

    Hinweis: Solltest du keine Antwort erhalten, überprüfe, ob in der Datei .aws/credentials ein gültiger IAM-Zugriffsschlüssel oder ein gültiger geheimer Schlüssel gespeichert ist.

  2. Führe den folgenden Befehl assume-role aus:

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

    Beispielantwort:

    {
        "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. Exportiere aus der Antwort AccessKeyId, SecretAccessKey und SessionToken, um Umgebungsvariablen zu erstellen:

    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. Führe den folgenden Befehl get-caller-identity aus, um die Identität zu überprüfen:

    aws sts get-caller-identity

    Die Ausgabe enthält die Identitätsanmeldeinformationen aus dem Aufruf von assume-role.

Anmeldeinformationen mit AssumeRoleWithWebIdentity erhalten

Anforderung: Du musst über ein gültiges OAuth 2.0-Zugriffstoken, über ein OpenID Connect-Token und über eine IAM-Rolle verfügen, die dem Identitätsanbieter vertraut.

  1. Führe den folgenden Befehl assume-role aus:

    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
    

    Beispielantwort:

    {
        "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. Speichere AccessKeyId, SecretAccessKey und SessionToken in der Datei .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. Führe den Befehl get-caller-identity aus:

    aws sts get-caller-identity --profile ExampleRoleProfile

    Beispielausgabe für Identitätsanmeldeinformationen aus dem Aufruf von assume-role:

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

Ähnliche Informationen

How do I grant my Active Directory users access to the API or AWS CLI with AD FS?

Konfiguration des Identitätsverbunds mit den AWS Tools für PowerShell

Konfigurations- und Anmeldeinformationsdateien in der AWS CLI