¿Qué es lo primero que debemos hacer ni bien abrimos nuestra cuenta en AWS?
Seguro pensaste en crear esa instancia de EC2 (máquinas virtuales) para levantar un servidor web o deployar tu aplicación en un container usando ECS (gestión de containers).
Lamento informarte que antes tenemos que realizar un paso no tan glamoroso como los anteriores: definir qué personas de nuestra organización pueden acceder a qué recursos dentro de la cuenta de AWS.
Es decir, debemos ponernos en los zapatos de un Guardia de seguridad, el cual lleva un control sobre los accesos o permisos que tienen las personas de la organización 👮.
En esta guía aprenderemos a definir esos permisos y así establecer una política de seguridad prolija y escalable desde el momento 0. ¡Comencemos!
¿Por qué es necesaria una política de control de accesos?
Quizás esta respuesta es un poco obvia cuando se trata de una organización con decenas de desarrolladores y aplicaciones interactuando con nuestros servicios en la nube. Sin embargo, el control de accesos también es necesario para proyectos unipersonales, por dos motivos:
1️⃣ Es muy posible que tu proyecto sea el resultado de la combinación de muchos servicios dentro de AWS (Almacenamiento, cómputo, bases de datos, networking, etc). Estos servicios van a interactuar entre sí, por lo que es recomendable que existan ciertos permisos asociados a cada servicio.
Por ejemplo, podemos ejecutar un proceso en una instancia de EC2, el cual lee los archivos depositados en S3, les aplica una transformación, y luego inserta datos en una base de datos RDS. En este caso, nuestra instancia de EC2 debería tener permisos de lectura sobre S3 y permisos de escritura sobre RDS. Si estos permisos no están correctamente configurados, todo el proceso que describimos anteriormente no se ejecutará correctamente.
2️⃣ Escalabilidad. Si tu proyecto tiene éxito (y ojalá así sea 😊 ) será inevitable que más personas empiecen a meter mano sobre la cuenta de AWS. Llegado el caso, será obligatorio contar con una buena política de permisos.
Siguiendo el ejemplo anterior, seguramente contarás con un administrador de base de datos, el cual obviamente necesitará acceso a RDS. Sin embargo, este último no necesariamente debe contar con permisos para EC2 (si es que aún usamos este servicio 👀) o S3.
Servicio IAM
En AWS existe un servicio para todo. Entre ellos, hay uno destinado a administrar los permisos dentro de la cuenta. Les doy la bienvenida a IAM (Identity and Access Management).
Para entenderlo, es importante que expliquemos primero las entidades que forman parte de IAM:
- Política: Es un conjunto de permisos que definen qué cosas se pueden hacer y qué no sobre cada servicio de AWS.
- Usuario: Es una entidad que se crea en AWS para representar a la persona o a la aplicación que se utiliza para interactuar con los servicios de AWS.
- Grupo: Es un conjunto de usuarios.
- Rol: Un rol es un conjunto de políticas que se le puede asignar a un usuario (persona o aplicación) o un servicio.
Manos a la obra
Ahora que entendemos los principales conceptos del servicio IAM, veamos cómo crear un usuario y le asignarle permisos específicos para trabajar solamente en determinados servicios. ¡Empecemos!
Creación de un usuario IAM
Para comenzar, necesitamos estar logueados como el usuario root, es decir, el “dueño” de la cuenta en AWS.
Antes de avanzar, seguramente se preguntarán ¿por qué debo crear otro usuario y no trabajar directamente usando el root?
La respuesta es simple: para evitar mandarnos una macana 😜. Recordemos que el usuario root tiene permiso de hacer absolutamente TODO dentro la cuenta de AWS. Y como dijo el tío Ben, “un gran poder conlleva una gran responsabilidad”
El usuario root podría tranquilamente eliminar procesos, apagar instancias, borrar buckets enteros con datos importantes, entre otras cosas.
Es por ello que se recomienda crear usuarios con menos privilegios y operar con ellos en lugar de usar el root. Este último se debe emplear únicamente para casos puntuales.
Dicho esto, vamos a ingresar a AWS con nuestra cuenta root y buscamos el servicio IAM.
Deberíamos visualizar una pantalla similar a esta.
Aquí observamos los 4 actores que mencionamos anteriormente: Grupos, Usuarios, Roles y Políticas. En esta cuenta en particular se encuentran trabajando 4 seres humanos (yo incluido) y cada uno tiene 1 usuario. Esto significa que cuando yo me pongo a trabajar sobre la cuenta de AWS, lo hago con mi usuario (Dario) y no con el root. Echemos un vistazo sobre los usuarios:
Vemos que todos los usuarios pertenecen a un grupo que se llama Admins. En este ejercicio vamos a crear otro usuario llamado Emilia y lo añadiremos a un nuevo grupo que será Developers.
Empezamos haciendo click en el botón “Añadir usuarios”.
Luego aparece la siguiente ventana :
Allí completamos con el nombre deseado (Emilia por ejemplo).
Vemos que tenemos que seleccionar el tipo de credenciales de AWS. Veamos para qué es cada una:
- La primera sirve para usuarios aplicativos (en criollo, una aplicación) y cuenta de un usuario (clave de acceso) y contraseña (clave de acceso secreta). Esto significa que cuando la aplicación necesite acceder a servicios de nuestra cuenta de AWS, deberá “loguearse” con estas credenciales.
- La segunda es el clásico método de autenticación que consta de usuario y contraseña que usamos los humanos para acceder a cualquier servicio. Dado que estamos creando un usuario nuevo que será un humano (o eso creemos 👀), elegiremos la segunda opción. Aquí debemos también generar la contraseña.
Esto podemos definirlo nosotros a mano o dejar que AWS la genere automáticamente. Finalmente, si hacemos click en la opción “Requerir el restablecimiento de contraseña” podemos hacer que cuando el usuario se loguee se vea forzado a cambiar esta contraseña que elegimos nosotros (MUY recomendado).
El siguiente paso consiste en elegir el grupo para nuestro nuevo usuario. Podemos elegir un grupo existente o crear uno nuevo.
Como dijimos anteriormente, vamos a crear un grupo nuevo llamado Developers. Hacemos click en Crear un grupo.
Se nos abre una nueva ventana donde nos pide el nombre del grupo y las políticas que queremos asociar a ese grupo. Recordemos, estas políticas (o conjunto de permisos) son los que impactarán sobre los usuarios de dicho grupo.
Si bien nosotros podemos crear nuestras propias políticas customizadas (tema para otro tutorial 😉) por ahora vamos a usar las políticas “enlatadas” que nos brinda IAM. Para fines prácticos, haremos de cuenta que este grupo sólamente trabajará sobre el servicio EC2. Entonces le asignaremos la política AmazonEC2FullAccess. Seleccionamos y hacemos click en Crear Grupo.
¡Felicitaciones! Has creado un grupo personalizado con sus respectivos permisos para trabajar en AWS.
El próximo paso en este tutorial involucra Etiquetas: una función que nos permite almacenar información adicional sobre el usuario en formato clave-valor. Algunos ejemplos:
- email: emilia@deployr.ai
- rol: backend_dev
- team: data_platform
Aquí te dejamos que uses la creatividad y definas las etiquetas que quieras 🙂
El último paso de este tutorial (por fin) es simplemente revisar los pasos anteriores y darle a Crear un usuario.
¡Felicitaciones! Has creado un usuario nuevo para tu organización de forma segura y prolija.
Conclusión
En este tutorial aprendimos a crear y administrar usuarios de forma segura para nuestra cuenta de AWS usando el servicio IAM.
Lo que acabamos de hacer se puede reproducir y complejizar tanto como queramos o como la organización lo requiera. No obstante, con el simple hecho de seguir estos pasos ya es más que suficiente para arrancar 💪.