Subir parámetros desde un fichero a AWS SSM Parameter Store

Subir parámetros desde un fichero a AWS SSM Parameter Store Créditos de imagen: Unsplash

Cuando se desarrolla una aplicación web compleja, utilizando base de datos, conexiones seguras con certificado SSL, acceso a repositorios externos, etc., necesariamente se utilizará parámetros para poder acceder a todos esos servicios. Estos parámetros de acceso variarán dependiendo del entorno en el que se ejecute la aplicación: desarrollo, stages, producción,… Y alguno corresponderá a contraseñas de acceso o secrets para encriptación.

En entornos de desarrollo estos parámetros se podrán guardar en ficheros de configuración (comúnmente llamado .env), compartidos por los miembros del equipo. Pero cuando se sube la aplicación a un servidor de producción, esta solución no es factible, pues hay riesgo de que un atacante pueda acceder a nuestra carpeta raíz, abrir dicho fichero de configuración, y acceder así a nuestros servicios contratados.

Para evitar esto los servidores de producción suelen ofrecer variables de entorno, accesibles solamente por el proceso que ejecuta la aplicación web, y ocultas a atacantes maliciosos.

Solución en Amazon AWS

La nube de Amazon ofrece un servicio para almacenar parámetros, accesibles solamente para la cuenta del usuario. Este servicio se llama AWS System Manager Parameter Store, y es gratuito para los primeros 10.000 parámetros.

Cuando se utiliza cualquiera de los servicios que ofrece AWS para desplegar una aplicación web, al configurarlo para su lanzamiento es posible indicar qué parámetros de ese almacén privado serán integrados como variables de entorno de la máquina. De esta forma cualquier aplicación ejecutada en esa máquina podrá acceder a los parámetros necesarios con total seguridad.

Subir parámetros a AWS

Mediante la consola de cliente de Amazon (AWS CLI), es posible crear parámetros en AWS SSM, aunque de uno en uno:

$ aws ssm put-parameter --type SecureString --name parametro1 --value valor1

Normalmente el fichero de configuración de nuestra aplicación en el entorno de desarrollo contendrá más de un parámetro, decenas incluso, y será tedioso subir uno por uno a nuestro almacén de parámetros en AWS.

Por este motivo Frames75 ha desarrollado un nuevo comando de consola, programado en Javascript y ejecutable con Node.js. Este comando permitirá subir, con una sola instrucción, todos los parámetros contenidos en el fichero indicado al almacén de parámetros de la cuenta del usuario en AWS.

Instalación

Para poder instalar y ejecutar el comando es necesario previamente tener instalado el entorno de ejecución Node.js y su administrador de paquetes. Si no lo tiene instalado, en un S.O. Linux basado en Debian puede hacerlo mediante las siguientes instrucciones.

$ sudo apt update

$ sudo apt install nodejs

$ sudo apt install npm

Seguidamente se indica cómo instalar el nuevo comando.

$ npm install -g put-secrets-awssm

Ejecución

Para poder ejecutar el comando es necesario que previamente el usuario tenga configurada la consola con sus credenciales de AWS IAM, pudiendo así acceder a su cuenta de AWS.

Ejecución con los parámetros por defecto.

  • Region = ‘eu-west-1’
  • Name Space = ‘default-secrets’
  • File = ‘.env’
$ put-secrets-awssm put

Uploaded Param: /default-secrets/DB_PORT * Value: 3001
Uploaded Param: /default-secrets/DB_PASS * Value: user1
Uploaded Param: /default-secrets/DB_USER * Value: password

Otro ejemplo de uso indicando los parámetros personalizados.

$ put-secrets-awssm put --file ./dotenv/.env --region eu-west-1 --namespace test1

Previsualizar las variables que serán subidas, sin subirlas.

$ put-secrets-awssm --show

Parameter: DB_PORT 	 Value: 3001
Parameter: DB_USER 	 Value: user1
Parameter: DB_PASS 	 Value: password

Obtener la ayuda del comando.

$ put-secrets-awssm put --help

put-secrets-awssm put

Put secret variables from a file into AWS SM Parameter Store. The AWS IAM credentials should be previously set up on the console.

Options:
  --file, -f       The file name containing the variables. Default is ".env"
                                                          [string]
  --show, -s       Preview the variables that will be saved     [boolean]
  --help, -h       Muestra ayuda                                [boolean]
  --version, -v    Muestra número de versión                    [boolean]
  --region, -r     The AWS region where the variables will be saved. Default is "eu-west-1"                      [string]
  --namespace, -n  The Name Space preceding the variable name. Default is "default-secrets"                      [string]

Repositorio del código

Este comando es Open Source Software. Puede acceder a su código en este repositorio de Github. Ten libertad para modificarlo y subir una pull request si lo consideras apropiado.

Otros recursos

Artículos relacionados

Comentarios