AWS Solutions Architect Associate (03) – AWS IAM

¿Qué es AWS IAM?

AWS IAM Es el acrónimo de Identity Access Management. Nos permite tener un control centralizado de los permisos que se tienen sobre nuestros recursos AWS.

AWS IAM es un punto clave para manejar nuestra infraestructura en Amazon. Mediante su uso, podremos controlar de forma muy detallada los permisos que cada uno de nuestros usuarios AWS tiene sobre los recursos de nuestra plataforma.

Este capitulo de IAM es probablemente de los más aburridos de todo el estudio de cara a la certificación AWS Solutions Architect Associate, pero es fundamental comprenderlo perfectamente antes de adentrarnos más en el estudio de la certificación.

¿Qué nos ofrece IAM?

  • Permisos detallados y totalmente granulares, cumpliendo con los requisitos de PCI DSS.
  • Panel de control único para todos los permisos sobre nuestra cuenta.
  • Gestión de usuarios de nuestra plataforma AWS y la rotación de sus credenciales.
  • Delegación de permisos entre cuentas.
  • Enlazar el login a AWS con otros sistemas de autenticación externos.
  • Autenticación mediante tokens u otras aplicaciones de 2FA.
  • Creación de credenciales temporales para aplicaciones o servicios.

Categorías IAM

AWS IAM permite asignar los permisos en la plataforma a diferentes tipos de entidades.:

Usuarios y grupos IAM

Pueden asociarse respectivamente a personas físicas y conjuntos de usuarios que desempeñan la misma función. Es lo más aproximado a cualquier otro sistema de permisos que podamos encontrar.

Roles IAM

Los roles de IAM son un un grupo de politicas de seguridad que podemos asignar a objetos AWS. Por ejemplo, podemos asignar un rol para dar permisos de lectura a una instancia EC2 sobre un bucket S3 no público de manera que esa instancia si tenga permisos para acceder a su contenido. Otro ejemplo es una instancia EC2 a la que damos permisos para actualizar nuestro servidor DNS en Route53 de manera que actualice la IP a la que resuelve un registro con la IP que tiene asignada en cada momento.

Políticas IAM

Las políticas IAM son un objeto que agrupa uno o más permisos sobre los recursos AWS. Cuando definimos una política IAM, debemos luego aplicarla a un usuario, grupo, o rol para que sea efectiva.

Como se crean usuarios y grupos en IAM

Lo primero que debemos hacer es entrar en la consola de AWS y localizar IAM en la sección Security, Identity & Compliance.

aws IAM

Una vez entremos, veremos cual es el identificador numérico de nuestra cuenta de Amazon. Este número puede sernos útil en el futuro y conviene tenerlo guardado en algún sitio.

aws iam

Antes de nada hay que dejar claro una cosa. Se puede entrar a la consola AWS de dos maneras. La primera es usando el usuario root de la cuenta AWS. Esto es nuestro correo y contraseña que creamos al darnos de alta. También es la forma NO RECOMENDADA de acceder.

La otra manera es crear usuarios con un conjunto de permisos y acceder mediante esos usuarios IAM usando la URL personalizada de acceso a la consola, que es la que hemos visto en la imagen anterior. Sin embargo, podemos personalizar esta URL para que sea más identificativa. Vamos a darle a Customize para generar un nombre DNS a nuestro gusto.

aws IAM

Recomendaciones de AWS IAM

En la parte inferior de la imagen anterior podrás encontrar una serie de recomendaciones que AWS nos hace para configurar IAM. Vamos a ir revisándolas y aplicándolas una a una.

Activar MFA en la cuenta root

La cuenta root de AWS es la que tiene acceso ilimitado a los recursos AWS. Solamente deberíamos utilizar esta cuenta en contadas ocasiones. MFA, o factor de autenticación múltiple es una forma de aportar seguridad extra a nuestros inicios de sesión. Al activar MFA, cuando vayamos a hacer un login con el usuario root en la consola AWS, nos pedirá un código numérico generado por una aplicación que puede ser Google Authenticator.

Para activar MFA, nos instalaremos en el teléfono móvil la aplicación Google Authenticator y después pulsaremos en el botón Manage MFA.

aws MFA

Seleccionaremos Virtual MFA y pasaremos al siguiente paso donde volveremos a dar a Next Step. Se nos mostrará un código QR que debemos escanear con la aplicación Google Authenticator. Después deberemos introducir 2 códigos de los que nos salen en la aplicación del movil. Deben ser códigos consecutivos, es decir, debemos introducir el que nos sale, esperar unos segundos a que cambie (30 segundos o 1 minuto) y escribir el siguiente código numérico que nos sale. Pulsamos Activate virtual MFA.

AWS MFA

Si todo va bien veremos un mensaje «The MFA device was successfully associated with your account»

Crear un usuario individual IAM

El siguiente paso es crear usuarios dentro de nuestra cuenta para acceder a AWS. Existen dos tipos de accesos a AWS. Acceso programático, que se realiza mediante una pareja de claves y sirve para acceder a la API de AWS. Este usuario que creemos también podrá acceder a la consola AWS si así lo queremos. Pulsemos el botón Manage Users

