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 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.
¿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.
EJEMPLO
Azure Key Vault
https://azure.microsoft.com/es-es/services/key-vault/