¿Cómo puedo usar AWS CLI para realizar llamadas a AssumeRole y almacenar credenciales de usuario temporales?
Quiero obtener las credenciales de las operaciones AssumeRoleWithSAML, AssumeRole y AssumeRoleWithWebIdentity mediante la Interfaz de la línea de comandos de AWS (AWS CLI).
Resolución
Para obtener las credenciales de AssumeRoleWithSAML, AssumeRole y AssumeRoleWithWebIdentity, complete los siguientes pasos para llamar a la API y guarde la salida en un archivo de texto. A continuación, utilice la salida para llamar a un comando de la API con AWS CLI.
Importante:
- Si recibe errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.
- Los parámetros role-arn y role-session-name son obligatorios.
AssumeRoleWithSAML
Nota: Debe tener una respuesta SAML 2.0 válida de su proveedor de identidades (IdP) y un rol de IAM que confíe en el IdP.
Obtenga la respuesta SAML de las herramientas para desarrolladores.
1. Siga las instrucciones indicadas en Cómo ver una respuesta SAML en el navegador para la solución de problemas.
2. Desplácese hasta los registros y, a continuación, abra el archivo de registro SAML.
3. Copie la respuesta SAML completa.
4. Pegue la respuesta SAML en un archivo del directorio local denominado samlresponse.log. A continuación, ejecute assume-role-with-saml para llamar al token STS:
Nota: En este ejemplo se usa awk. Awk es compatible con distribuciones basadas en 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
Esto guarda las credenciales en un perfil dentro del archivo ~/.aws/credentials file.
5. (Opcional) Para hacer una copia de seguridad de las credenciales, ejecute este comando:
cp -a ~/.aws/credentials ~/.aws/credentials.bak.
Consejo: Asegúrese de tener un perfil coincidente en ~/.aws/config con la salida y la región configuradas, de modo que no se le pida que lo introduzca repetidamente.
6. Llame a las credenciales de usuario con el parámetro --profile:
aws ec2 describe-instances --profile PROFILENAME
Ejemplo de salida assume-role-with-saml sin canalizar a un archivo:
{ "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" }
Ejemplo de salida assume-role-with-saml canalizada al archivo de credenciales:
aws_access_key_id = ACCESS_KEY_ID aws_session_token = SESSION_TOKEN aws_secret_access_key = SECRET_ACCESS_KEY [PROFILENAME]
AssumeRole
Nota: Sus credenciales de IAM deben confiar en el rol de IAM que asuma.
1. Ejecute el comando de AWS get-caller-identity para verificar una respuesta:
aws sts get-caller-identity
Nota: Si no recibe ninguna respuesta, compruebe si hay una clave secreta o una clave de acceso de IAM válida en el archivo .aws/credentials.
2. Ejecute el comando assume-role:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSession
Recibirá una respuesta similar a la siguiente:
{ "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. Exporte AccessKeyId, SecretAccessKey y SessionToken a las variables de entorno:
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. Verifique la identidad:
aws sts get-caller-identity
La salida muestra las credenciales de identidad de la llamada a assume-role.
AssumeRoleWithWebIdentity
Nota: Debe tener un token de acceso de OAuth 2.0 válido, un token de OpenID Connect y un rol de IAM que confíe en el IdP.
1. Ejecute el comando assume-role similar al siguiente:
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
Ejemplo de respuesta:
{ "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. Guarde AccessKeyId, SecretAccessKey y SessionToken en el archivo .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. Ejecute el comando get-caller-identity:
aws sts get-caller-identity --profile ExampleRoleProfile
La salida muestra las credenciales de identidad de la llamada a assume-role de manera similar al ejemplo siguiente:
{ "UserId": "AROACLKWSDQRAOEXAMPLE:ExampleSession", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/FederatedWebIdentityRole/ExampleSession" }
Información relacionada
¿Cómo concedo a mis usuarios de Active Directory acceso a la API o AWS CLI con AD FS?
Configuración de la identidad federada con las AWS Tools for PowerShell
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace un año