Obtención de contraseña SMTP en Amazon SES con usuario IAM con Terraform
Recientemente, durante nuestras labores de soporte hemos recibido una petición de un cliente que solicitaba la creación de un usuario en IAM para, a su vez, usarlo para el envío de correo a través del servicio SES de AWS.
Por si no lo sabes, en este caso el usuario de SMTP será el Access Key del usuario IAM, mientras que la contraseña SMTP se obtiene a partir de la Secret Access Key, la cual solo puede verse durante la creación de la Access Key.
La documentación oficial de AWS nos enseña dos formas de abordar esta situación.
La primera es a través de la consola de Amazon. Esta opción queda descartada, ya que en STR trabajamos con Terraform para tener todas las arquitecturas de nuestros clientes automatizadas.
La segunda es cogiendo un usuario de IAM ya creado, aplicándole una determinada policy y, finalmente, creando un script en Python al cual debemos pasarle la Secret Access Key y la región de AWS. De este modo, el script nos devolverá la contraseña SMTP.
Sí, son muchos pasos, ¿verdad?
Fue entonces cuando nos preguntamos... ¿De verdad es necesario pasar por todo este procedimiento tan enrevesado? ¿No habrá otra manera de hacerlo? Y así fue como descubrimos una forma muy sencilla de realizarlo íntegramente desde Terraform.
¡Te vamos a explicar cómo en este artículo!
Creación del usuario y el grupo en IAM
Realmente, la creación del grupo es opcional, pero si en el futuro tu cliente te pide crear más usuarios, lo ideal es tener un grupo con la policy deseada y así solo tendrás que añadir los nuevos usuarios a dicho grupo.
Así pues, comenzamos por crear el usuario en un fichero .tf. Si aún no controlas mucho de Terraform, no te preocupes, que al margen derecho te explicamos lo que hace cada bloque de código:
A continuación solo nos queda crear el grupo y la policy. Para ello, solo tienes que añadir el siguiente código en el mismo fichero:
Tenemos el usuario, tenemos su Access Key (que recordemos será el usuario SMTP) y tenemos el grupo con la policy, por lo que nos falta la contraseña SMTP, la cual la hemos generado en el tercer bloque de código de la primera imagen. Como es un output, solo tenemos que lanzar el comando terraform apply para aplicar los cambios y para ver la contraseña, ¿cierto?
Pues obviamente no. Se trata de información sensible, por lo que Terraform no nos la muestra así como así, pero existe un comando que nos permitirá verla.
Uso del comando terraform output-raw
Gracias al comando terraform output –raw podremos imprimir por pantalla la información sensible. ¡OJO! Esto solo se puede hacer justo después de aplicar los cambios, recordemos que la Secret Access Key solo se muestra tras la creación del Access Key, así que asegúrate de no perder esta información. En la siguiente imagen vemos el resultado de lanzar el comando:
¡Y ya tenemos nuestra contraseña SMTP! Obtenida fácilmente mediante terminal e íntegramente desde Terraform sin necesidad de recurrir a scripts ni otros medios externos. Por esto, amigos, es importante tener automatizadas todas nuestras plataformas y arquitecturas ;)