Cambiar a un rol de IAM (AWS CLI) - AWS Identity and Access Management

Cambiar 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 Métodos para asumir un rol.

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 Actualizar 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. Ya tiene una credencial de clave de acceso a su disposición. Este puede ser el par de claves de acceso asignado a su usuario de IAM estándar. O bien, si ha iniciado sesión como un usuario federado, puede ser el par de claves de acceso para la función que se le ha asignado inicialmente. Si sus permisos actuales le permiten asumir un rol IAM específico, puede identificar dicho rol en un "perfil" de los archivos de configuración de AWS CLI. Este comando se ejecuta con los permisos de la función de IAM especificada, no con la identidad original. Tenga en cuenta que al especificar dicho perfil en un comando de la AWS CLI, está utilizando el nuevo rol. En esta situación, no puede hacer uso de sus permisos originales en la cuenta de desarrollo al mismo tiempo. La razón es que no puede haber más de un conjunto de permisos en vigor a la vez.

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)
  1. 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 la 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]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-east-2 Default output format [None]: json
  2. Cree un nuevo perfil para la función del archivo .aws/config en Unix o Linux, o el archivo C:\Users\USERNAME\.aws\config en Windows. El siguiente ejemplo crea un perfil denominado prodaccess que cambia a la función ProductionAccessRole en la cuenta 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 de source_profile para solicitar credenciales para el rol. Por esta razón, la identidad a la que se hace referencia como source_profile debe tener permisos de sts:AssumeRole para la función especificada en role_arn.

    [profile prodaccess] role_arn = arn:aws:iam::123456789012:role/ProductionAccessRole source_profile = default
  3. 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 IAM ProductionAccessRole 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.

  4. 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 CLI en ambas cuentas. Supongamos que la instancia EC2 existe en la cuenta 111111111111. 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 amzn-s3-demo-bucket1 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:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] }, { "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 amzn-s3-demo-bucket2 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:::amzn-s3-demo-bucket2/*", "arn:aws:s3:::amzn-s3-demo-bucket2" ] } ] }

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-nnnnnnnn. Aquí nnnnnnnn es un número entero que representa la hora en formato de tiempo Unix (el número de segundos desde la medianoche UTC del 1 de enero de 1970). Para obtener más información, consulte Referencia de eventos de CloudTrail en la Guía del usuario de AWS CloudTrail.

Para permitir que un perfil de instancia de EC2 cambie a una función entre cuentas (AWS CLI)
  1. 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 perfil instancecrossaccount que cambia a la función efgh en la cuenta 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 de sts:AssumeRole para la función especificada en role_arn.

    [profile instancecrossaccount] role_arn = arn:aws:iam::222222222222:role/efgh credential_source = Ec2InstanceMetadata
  2. 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 de efgh en la cuenta 222222222222.

    aws s3 ls amzn-s3-demo-bucket2 --profile instancecrossaccount

    Este comando funciona si los permisos asignados a la función efgh permiten enumerar los usuarios de la Cuenta de AWS actual.

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