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

Lesedauer: 4 Minute
0

Ich möchte Anmeldeinformationen unter Verwendung der AWS Command Line Interface (AWS CLI) über die Vorgänge „AssumeRoleWithSAML“, „AssumeRole“ und „AssumeRoleWithWebIdentity“ abrufen.

Behebung

Wenn Sie Anmeldeinformationen über AssumeRoleWithSAML, AssumeRole und AssumeRoleWithWebIdentity abrufen möchten, führen Sie die folgenden Schritte aus, um die API aufzurufen und die Ausgabe in einer Textdatei zu speichern. Verwenden Sie dann die Ausgabe, um einen API-Befehl über die AWS CLI aufzurufen.

Wichtig:

AssumeRoleWithSAML

**Hinweis:**Sie benötigen eine gültige SAML 2.0-Antwort von Ihrem Identitätsanbieter sowie eine IAM-Rolle, die dem Identitätsanbieter vertraut.

Rufen Sie die SAML-Antwort über Entwicklertools ab.

1.Folgen Sie der Anleitung unter How to view a SAML response in your browser for troubleshooting.

2.Scrollen Sie zu den Protokollen und öffnen Sie die SAML-Protokolldatei.

3.Kopieren Sie die gesamte SAML-Antwort.

4.Fügen Sie die SAML-Antwort im lokalen Verzeichnis in eine Datei mit dem Namen samlresponse.log ein. Führen Sie dann assume-role-with-saml aus, um das STS-Token aufzurufen:

**Hinweis:**In diesem Beispiel wird awk verwendet. awk ist mit Linux-basierten Distributionen kompatibel.

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

Dadurch werden die Anmeldeinformationen in einem Profil in der Datei ~/.aws/credentials gespeichert.

5.(Optional) Führen Sie den folgenden Befehl aus, um die Anmeldeinformationen zu sichern:

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

**Tipp:**Vergewissern Sie sich, dass in ~/.aws/config ein passendes Profil mit festgelegter Ausgabe und Region vorhanden ist, damit Sie nicht immer wieder zur Angabe aufgefordert werden.

6.Rufen Sie die Benutzeranmeldeinformationen mit dem Parameter --profile auf:

aws ec2 describe-instances --profile PROFILENAME

Beispiel für eine Ausgabe von assume-role-with-saml ohne Weiterleitung an eine Datei:

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

Beispiel für eine Ausgabe von assume-role-with-saml mit Weiterleitung an die Anmeldeinformationsdatei:

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

AssumeRole

**Hinweis:**Ihre IAM-Anmeldeinformationen müssen der von Ihnen angenommenen IAM-Rolle vertrauen.

1.Führen Sie den AWS-Befehl get-caller-identity aus, um eine Antwort zu überprüfen:

aws sts get-caller-identity

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

2.Führen Sie den Befehl assume-role aus:

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

Sie erhalten eine Antwort wie die folgende:

{
    "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.Exportieren Sie „AccessKeyId“, „SecretAccessKey“ und „SessionToken“ in die Umgebungsvariablen:

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.Überprüfen Sie die Identität:

aws sts get-caller-identity

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

AssumeRoleWithWebIdentity

**Hinweis:**Sie müssen ü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ühren Sie einen Befehl vom Typ assume-role aus, der in etwa wie folgt aussieht:

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.Speichern Sie „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ühren Sie den Befehl get-caller-identity aus:

aws sts get-caller-identity --profile ExampleRoleProfile

Die Ausgabe enthält die Identitätsanmeldeinformationen aus dem Aufruf von assume-role. Das sieht in etwa wie folgt aus:

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

Verwandte Informationen

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

Configuring federated identity with the AWS Tools for PowerShell