En este tutorial comprobaremos como subir información sensible de forma segura a nuestro sistema de control de versiones con ansible-vault.
Índice de contenidos
- 1. Introducción
- 2. Entorno
- 3. Ansible Vault
- 4. Ejecución de Ansible con propiedades cifradas.
- 6. Conclusiones
- 7. Referencias
1. Introducción
Cuando llevas un tiempo trabajando con Ansible, te das cuenta de que en tus ficheros de propiedades tienes un montón de información sensible, como contraseñas de la base de datos, o información sensible de la aplicación que estás desarrollando.
Podrías pensar en subir esa información sensible al control de versiones, pero entonces perderías todas las ventajas que esto conlleva. Para solventar esto, desde la versión 1.5 Ansible nos provee de Ansible Vault, que nos permite subir nuestros ficheros de forma cifrada.
Esta herramienta ya viene instalada con Ansible por defecto, así que vamos a comprobar qué podemos hacer con ella 😀
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro Retina 15′ (2.5 Ghz Intel Core I7, 16GB DDR3).
- Sistema Operativo: Mac OS El Capitán 10.11.2
- Ansible 2.1.0.0
3. Ansible Vault
Para proteger la información sensible, utilizamos ansible-vault para ser capaces de versionar los archivos que contienen las claves de la configuración sin comprometer su seguridad al estar expuestos a un sistema de control de versiones.
3.1. Cifrar
Terminal
$ ansible-vault encrypt
Este comando pide una contraseña, qué es la que se usará a la hora de querer descifrar el archivo.
IMPORTANTE: Tener en cuenta que todas las tareas que se ejecuten juntas deben compartir la misma contraseña. Es decir, si ciframos varios ficheros de propiedades que pueden ser usados de forma simultánea en el mismo playbook, se deben cifrar sus ficheros de propiedades con la misma clave.
3.2. Descifrar
Terminal
$ ansible-vault decrypt
Este comando descifra el fichero, dejando la información tal y como estaba antes de cifrarlo.
Yo no recomiendo usar este comando para editar un fichero previamente cifrado y subido al control de versiones porque al volver a subir los cambios se te puede olvidar volver a cifrarlo de nuevo, y eso te obligaría a cambiar otra vez todas las credenciales que estén almacenadas en tu fichero de propiedades.
RECUERDA: Hay que subir el fichero cifrado al repositorio. No subir nunca el fichero sin cifrar.
3.3. Editar
Terminal
$ ansible-vault edit
Este comando te permite editar el fichero con tu editor del terminal por defecto (Vim en mi caso), y cuando guardas el fichero, vuelve a dejarlo cifrado. Este es el comando que yo te recomiendo para editar, como su propio nombre indica, porque no se te va a olvidar nunca volver a cifrar el archivo.
3.4. Ver por consola
Terminal
$ ansible-vault view
Este comando nos mostrará el contenido del fichero cifrado. Ideal si solo quieres recordar el contenido, y no quieres arriesgarte a editarlo por error 😀
3.5. Cambiar la clave de cifrado
Terminal
$ ansible-vault rekey
Es bien conocido por todos que debemos de ir renovando nuestras contraseñas con frecuencia. Para cambiar la contraseña que utilizamos para cifrar nuestros archivos, podemos usar el comando anterior.
4 Ejecución de Ansible con propiedades cifradas
Una vez tenemos nuestros ficheros cifrados, ahora nos falta saber como cambia nuestro comando de ejecución de Ansible, y cómo podemos indicarle la clave que hemos elegido para cifrar el fichero.
Podemos indicarle esta contraseña de dos maneras: mediante un fichero que contenga la propiedad o escribiéndola directamente después de ejecutar el comando.
4.1. Ejecutar Ansible con las claves cifradas sin introducir manualmente la contraseña
Terminal
$ ansible-playbook -i inventory playbook.yml -vvvv --vault-password-file ~/.vault_pass.txt
En este caso, el fichero se llamaría .vault_pass.txt y estaría en nuestra Home. Ese fichero solo contendría una línea con nuestra contraseña.
Como este fichero podemos ponerlo en cualquier lugar, tenemos que asegurarnos de NO versionar este fichero, ya que si no, todos nuestros esfuerzos por subir el fichero cifrado serían en vano.
¡IMPORTANTE!: Hay que establecer los permisos del fichero para que solo sea accesible por el usuario que se va a encargar de ejecutar Ansible, para mayor seguridad.
4.2. Ejecutar Ansible con las claves cifradas introduciendo las contraseñas
Terminal
$ ansible-playbook -i inventory playbook.yml -vvvv --ask-vault-pass
Tras ejecutar el comando, verás como en el prompt de la terminal pone «Vault password:» donde tendrás que escribir la contraseña para que pueda ejecutarse el playbook.
6. Conclusiones
Como hemos podido apreciar, es muy fácil subir información sensible a nuestro control de versiones gracias a Ansible Vault.
7. Referencias
- Ansible Vault documentation.