Subir parámetros desde un fichero a AWS SSM Parameter Store
13 Nov 2020Cuando 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
- AWS SDK putParameter Method
- Secret Forklift
- ssmenv-cli: Obtiene los parámetros de AWS SSM Parameter Store y los guarda como variables de entorno.
Comentarios