Qué es el permiso PassRole en AWS y cómo utilizarlo

Seleccionar entidad de confianza

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:

  1. 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.
  2. 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.
  3. 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’.

Seleccionar entidad de confianza

Paso 3. En la siguiente secci√≥n ‘Add permissions’, adjuntaremos una pol√≠tica ‘S3ReadOnlyAccess’ y luego haremos clic en ‘Next’:

A√Īadiendo pol√≠tica al rol.

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:

Detalles del rol

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:

Creando la política IAM para el usuario IAM

Paso 5. Adjunte la política creada anteriormente al usuario IAM:

Adjuntando la política IAM 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:

Adjuntando el rol a la instancia

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:

Probando la configuración

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *