Come posso usare l'interfaccia a riga di comando di AWS per effettuare chiamate AssumeRole e archiviare credenziali utente temporanee?

4 minuti di lettura
0

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:

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.

  1. Segui le istruzioni su Come visualizzare una risposta SAML nel tuo browser per la risoluzione dei problemi.

  2. Scorri fino ai registri, quindi apri il file di registro SAML.

  3. Copia l'intera risposta SAML.

  4. 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.

  1. (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.

  1. 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.

  1. 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.

  1. 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”
    }
}
  1. 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==
  1. 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.

  1. 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"
  1. 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
  1. 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

Come posso concedere ai miei utenti di Active Directory l'accesso all'API o all'interfaccia a riga di comando di AWS con AD FS?

Configurazione dell'identità federata con gli strumenti AWS per PowerShell