Una vez en el panel de gestión de usuarios, pulsaremos en Add User. Introduciremos un nombre de usuario y marcaremos las opciones Programmatic access y Management Console Access. El primero, como decíamos antes, nos dará acceso a las APIs para gestionar AWS desde línea de comandos, API o SDK. El segundo nos permitirá logarnos en la consola AWS usando la URL «bonita» que creamos antes.

Console password nos permite elegir una contraseña o dejar que AWS IAM genere una segura para nosotros. Recomiendo usar esta opción y guardar en un sitio seguro (junto con la de la cuenta root, por ejemplo) la contraseña de acceso del nuevo usuario que hemos creado.

aws iam

Pulsamos Next: Permissions.

Ahora vamos a agregar el usuario que hemos creado a un grupo. Para ello debemos crear uno en primer lugar haciendo click en Create Group.

aws iam group

Crearemos un grupo con nombre Administradores y seleccionaremos la política AdministratorAccess. Como ya dijimos antes, las políticas de IAM son conjuntos de permisos que se aplican a usuarios, grupos o roles. Podemos ver la sintaxis y estructura de una política de AWS IAM dando al triangulito que tienen al lado. Es una definición de permisos en formato JSON, que no son más que pares de clave y valor estructurados.

aws iam

Una vez las hayamos revisado, nos aseguraremos de que hemos seleccionado AdministratorAccess y pulsaremos en Create Group. En la parte de abajo del todo de la pantalla (puede que tengas que hacer scroll) tienes un botón Next:Review para continuar.

Cuando confirmemos que esta todo como queríamos, le damos a Create User

aws iam

El siguiente paso es guardar las credenciales del nuevo usuario IAM que hemos creado. Access Key ID y Secret access key son necesarias para acceder mediante API o usando el cliente aws cli. El password es para acceder mediante la consola web usando la URL personalizada que nos muestra arriba. ES MUY IMPORTANTE guardarse la Secret Access Key en este momento ya que no volveremos a poder verla más adelante.

aws IAM

Si por lo que sea le diste demasiado rápido al botón Close. Puedes generarte otro par de Access Key / Secret Access Key en el panel de gestión de ese usuario en concreto.

Crear una política de contraseñas AWS

El último punto del asistente de seguridad de AWS IAM concierne a la política de contraseñas que establezcamos para las contraseñas de usuarios IAM para acceder a la consola web. Está en la sección Account Settings y en ella nos muestra una serie de requisitos que podemos marcar para reforzar la seguridad de las contraseñas de nuestros usuarios.AWS IAM passwords

Finalmente, podemos ver que las 5 recomendaciones que nos hace AWS IAM en el panel se cumplen y tenemos color verde.

AWS IAM

Roles IAM

No podemos dejar el apartado de AWS IAM sin hablar de los roles. Un rol es la forma que tenemos de asignar permisos a recursos AWS. Por ejemplo, en uno de mis proyectos, las instancias tienen un rol que les permite tener permisos sobre el servicio DNS Route 53. De esta forma, cuando arrancan son capaces de mirar su propia dirección IP y actualizar el registro DNS que les corresponde.

En otro proyecto, las instancias EC2 que servían HTTP necesitaban descargarse los archivos que iban a servir desde un bucket S3. Es una forma de autoprovisionar el contenido que va a servirse. Pues bien, tan solo era necesario darles el rol de acceso en modo lectura a un bucket S3 y ellas eran capaces de descargárselo sin tener que introducir dentro de la instancia ningún tipo de información sensible, access keys ni contraseñas.

Vamos a crear un rol de este último tipo para permitir que las instancias EC2 accedan al almacenamiento S3. Para ello, en el panel de control IAM, iremos a Roles > Create Role

aWS iam roles

A continuación debemos seleccionar que tipo de recurso va a tomar los permisos que le otorguemos. En este caso seleccionaremos EC2 y pulsaremos Next:Permissions.

aws iam role permissions

Buscaremos en el listado de permisos S3 y seleccionaremos AmazonS3FullAccess para después pulsar en Review.

aws iam roles

Daremos un nombre al rol que hemos creado y pulsaremos Create Role.

aws iam role s3

Repaso de AWS IAM

Con esto hemos terminado el capítulo de AWS IAM. Veamos los conceptos clave que hemos aprendido:

  • IAM es una forma de manejar grupos, usuarios y permisos. Es universal y no entiende de regiones AWS.
  • No se debe usar la cuenta root para acceder a la consola web AWS. Es super recomendable activar el doble factor de autenticación en la cuenta root para prevenir accesos no deseados.
  • Es importantísimo guardar las claves de acceso API ya que no podemos recuperar la Secret Access Key a posteriori. Si podemos crear nuevos pares de keys después para un usuario existente.
  • Los grupos permiten aplicar permisos a varios usuarios de forma conjunta.
  • Los permisos en AWS son muy granulares y se identifican mediante policies, que pueden agrupar varios permisos en un nombre facilmente entendible. Las policies son texto en formato JSON con clave / valor.
  • Podemos crear policies nuevas con los permisos concretos que consideremos necesarios.
  • Los roles permiten asignar politicas de permisos a recursos / servicios de AWS.