AWS Identity and Access Management
Guía del usuario

Cambio a un rol de IAM (API de AWS)

Un rol especifica un conjunto de permisos que puede utilizar para el acceso a los recursos de AWS. En este sentido, es similar a un usuario de IAM. Una entidad principal (persona o aplicación) asume un rol para recibir permisos temporales con los que realizar las tareas necesarias e interactuar con los recursos de AWS. 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 originales se restablecen de forma automática.

Para asumir un rol, una aplicación llama a la operación de la API de AWS STS AssumeRole y transfiere el ARN del rol que se utilizará. La operación crea una nueva sesión con credenciales temporales. Esta sesión tiene los mismos permisos que las políticas basadas en identidad aplicables al rol.

Cuando se llama a AssumeRole, también se puede pasar opcionalmente una política de sesión gestionada o insertada. Las políticas de sesión son políticas avanzadas que se pasan como parámetro cuando se crea una sesión de credenciales temporal mediante programación para una función o un usuario federado. Puede transferir un único documento de política de sesión insertada JSON mediante el parámetro Policy. Puede utilizar el parámetro PolicyArns para especificar hasta 10 políticas de sesión administradas. Los permisos de la sesión resultantes son la intersección de las políticas basadas en identidades de la entidad y las políticas de la sesión. Las políticas de sesión son útiles cuando es necesario proporcionar las credenciales temporales de la función a otra persona. Pueden utilizar las credenciales temporales del rol en las llamadas posteriores a la API de AWS para tener acceso a los recursos de la cuenta propietaria del rol. Las políticas de sesión no se pueden utilizar para conceder más permisos que los permitidos por la política basada en identidades. Para obtener más información sobre cómo determina AWS los permisos efectivos de un rol, consulte Lógica de evaluación de políticas.


      PermissionsWhenPassingRoles_Diagram

Puede llamar a AssumeRole cuando haya iniciado sesión como usuario de IAM o como usuario autenticado externamente (SAML u OIDC) que ya utiliza un rol. También puede utilizar el encadenamiento de roles, que consiste en utilizar un rol para asumir otro. No puede asumir un rol si ha iniciado sesión como usuario Usuario de la cuenta raíz de AWS.

De forma predeterminada, la sesión de rol dura una hora. Cuando se asume este rol utilizando las operaciones de la API de AWS STS AssumeRole*, se puede especificar un valor para el parámetro DurationSeconds. 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. 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 DurationSeconds para proporcionar un valor superior a una hora, la operación generará un error.

nota

Por motivos de seguridad, puede utilizar AWS CloudTrail para auditar el uso de roles en la cuenta. La llamada a AssumeRole debe incluir un nombre de sesión de rol de entre 2 y 64 caracteres que puede incluir letras, números y los caracteres =,.@-. El nombre de sesión de rol se utiliza en logs de CloudTrail para identificar acciones realizadas por las credenciales de seguridad temporales. Para obtener más información, consulte Referencia de eventos de CloudTrail en la AWS CloudTrail User Guide.

En el siguiente ejemplo de Python en el que se utiliza la interfaz Boto3 en AWS (AWS SDK for Python (Boto) V3) se muestra cómo llamar a AssumeRole. También se muestra cómo utilizar las credenciales de seguridad temporales devueltas por AssumeRole para enumerar todos los buckets de Amazon S3 de la cuenta a la que pertenece el rol.

import boto3 # The calls to AWS STS AssumeRole must be signed with the access key ID # and secret access key of an existing IAM user or by using existing temporary # credentials such as those from another role. (You cannot call AssumeRole # with the access key for the root account.) The credentials can be in # environment variables or in a configuration file and will be discovered # automatically by the boto3.client() function. For more information, see the # Python SDK documentation: # http://boto3.readthedocs.io/en/latest/reference/services/sts.html#client # create an STS client object that represents a live connection to the # STS service sts_client = boto3.client('sts') # Call the assume_role method of the STSConnection object and pass the role # ARN and a role session name. assumed_role_object=sts_client.assume_role( RoleArn="arn:aws:iam::account-of-role-to-assume:role/name-of-role", RoleSessionName="AssumeRoleSession1" ) # From the response that contains the assumed role, get the temporary # credentials that can be used to make subsequent API calls credentials=assumed_role_object['Credentials'] # Use the temporary credentials that AssumeRole returns to make a # connection to Amazon S3 s3_resource=boto3.resource( 's3', aws_access_key_id=credentials['AccessKeyId'], aws_secret_access_key=credentials['SecretAccessKey'], aws_session_token=credentials['SessionToken'], ) # Use the Amazon S3 resource object that is now configured with the # credentials to access your S3 buckets. for bucket in s3_resource.buckets.all(): print(bucket.name)