¿Cómo puedo usar AWS CLI para realizar llamadas a AssumeRole y almacenar credenciales de usuario temporales?
Quiero usar la Interfaz de la línea de comandos de AWS (AWS CLI) para obtener las credenciales de las operaciones AssumeRoleWithSAML, AssumeRole y AssumeRoleWithWebIdentity.
Solución
Nota: Si se muestran errores al poner en marcha comandos de AWS CLI, consulta Solución de errores de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Para obtener las credenciales de AssumeRoleWithSAML, AssumeRole y AssumeRoleWithWebIdentity, llama a la API y guarda la salida en un archivo de texto. A continuación, utiliza la salida para llamar a un comando de la API con AWS CLI.
Nota: Los comandos AssumeRoleWithSAML, AssumeRole y AssumeRoleWithWebIdentity requieren los parámetros role-arn y role-session-name.
Obtención de credenciales con la autenticación SAML
Requisito: Debes tener una respuesta SAML 2.0 válida de tu proveedor de identidades (IdP) y un rol de AWS Identity and Access Management (IAM) que confíe en el IdP.
Sigue estos pasos:
-
Localiza los registros y, a continuación, abre el archivo de registro SAML.
-
Copia la respuesta SAML completa.
-
Pega la respuesta SAML en un archivo del directorio local denominado samlresponse.log.
-
Ejecuta el siguiente comando assume-role-with-saml para llamar al token de AWS Security Token Service (AWS STS):
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/credentialsNota: Sustituye Principal ARN por el nombre de recurso de Amazon (ARN) del proveedor de SAML. En este ejemplo se utiliza awk, que es compatible con las distribuciones basadas en Linux. Al ejecutar el comando assume-role-with-saml, se guardan las credenciales en un perfil dentro del archivo ~/.aws/credentials.
-
(Opcional) Ejecuta el siguiente comando para hacer una copia de seguridad de las credenciales:
cp -a ~/.aws/credentials ~/.aws/credentials.bak. -
Ejecuta el siguiente comando describe-instances para llamar a las credenciales de usuario:
aws ec2 describe-instances --profile PROFILENAMENota: Sustituye PROFILENAME por el nombre de tu perfil.
Ejemplo de salida que no está guardado en un archivo:{ "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" }Ejemplo de salida guardado en el archivo de credenciales:
aws_access_key_id = ACCESS_KEY_ID aws_session_token = SESSION_TOKEN aws_secret_access_key = SECRET_ACCESS_KEY [PROFILENAME]
Obtención de credenciales con AssumeRole
Importante: Tus credenciales de IAM deben confiar en el rol de IAM que asumas.
Sigue estos pasos:
-
Ejecuta el siguiente comando get-caller-identity para verificar una respuesta:
aws sts get-caller-identityNota: Si no recibes ninguna respuesta, comprueba si el archivo .aws/credentials almacena una clave secreta o una clave de acceso de IAM válida.
-
Ejecuta el siguiente comando assume-role:
aws sts assume-role --role-arn arn:aws:iam::123456789012:role/ExampleRole --role-session-name ExampleSessionEjemplo de respuesta:
{ "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" } } -
Desde la respuesta, exporta AccessKeyId, SecretAccessKey y SessionToken para crear 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== -
Ejecuta el siguiente comando get-caller-identity para verificar la identidad:
aws sts get-caller-identityLa salida muestra las credenciales de identidad de la llamada a assume-role.
Obtención de credenciales con AssumeRoleWithWebIdentity
Requisito: Debes 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.
-
Ejecuta el siguiente comando assume-role:
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_cVMQEjemplo 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" -
Guarda 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 -
Ejecuta el comando get-caller-identity:
aws sts get-caller-identity --profile ExampleRoleProfileLa salida muestra las credenciales de identidad de la llamada a assume-role:
{ "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 AWS Tools para PowerShell
Opciones de los archivos de configuración y credenciales en la AWS CLI
- Etiquetas
- AWS Identity and Access Management
- Idioma
- Español
Vídeos relacionados


Contenido relevante
- preguntada hace 6 meses
- preguntada hace 10 meses
- preguntada hace un año