Haz todo lo posible por entender el código bien previamente a utilizarlo a tu proyecto y si ttienes algo que aportar puedes dejarlo en los comentarios.
Solución:
Asumir un rol significa pedirle al Servicio de token de seguridad (STS) que le proporcione un conjunto de credenciales temporales (credenciales de rol) que son específicas del rol que desea asumir. (Específicamente, una nueva “sesión” con ese rol).
Opcionalmente, puede incluir una política con esta solicitud, que servirá para limitar los permisos de las credenciales temporales a solo un subconjunto de lo que habrían permitido las políticas del rol.
A continuación, utiliza estas credenciales para realizar más solicitudes. Estas credenciales se parecen a las credenciales de usuario de IAM con un acceso-key-id y secret, pero el acceso key empieza con ASIA
en vez de AKIA
y hay un tercer elemento, llamado token de seguridad, que debe incluirse en las solicitudes firmadas con las credenciales temporales.
Cuando realiza solicitudes con estas credenciales temporales, tiene los permisos asociados con el rol y no los suyos propios (si tiene uno) porque ha asumido una nueva identidad. CloudTrail se puede usar para rastrear las credenciales del rol hasta el usuario que asumió el rol, pero de lo contrario, el servicio no sabe quién está usando las credenciales.
tl;dr: Asumir un rol significa obtener un conjunto de credenciales temporales que están asociadas con el rol y no con la entidad que asumió el rol.
AWS (¿API? ¿o algún tiempo de ejecución de autorización en AWS?) identifica los roles que se le pueden otorgar al principal.
No. Tú especificas el rol que quieres asumir.
Cuando “usted” es un código que se ejecuta en una instancia de EC2 y la instancia tiene un rol de instancia, la infraestructura de EC2 en realidad llama a “asume-role” en nombre de la instancia y puede obtener las credenciales temporales del servicio de metadatos de la instancia. Solo se puede acceder a estas credenciales desde dentro de la instancia, pero no se almacenan en la instancia.
Al ejecutar una función de Lambda, la infraestructura de Lambda se comunica con STS y coloca sus credenciales temporales en las variables de entorno. Nuevamente, estas credenciales son accesibles para la función, sin almacenarse dentro de la función.
En cualquier caso, podría llamar a “asume role” con estas credenciales y asumir un rol diferente, pero eso no debería ser necesario en la mayoría de los entornos.
Por ejemplo, si se especifica un usuario de EC2 para ejecutar la llamada de API de rol asumido y ejecutar una aplicación que accede a recursos de AWS en una instancia de EC2 a la que se adjunta el perfil de IAM, entonces:
AWS no tiene conocimiento de EC2 usuarios. Los roles de instancia son accesibles para todo lo que se ejecuta en la instancia.
Todos los roles de IAM del perfil EC2 IAM
Un perfil de instancia solo puede incluir un rol.
Roles y políticas de IAM solicitados en la llamada de rol asumido
Usted solicita asumir exactamente un rol. No necesita solicitar una política; solo especifica una política si desea que las credenciales temporales tengan menos privilegios de los que permitirían las credenciales del rol. Esto podría ser algo que haría si necesitara ejecutar un código en un lugar que no es de confianza, como un código en un navegador o una aplicación, para poder firmar solicitudes con credenciales.
AWS encuentra un rol entre los roles que tiene la política (acción, recurso) que permite que el principio realice la acción en el recurso.
No. Como se indicó anteriormente, solicita un rol específico cuando llama a “asuntar rol”.
AWS cambia el rol del principio al rol identificado.
No. Tú haga el cambio usando las credenciales temporales provistas.
He creado el siguiente diagrama para entender qué es exactamente asumir un rol en AWS. Con suerte, también lo encontrará útil.
En el diagrama, lo puse en 3 pasos:
- Preparar los roles (ExecutionRole y AssumedRole)
- Cree una función Lambda en la cuenta A (en su caso, es EC2)
- Ejecute la función Lambda.
El diagrama usa cuentas cruzadas como ejemplo, si está dentro de la misma cuenta, no se requiere el paso 1.3.
Por lo general, usa AssumeRole dentro de su cuenta o para el acceso entre cuentas. … Los usuarios en la misma cuenta que el rol no necesitan permiso explícito para asumir el rol.
Fuente: https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html