Cambio a un rol de IAM (AWS CLI)
Un rol especifica un conjunto de permisos que puede utilizar para acceder a los recursos de AWS que necesita. En este sentido, es similar a un usuario de IAM en AWS Identity and Access Management. Al iniciar sesión como usuario, obtendrá un conjunto específico de permisos. Sin embargo, no inicia sesión en una función, sino que después de iniciar sesión como usuario, puede cambiar a una función. Esto anula temporalmente los permisos de usuario originales y, en su lugar, le otorga los permisos asignados al rol. El rol puede estar en su propia cuenta o en cualquier otra Cuenta de AWS. Para obtener más información acerca de los roles, sus beneficios y cómo crearlos y configurarlos, consulte Roles de IAM y Creación de roles de IAM. Para obtener más información sobre los distintos métodos que puede utilizar para asumir un rol, consulte Uso de roles de IAM.
importante
Los permisos del usuario de IAM y de cualquier rol que asuma no se acumulan. Solo hay un conjunto de permisos activo a la vez. Cuando se asume un rol, se abandonan temporalmente los permisos de usuario o del rol anteriores y se trabaja con los permisos que el rol tenga asignados. Al salir del rol, los permisos de usuario se restablecen de forma automática.
Puede utilizar un rol para ejecutar un comando de la AWS CLI si ha iniciado sesión como usuario de IAM. También puede utilizar un rol para ejecutar un comando de la AWS CLI cuando haya iniciado sesión como usuario autenticado externamente (SAML o OIDC) que ya utiliza un rol. Además, puede utilizar un rol para ejecutar un comando de la AWS CLI desde una instancia de Amazon EC2 que esté asociada a un rol a través de su perfil de instancias. No puede asumir un rol si ha iniciado sesión como usuario Usuario raíz de la cuenta de AWS.
Encadenamiento de roles— También puede utilizar el encadenamiento de roles, que consiste en utilizar permisos de un rol para tener acceso a otro.
De forma predeterminada, la sesión de rol dura una hora. Cuando se asume este rol utilizando las operaciones de la CLI assume-role*
, se puede especificar un valor para el parámetro duration-seconds
. Este valor puede oscilar entre 900 segundos (15 minutos) y el valor de la duración máxima de la sesión para el rol. Si cambia de rol en la consola, la duración de la sesión se limita a un máximo de una hora. Para obtener información sobre cómo ver el valor máximo para el rol, consulte Cómo consultar la configuración de la duración máxima de la sesión para un rol.
Si utiliza el encadenamiento de roles, la sesión tiene una duración máxima de una hora. Si utiliza a continuación el parámetro duration-seconds
para proporcionar un valor superior a una hora, la operación generará un error.
Escenario de ejemplo: cambio a un rol de producción
Imagine que es un usuario de IAM para trabajar en el entorno de desarrollo. En esta situación, ocasionalmente necesita trabajar con el entorno de producción en la línea de comandos con la AWS CLI
nota
Por motivos de seguridad, los administradores pueden revisar los registros de AWS CloudTrail para saber quién realizó una acción en AWS. Es posible que el administrador requiera que especifique una identidad de origen o un nombre de la sesión de rol cuando asuma el rol. Para obtener más información, consulte sts:SourceIdentity y sts:RoleSessionName.
Para cambiar a una función de producción (AWS CLI)
-
En caso de que nunca haya utilizado AWS CLI, primero debe configurar su perfil de CLI predeterminado. Abra un símbolo del sistema y configure la instalación de AWS CLI para utilizar la clave de acceso de su usuario de IAM o de su rol federado. Para obtener más información, consulte Configuración de AWS Command Line Interface en la Guía del usuario de AWS Command Line Interface.
Ejecute el comando aws configure de la siguiente manera:
aws configure
Cuando se le pida, proporcione la siguiente información:
AWS Access Key ID [None]:
AWS Secret Access Key [None]:AKIAIOSFODNN7EXAMPLE
Default region name [None]:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default output format [None]:us-east-2
json
-
Cree un nuevo perfil para la función del archivo
.aws/config
en Unix o Linux, o el archivoC:\Users\USERNAME\.aws\config
en Windows. El siguiente ejemplo crea un perfil denominadoprodaccess
que cambia a la función
en la cuentaProductionAccessRole
123456789012
. Obtendrá el ARN del rol del administrador de la cuenta que creó el rol. Si este perfil se invoca, AWS CLI utiliza las credenciales desource_profile
para solicitar credenciales para el rol. Por esta razón, la identidad a la que se hace referencia comosource_profile
debe tener permisos dests:AssumeRole
para la función especificada enrole_arn
.[profile prodaccess] role_arn = arn:aws:iam::
123456789012
:role/ProductionAccessRole source_profile = default -
Después de crear el nuevo perfil, cualquier comando de AWS CLI que especifique el parámetro
--profile prodaccess
se ejecuta bajo los permisos asociados al rol de IAMProductionAccessRole
en lugar de hacerlo en el usuario predeterminado.aws iam list-users --profile prodaccess
Este comando funciona si los permisos asignados a
ProductionAccessRole
permiten enumerar los usuarios de la cuenta actual de AWS. -
Para volver a los permisos concedidos por sus credenciales originales, ejecute comandos sin el parámetro
--profile
. La AWS CLI vuelve a utilizar las credenciales de su perfil predeterminado, que configuró en Paso 1.
Para obtener más información, consulte Asumir un rol en la Guía del usuario de AWS Command Line Interface.
Escenario de ejemplo: Permitir que una función de perfil de instancias cambie una función en otra cuenta
Imagine que está utilizando dos Cuentas de AWS y desea permitir que una aplicación se ejecute en una instancia de Amazon EC2 para ejecutar comandos AWS CLI111111111111
. Dicha instancia incluye la función de perfil de instancias abcd
que permite que la aplicación realice tareas de solo lectura de Amazon S3 en el bucket my-bucket-1
dentro de la misma cuenta 111111111111
. Sin embargo, la aplicación también debe tener permitido asumir la función entre cuentas efgh
para realizar tareas de la cuenta 222222222222
. Para ello, la función del perfil de instancia EC2 abcd
debe tener la siguiente política de permisos:
Política de permisos del rol de la cuenta 111111111111 abcd
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-1/*", "arn:aws:s3:::my-bucket-1" ] }, { "Sid": "AllowIPToAssumeCrossAccountRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::222222222222:role/efgh" } ] }
Supongamos que la función entre cuentas efgh
permite tareas de solo lectura de Amazon S3 en el bucket my-bucket-2
dentro de la misma cuenta 222222222222
. Para ello, la función entre cuentas efgh
debe tener la siguiente política de permisos:
Política de permisos del rol de la cuenta 222222222222 efgh
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccountLevelS3Actions", "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetAccountPublicAccessBlock", "s3:ListAccessPoints", "s3:ListAllMyBuckets" ], "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowListAndReadS3ActionOnMyBucket", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::my-bucket-2/*", "arn:aws:s3:::my-bucket-2" ] } ] }
La función efgh
debe permitir la función de perfil de instancia abcd
para asumirla. Para ello, la función efgh
debe tener la siguiente política de confianza:
Política de confianza de rol efgh
de la cuenta 222222222222
{ "Version": "2012-10-17", "Statement": [ { "Sid": "efghTrustPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": {"AWS": "arn:aws:iam::111111111111:role/abcd"} } ] }
Para ejecutar los comandos de la AWS CLI en la cuenta 222222222222
, debe actualizar el archivo de configuración de la CLI. Identifique la función efgh
como el "perfil" y la función del perfil de instancia EC2 abcd
como la "fuente de credenciales" en el archivo de configuración de la AWS CLI. A continuación, los comandos de la CLI se ejecutan con los permisos de la función efgh
, no la función abcd
original.
nota
Por motivos de seguridad, puede utilizar AWS CloudTrail para auditar el uso de roles en la cuenta. Para diferenciar entre sesiones de rol cuando diferentes entidades principales utilizan un rol en los logs de CloudTrail, puede utilizar el nombre de sesión de rol. Si la AWS CLI asume un rol en nombre de un usuario, tal y como se describe en este tema, se crea automáticamente un nombre de sesión de rol con el formato AWS-CLI-session-
. Aquí nnnnnnnn
nnnnnnnn
es un número entero que representa la hora en formato de tiempo Unix
Para permitir que un perfil de instancia de EC2 cambie a una función entre cuentas (AWS CLI)
-
No tiene que configurar un perfil de CLI predeterminado. En su lugar, puede cargar las credenciales de los metadatos del perfil de instancia EC2. Cree un nuevo perfil para el rol en el archivo
.aws/config
. En el siguiente ejemplo, se crea un perfilinstancecrossaccount
que cambia a la función
en la cuentaefgh
222222222222
. Si este perfil se invoca, la AWS CLI utiliza las credenciales de los metadatos del perfil de instancia EC2 para solicitar credenciales para la función. Por esta razón, la función del perfil de instancia EC2 debe tener permisos dests:AssumeRole
para la función especificada enrole_arn
.[profile instancecrossaccount] role_arn = arn:aws:iam::
222222222222
:role/efgh credential_source = Ec2InstanceMetadata -
Después de crear el nuevo perfil, cualquier comando de AWS CLI que especifique el parámetro
--profile instancecrossaccount
se ejecuta bajo los permisos asociados a la función deefgh
en la cuenta222222222222
.aws s3 ls my-bucket-2 --profile instancecrossaccount
Este comando funciona si los permisos asignados a la función
efgh
permiten enumerar los usuarios de la Cuenta de AWS actual. -
Para volver a los permisos del perfil de instancia EC2 original de la cuenta
111111111111
, ejecute los comandos de la CLI sin el parámetro--profile
.
Para obtener más información, consulte Asumir un rol en la Guía del usuario de AWS Command Line Interface.