Concesión de permisos a un usuario para transferir un rol a un servicio de AWS - AWS Identity and Access Management

Concesión de permisos a un usuario para transferir un rol a un servicio de AWS

Para configurar muchos servicios de AWS, es necesario transferir un rol de IAM al servicio. Esto permite al servicio asumir posteriormente el rol y ejecutar acciones en su nombre. Para muchos servicios, solo tiene que transferir el rol al servicio una vez durante la configuración y no cada vez que el servicio asume el rol. Por ejemplo, suponga que tiene una aplicación que se ejecuta en una instancia de Amazon EC2. Dicha aplicación requiere credenciales temporales para la autenticación, así como permisos para realizar acciones en AWS. Cuando configure la aplicación, debe transferir un rol a Amazon EC2 para que lo utilice con la instancia que proporciona dichas credenciales. Puede definir los permisos de las aplicaciones que se ejecutan en la instancia asociando una política de IAM al rol. La aplicación asume el rol cada vez que necesita realizar las acciones que este permite.

Para transferir un rol (y sus permisos) a un servicio de AWS, un usuario debe tener permisos para transferir el rol al servicio. Esto ayuda a los administradores a garantizar que solo los usuarios autorizados puedan configurar un servicio con un rol que concede permisos. Para permitir a un usuario transferir un rol a un servicio de AWS, debe conceder el permiso PassRole al usuario, rol o grupo de IAM del usuario.

aviso
  • Solo puede usar el permiso PassRole para transferir un rol de IAM a un servicio que comparte la misma cuenta de AWS. Para transferir una función de la cuenta A a un servicio de la cuenta B, primero debe crear un rol de IAM en la cuenta B que pueda asumir la función desde la cuenta A y, a continuación, la función de la cuenta B se puede transferir al servicio. Para obtener más información, consulte Acceso a recursos entre cuentas en IAM.

  • No intente controlar quién puede pasar un rol etiquetando el rol y, a continuación, utilizando la clave de condición ResourceTag en una política con la acción iam:PassRole. Este planteamiento no da resultados fiables.

Al configurar el permiso PassRole, debe asegurarse de que un usuario no pase un rol en el que el rol tenga más permisos de los que usted desea que tenga el usuario. Por ejemplo, es posible que a Alice no se le permita realizar ninguna acción de Amazon S3. Si Alice pudiera transferir un rol a un servicio que permita acciones de Amazon S3, el servicio podría realizar acciones de Amazon S3 en su nombre al ejecutar el trabajo.

Si especifica un rol vinculado a un servicio, debe disponer también de permiso para transferir ese rol al servicio. Algunos servicios crean automáticamente un rol vinculado a un servicio en su cuenta al realizar una acción en dicho servicio. Por ejemplo, Amazon EC2 Auto Scaling crea el rol vinculado a un servicio AWSServiceRoleForAutoScaling automáticamente la primera vez que se crea un grupo de Auto Scaling. Si intenta especificar el rol vinculado a un servicio al crear un grupo de escalado automático y no posee el permiso iam:PassRole, recibirá un error. Si no especifica el rol de manera explícita, el permiso iam:PassRole no es necesario y la acción predeterminada es usar el rol AWSServiceRoleForAutoScaling para todas las operaciones que se realicen en ese grupo. Para saber qué servicios admiten roles vinculados a servicios, consulte Servicios de AWS que funcionan con IAM. Para saber qué servicios crean automáticamente un rol vinculado a un servicio al realizar una acción en ellos, elija el enlace y consulte la documentación relacionada con los roles vinculados a dicho servicio.

Un usuario puede pasar un ARN de rol como parámetro en cualquier operación de API que utilice el rol para asignar permisos al servicio. A continuación, el servicio comprueba si ese usuario tiene el permiso iam:PassRole. Para que el usuario transfiera únicamente los roles autorizados, puede filtrar el permiso iam:PassRole con el elemento Resources de la instrucción de política de IAM.

Puede utilizar el elemento Condition en una política JSON para probar el valor de las claves incluidas en el contexto de solicitud de todas las solicitudes de AWS. Para obtener más información acerca del uso de las claves de condición en una política, consulte Elementos de política JSON de IAM: Condition. La clave de condición iam:PassedToService se puede utilizar para especificar la entidad principal del servicio al que se puede pasar un rol. Para obtener más información acerca del uso de la clave de condición iam:PassedToService en una política, consulte iam:PassedToService.

Ejemplo 1

