Come posso usare l'interfaccia a riga di comando di AWS per effettuare chiamate AssumeRole e archiviare credenziali utente temporanee?
Voglio ottenere le credenziali dalle operazioni AssumeRoleWithSAML, AssumeRole e AssumeRoleWithWebIdentity utilizzando l'AWS Command Line Interface (AWS CLI).
Risoluzione
Per ottenere le credenziali da AssumeRoleWithSAML, AssumeRole e AssumeRoleWithWebIdentity, completa i seguenti passaggi per chiamare l'API e salvare l'output in un file di testo. Quindi, usa l'output per chiamare un comando API con l'interfaccia a riga di comando di AWS CLI.
Importante:
- Se ricevi errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando di AWS, assicurati di utilizzare la versione più recente di AWS CLI.
- I parametri role-arn e role-session-name sono obbligatori.
AssumeRoleWithSAML
Nota: Devi disporre di una risposta SAML 2.0 valida dal tuo provider di identità e di un ruolo IAM che si fidi dell'IdP.
Ottieni la risposta SAML dagli strumenti per sviluppatori.
-
Segui le istruzioni su Come visualizzare una risposta SAML nel tuo browser per la risoluzione dei problemi.
-
Scorri fino ai registri, quindi apri il file di registro SAML.
-
Copia l'intera risposta SAML.
-
Incolla la risposta SAML in un file nella directory locale denominata samlresponse.log. Quindi, esegui assume-role-with-saml per chiamare il token STS:
Nota: Questo esempio usa awk. Awk è compatibile con le distribuzioni basate su 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
Questo salva le credenziali in un profilo all'interno del file ~/.aws/credentials.
- (Facoltativo) Per eseguire il backup delle credenziali, esegui questo comando:
cp -a ~/.aws/credentials ~/.aws/credentials.bak.
Suggerimento: Assicurati di avere un profilo corrispondente in ~/.aws/config con output e Regione impostati, in modo che non ti venga richiesto ripetutamente di inserirlo.
- Chiama le credenziali utente con il parametro --profile:
aws ec2 describe-instances --profile PROFILENAME
Esempio di output assume-role-with-saml senza indirizzare a un file:
{ "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" }
Esempio di output assume-role-with-saml reindirizzato al file delle credenziali:
aws_access_key_id = ACCESS_KEY_ID aws_session_token = SESSION_TOKEN aws_secret_access_key = SECRET_ACCESS_KEY [PROFILENAME]
AssumeRole
Nota: Le tue credenziali IAM devono fidarsi del ruolo IAM che assumi.
- Esegui il comando AWS get-caller-identity per verificare una risposta:
aws sts get-caller-identity
**Nota:**Se non ricevi una risposta, controlla se nel file .aws/credentials è memorizzata una chiave di accesso IAM o segreta valida.
- Esegui il comando assume-role:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSession
Riceverai una risposta simile alla seguente:
{ "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” } }
- Esporta AccessKeyId, SecretAccessKey e SessionToken nelle variabili ambientali:
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==
- Verifica l'identità:
aws sts get-caller-identity
L'output mostra le credenziali di identità della chiamata assume-role.
AssumeRoleWithWebIdentity
Nota: È necessario disporre di un token di accesso OAuth 2.0 valido, un token OpenID Connect e un ruolo IAM che si fidi dell'IdP.
- Esegui il comando assume-role simile al seguente:
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
Esempio di risposta:
{ "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"
- Salva AccessKeyId, secretAccessKey e sessionToken nel file.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
- Esegui il comando get-caller-identity:
aws sts get-caller-identity --profile ExampleRoleProfile
L'output mostra le credenziali di identità della chiamata assume-role simili a quelle seguenti:
{ "UserId": "AROACLKWSDQRAOEXAMPLE:ExampleSession", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession" }
Informazioni correlate
Configurazione dell'identità federata con gli strumenti AWS per PowerShell
Video correlati
Contenuto pertinente
- Perché la mia istanza Amazon EC2 utilizza le credenziali utente IAM anziché le credenziali di ruolo?AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa