Siguiendo el dodecadalogo de Twelve Factor App para la construcción de aplicaciones en la nube, uno de los puntos clave habla sobre la configuración de nuestras piezas software. Este punto habla sobre la estricta separación de la configuración y el código que debemos de tener en cuenta. La configuración puede variar sustancialmente en cada despliegue, pero el código base no y por ello, casi convertido en standard, nos apoyamos en variables de entorno.
Las variables de entorno (envvars) son la mejor manera de almacenar la configuración que depende de dónde se ejecute la aplicación; por ejemplo, una clave API que se puede establecer en un valor mientras se desarrolla localmente y otro valor en la producción. Cuando estos valores son confidenciales y deben mantenerse privados, puede almacenarlos de forma segura utilizando un sistema de gestión de secrets también conocidos como vaults.
Muchos frameworks ya están incorporando la gestión de secrets entre sus funcionalidades. Por ejemplo, en mi stack habitual, el framework Symfony ha incluido en su versión 4.4 la posibilidad de gestionar los secrets con su componente de Configuration. A través de la generación de unas claves criptográficas se pueden mantener dichos secrets gestionados por la propia aplicación.
Sin embargo, vamos a ver herramientas de gestión de secrets que nos proporciona cada nube, y las ventajas de utilizar dichos sistemas si utilizamos cada una de estas infraestructuras.
¿Qué es la gestión de secrets?
Las herramientas de gestión de secrets son aquellas que encriptan, almacenan, gestionan y controla el acceso a secretos de aplicaciones e infraestructuras. Habitualmente estos secrets se utilizan para recuperarlos en el proceso de integración continua o despliegue continuo antes de ejecutar un build o de poner una release en producción con la configuración adecuada. Además estos secrets pueden compartirse entre distintas piezas de nuestra infraestructura.
Principalmente entre las ventajas que nos ofrece este tipo de sistemas nos encontramos:
- Colaborativo y control de accesos: Podremos compartir nuestros “vault” con el equipo y controlar quien tiene acceso a que secretos y quien puede modificarlos
- Encriptación de los secrets: Todos los secretos que almacenemos nunca estarán en texto plano, siempre estarán cifrados por defecto, proporcionando una gran seguridad
- Versionado y auditoría: Además podemos tener un control total sobre el versionado y el acceso a estos con una capa de auditoría que nos identificará que ha pasado con ellos a lo largo del tiempo
- Centralizado: Al usar una gestión de secrets en la nube, podemos centralizar en nuestra infra toda esta configuración, además de poder utilizarlo en los distintos servicios que necesitemos levantar, permitiendo compartir estos secretos.
A continuación, se verá un ejemplo de manejo de secretos con el CLI de cada nube en cada una de las herramientas de Gestión de secretos que nos proporciona Google Cloud, Azure o Amazon Web Services.
Google Secret Manager
https://cloud.google.com/secret-manager
Azure Key Vault
https://azure.microsoft.com/es-es/services/key-vault/