Qué es el permiso PassRole en AWS y cómo utilizarlo
Muchos proveedores de servicios en la nube proporcionan un servicio IAM como medida para controlar el acceso a los recursos en la nube. Determina quién está autenticado y autorizado para acceder a estos recursos. Las identidades de AWS IAM consisten en usuarios, grupos y roles.
En esta guía nos centraremos específicamente en los roles IAM. Esta identidad IAM es igual que un usuario IAM en el sentido de que podemos adjuntarle políticas IAM. Estas políticas determinan el alcance del nivel de permisos para esta identidad. A diferencia de un usuario IAM que está asociado a un único usuario y tiene credenciales a largo plazo, los roles siguen una estrategia diferente. Tienen credenciales de seguridad temporales y son asumidas/tomadas por otros que las necesitan. Los usuarios, aplicaciones o servicios normales que no tienen permiso de acceso a sus recursos de AWS, asumen los roles para obtener este acceso.
¿Qué veremos aquí?
En este tutorial aprenderás a utilizar el permiso ‘IAM Passrole’. También mostraremos un ejemplo sencillo sobre cómo conectar una instancia EC2 con un bucket S3 privado utilizando este concepto.
¿Qué es el permiso Passrole?
Al configurar muchos servicios de AWS, el usuario/administrador debe pasar un rol a ese servicio. El servicio entonces asume ese rol para realizar las acciones que se permiten dentro de ese rol. En la mayoría de los casos, el rol se pasa al servicio sólo una vez mientras se configura el servicio y no cada vez que el rol es asumido por el servicio.
Un usuario debe tener derechos para pasar un rol a un servicio. Este es un aspecto de seguridad fuerte, ya que sólo los usuarios autorizados pueden pasar un rol al servicio. Además, los administradores pueden controlar qué tipo de rol puede pasar un usuario al servicio.
Demostración del permiso Passrole
Vamos a avanzar en este concepto con un ejemplo práctico. En esta demostración, tenemos un bucket S3, una instancia EC2 y una aplicación que se ejecuta en esta instancia que es la propia AWS CLI. Queremos configurar un rol que permita a nuestra aplicación que se ejecuta en la instancia EC2 acceder a nuestro bucket S3. Tenemos que crear el rol de tal manera que sólo el EC2 obtenga el permiso para acceder a S3 pero no cualquier otro servicio AWS del usuario. Para ello, nuestra aplicación debe tener credenciales temporales de autenticación y autorización para acceder a S3. Habrás notado que al lanzar la instancia EC2, se nos pide que seleccionemos un rol IAM, es este rol el que proporciona estas credenciales temporales a nuestra instancia EC2. Nuestra aplicación que se ejecuta en la instancia EC2 recuperará estas credenciales para acceder al cubo S3.
Un usuario IAM puede pasar un rol al servicio EC2, en el momento de lanzar la instancia, utilizando las tres entidades siguientes:
- Primero tenemos que crear y adjuntar una política a nuestro rol que decidirá el límite de permisos o el alcance de nuestro rol IAM.
- A continuación, una política de confianza asociada a este rol que básicamente permitirá al servicio de AWS (EC2 en nuestro caso) tomar/asumir el rol y utilizar los permisos listados con el rol.
- Por último, una política de permisos IAM, asociada con el usuario IAM que le permite pasar los roles que está autorizado a pasar.
Creación del rol
En esta sección crearemos un rol llamado ‘EC2S3Access’ y le adjuntaremos una política ‘AmazonS3ReadOnlyAccess’:
Paso 1. Dirígete al panel de control de IAM desde la cuenta de administrador o raíz y selecciona «Roles» en la opción de gestión de acceso. Haz clic en el botón «Crear rol».
Paso 2. En la sección ‘Select trusted entity’, verás la opción ‘Trusted entity type’ y ‘Use case’. Para la primera, selecciona la opción ‘Servicio AWS’ y para la segunda, la opción ‘EC2’.
Paso 3. En la siguiente sección ‘Add permissions’, adjuntaremos una política ‘S3ReadOnlyAccess’ y luego haremos clic en ‘Next’:
Paso 4. Aquí introduzca un nombre para el rol:’EC2S3Access’ y una descripción opcional para el mismo. Tenga en cuenta que se adjuntará automáticamente una política de confianza con este rol:
{
«Versión»: «2012-10-17»,
«Declaración»: [
{
«Effect»: «Allow»,Advertisement
«Action»: [
«sts:AssumeRole»
],
«Principal»: {
«Servicio»: [
«ec2.amazonaws.com»
]
}
}
]
}
Paso 5. Por último, haga clic en el botón «Crear rol» para crear el rol anterior:
Añadir política IAM para el usuario IAM
Hasta ahora hemos creado un rol y le hemos adjuntado una política y también hemos conseguido una política de confianza. Ahora vamos a crear una política para el propio usuario IAM. En esta política le daremos permiso al usuario para el acceso completo a EC2 y también para asociar el rol ‘EC2S3Access’ con nuestra instancia EC2.
Paso 1. Una vez más, diríjase al panel de control de IAM desde la cuenta de administrador o raíz y seleccione «Políticas» y haga clic en el botón «Crear política».
Paso 2. En el asistente de creación de políticas, haga clic en la pestaña json y simplemente pegue el siguiente código json para esta política:
{
«Versión»: «2012-10-17»,
«Declaración»: [{
«Effect»:»Allow»,
«Action»:[«ec2:*»],
«Recurso»: «*»
},
{
«Efecto»: «Permitir»,
«Acción»: «iam:PassRole»,
«Recurso»: «arn:aws:iam::IAM_User_ID:role/EC2S3Access«
}]
}
En este código, sustituya ‘IAM_User_ID’ por el número de cuenta o ID del usuario IAM y ‘EC2S3Access’ por el nombre del rol en su caso. Haga clic en «Siguiente:Etiquetas».
Paso 3. Especifique las «Etiquetas» opcionales que desee utilizar y haga clic en «Siguiente:Revisar»:
Paso 4. Aquí ponga un nombre para esta política (‘iam_user_policy’ en nuestro caso) y finalmente haga clic en el botón ‘Create policy’ para crear esta política:
Paso 5. Adjunte la política creada anteriormente al usuario IAM:
Adjuntando el rol a la instancia
Como nuestro rol está listo y el usuario de IAM está asociado con la política requerida, este es el momento de adjuntar este rol (‘EC2S3Access’) a la instancia EC2.
Nota: Un rol puede adjuntarse a una instancia mientras se lanza y también a una instancia en ejecución.
En nuestro caso la instancia de EC2 ya está en ejecución, así que navegue a la consola de EC2 y seleccione la instancia de destino. Selecciona ‘Action > Security > Modify IAM role’. Selecciona la opción ‘EC2S3Access’ en el menú desplegable de la nueva página y haz clic en ‘Save’ para continuar:
Probando la configuración
Si todo se ha configurado correctamente nuestra instancia EC2 debería poder acceder a un bucket S3. Primero crea un bucket S3 desde la cuenta de administrador. A continuación, inicia sesión en la instancia EC2 de destino y luego instala y configura la aplicación aws cli para el usuario IAM con la ‘user-iam-policy’. Desde un terminal en la instancia ejecuta el siguiente comando de listado de S3:
$ aws s3 ls
Para verificar de forma cruzada si el permiso Passrole está funcionando ejecute el mismo comando desde el mismo usuario IAM configurado en una máquina diferente. Esta vez es de esperar que encuentre que estamos recibiendo un error de accesibilidad debido a un permiso limitado:
El error anterior se ha producido porque sólo hemos dado el permiso de acceso de S3 a la instancia de EC2 configurada con la ‘iam_user_policy’ pero no hemos dado dicho permiso a ningún otro servicio de AWS del usuario IAM.
Nota: El cubo y sus objetos no son de acceso público.
Conclusión
En esta guía hemos aprendido a utilizar el permiso PassRole para dar el menor privilegio a un usuario de AWS IAM. Hemos mostrado cómo conectar una instancia EC2 a un bucket S3.