La idea es poner todos nuestros datos confidenciales [...]
El significado de "todos" en esta oración debe analizarse con mucho cuidado antes de implementar la solución que planea.
Ansible vault es una herramienta muy útil, pero solo debe usarse para almacenar secretos que son:
- Específicamente necesario para los despliegues ansibles
- Fácilmente inutilizable para los propietarios que deben ignorarlos, pero que pueden "recordarlos" de manera ilegítima (por lo general, empleados que no han sido abordados)
El segundo punto es crítico.
Muchas personas, y potencialmente todo el equipo de DevOps, tendrán acceso a la contraseña de la bóveda ansible y, por lo tanto, a todos los secretos.
Por lo tanto, para todos los secretos almacenados en la bóveda, debe cumplirse una condición por la cual una persona o máquina con acceso no autorizado a ellos debe ser incapaz de hacer uso de ellos si así lo desea.
En términos concretos, si usa ansible para implementar una base de datos y sus usuarios, puede almacenar las contraseñas en la bóveda, pero tendrá que tener mucho cuidado (y probablemente considerar otra solución) si ese servicio estará disponible en Internet. y sin la necesidad de ninguna autenticación VPN!
Los usuarios (DevOps) expuestos al secreto, deben ser incapaces de usar contraseñas "recordadas" si se les impone una barrera de seguridad (por ejemplo, se revocó el acceso VPN). Además de esto, el acceso al repositorio de código fuente (donde se almacena la bóveda) también debe ser revocado antes de cambiar las contraseñas.
En estas condiciones, la bóveda ansible es una herramienta muy útil.
Intentar almacenar un secreto que podría ser utilizado por cualquier persona o máquina en Internet en la bóveda sería, en cambio, un error (por ejemplo, las credenciales de VPN de los usuarios).
¿Hay alguna otra opción, que es la mejor (y segura) forma de almacenar la contraseña de Ansible-Vault
Bajo las condiciones del párrafo anterior, creo que una buena práctica sería:
- Almacene la contraseña de la bóveda en una bóveda segura externa (algo como Vault de HashiCorp o cualquier SaaS para la gestión de credenciales)
- Permita el acceso al elemento de la bóveda externa a DevOps (necesitarán la contraseña para la prueba) y el sistema CI / CD o el controlador ansible
¡Mantenga una convención para usar secretos ! ¡No podrá revisar los cambios en los secretos y no podrá buscar variables ansibles en los archivos de secretos! Así que sé minucioso desde el principio. Una buena convención es nombrar todas las variables almacenadas en la bóveda ansible con un secret_
prefijo. Cuando veas algo como:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
sabrá que el valor se almacena en la bóveda ansible.