Supongamos que desea conceder a un usuario la capacidad de transferir cualquier conjunto de roles al servicio de Amazon EC2 cuando se lanza una instancia. Necesita tres elementos:

  • Una política de permisos de IAM asociada al rol que determina lo que puede hacer dicho rol. Limite los permisos a únicamente las acciones que deba llevar a cabo el rol y únicamente los recursos que el rol necesite para dichas acciones. Puede utilizar una política de permisos de IAM creada por el cliente o administrada por AWS.

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "A list of the permissions the role is allowed to use" ], "Resource": [ "A list of the resources the role is allowed to access" ] } }
  • Una política de confianza para el rol que permita al servicio asumir dicho rol. Por ejemplo, puede adjuntar la siguiente política de confianza al rol con la acción UpdateAssumeRolePolicy. Esta política de confianza permite a Amazon EC2 utilizar el rol y los permisos asociados al rol.

    { "Version": "2012-10-17", "Statement": { "Sid": "TrustPolicyStatementThatAllowsEC2ServiceToAssumeTheAttachedRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  • Una política de permisos de IAM asociada al usuario de IAM que le permite especificar únicamente los roles aprobados. Normalmente agrega iam:GetRole a iam:PassRole, de modo que el usuario pueda obtener los detalles del rol que se transfiere. En este ejemplo, el usuario puede pasar únicamente los roles que existen en la cuenta especificada con nombres que empiezan por EC2-roles-for-XYZ-:

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/EC2-roles-for-XYZ-*" }] }

Ahora el usuario puede iniciar una instancia de Amazon EC2 con un rol asignado. Las aplicaciones que se ejecutan en la instancia pueden acceder a credenciales temporales para el rol a través de los metadatos del perfil de instancia. Las políticas de permisos asociadas al rol determinan lo que puede hacer la instancia.

Ejemplo 2

Amazon Relational Database Service (Amazon RDS) admite una característica denominada Monitoreo mejorado. Esta característica permite a Amazon RDS monitorear una instancia de base de datos mediante un agente. También permite a Amazon RDS registrar métricas en Amazon CloudWatch Logs. Para habilitar esta característica, debe crear una función de servicio para otorgar a Amazon RDS permisos para monitorear y escribir métricas en los registros.

Para crear un rol para el monitoreo mejorado de Amazon RDS
  1. Inicie sesión en la AWS Management Console y abra la consola de IAM en https://console.aws.amazon.com/iam/.

  2. Elija Roles y después Crear rol.

  3. Elija el tipo de rol de Servicio de AWS y, a continuación, en Casos de uso para otros Servicios de AWS, elija el servicio RDS. Elija RDS - Supervisión mejorada y, a continuación, elija Siguiente.

  4. Elija la política de permisos AmazonRDSEnhancedMonitoringRole.

  5. Seleccione Siguiente.

  6. En Nombre del rol, ingrese un nombre de rol que le sea útil para identificar su propósito. Los nombres de rol deben ser únicos en su Cuenta de AWS. Cuando se utiliza un nombre de rol en una política o como parte de un ARN, el nombre del rol distingue entre mayúsculas y minúsculas. Cuando los clientes ven un nombre de rol en la consola, por ejemplo, durante el proceso de inicio de sesión, el nombre del rol no distingue entre mayúsculas y minúsculas. Dado que varias entidades pueden hacer referencia al rol, no se puede editar el nombre del rol una vez que se crea.

  7. (Opcional) En Descripción, ingrese una descripción para el nuevo rol.

  8. (Opcional) Adjunte etiquetas como pares de clave-valor para agregar metadatos al rol. Para obtener más información acerca del uso de etiquetas en IAM, consulte Etiquetado de recursos de IAM.

  9. Revise el rol y, a continuación, seleccione Crear rol.

Automáticamente, el rol recibe una política de confianza que otorga los permisos de servicio monitoring.rds.amazonaws.com para asumir el rol. Después, Amazon RDS podrá realizar todas las acciones que permite la política AmazonRDSEnhancedMonitoringRole.

El usuario para el que desea habilitar la supervisión mejorada necesita una política que incluya una declaración que permita al usuario enumerar los roles de RDS y una declaración que le permita transferir el rol, como la siguiente. Utilice el número de cuenta y sustituya el nombre del rol por el nombre que ha facilitado en el paso 6.

{ "Sid": "PolicyStatementToAllowUserToListRoles", "Effect": "Allow", "Action": ["iam:ListRoles"], "Resource": "*" }, { "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::account-id:role/RDS-Monitoring-Role" }

Puede combinar esta instrucción con instrucciones de otra política o colocarla en su propia política. En lugar de especificar que el usuario pueda transferir cualquier rol que empieza por RDS-, puede sustituir el nombre del rol en el ARN del recurso por un comodín, de la siguiente manera.

"Resource": "arn:aws:iam::account-id:role/RDS-*"

Acciones iam:PassRole en registros de AWS CloudTrail

PassRole no es una llamada a la API. PassRole es un permiso, lo que significa que no se generan registros de CloudTrail para PassRole de IAM. Para revisar qué roles se pasan a qué Servicios de AWS en CloudTrail, debe revisar el registro de CloudTrail que creó o modificó el recurso de AWS que recibe el rol. Por ejemplo, un rol se pasa a una función de AWS Lambda cuando se crea. El registro de la acción CreateFunction muestra un registro del rol que se pasó a la función.