Blog

Ansible-vault: gestión de datos sensibles

En su momento, cuando comenzamos a trabajar con Ansible como una de nuestras herramientas principales para la gestión de los sistemas y configuraciones de nuestros clientes, también implementamos el uso de repositorios para contener esta información. Así, nuestro equipo podría trabajar de forma dinámica con Ansible teniendo un control de versiones de los diferentes cambios que se iban realizando.

A pesar de ello, una parte importante de la información con la que trabajamos en nuestro día a día es delicada, ya sean contraseñas, certificados o ficheros con datos sensibles, y no podrían tratarse de cualquier forma.

A continuación vamos a enseñaros una forma fácil de gestionar esta información con la funcionalidad de Ansible-vault, disponible por defecto en Ansible desde la versión 1.5.

Los ejemplos que vamos a mostrar son básicos para empezar a trabajar con esta herramienta.

Tratamientos de ficheros

En esta primera parte veremos como cifrar, descifrar, visualizar y editar ficheros.

Crear un fichero cifrado

Para crear un fichero cifrado podemos utilizar el siguiente comando.

En este caso, nos solicitará que introduzcamos una contraseña de cifrado y nos abrirá nuestro editor de texto predeterminado. Una vez guardemos y salgamos del editor de texto se creará el fichero.

MATRIX>>ansible-vault create fichero1.txt
New Vault password:
Confirm New Vault password:
MATRIX>>ls -la
total 12
drwxr-xr-x  2 MATRIX MATRIX 4096 Dec 22 20:12 .
drwxr-x--- 15 MATRIX MATRIX 4096 Dec 22 20:12 ..
-rw-------  1 MATRIX MATRIX  419 Dec 22 20:12 fichero1.txt

 

Ahora si visualizamos el contenido, por ejemplo con cat, veremos que el contenido está cifrado:

MATRIX>>cat fichero1.txt
$ANSIBLE_VAULT;1.1;AES256
37393564333562613162306165336430323836663437303363303832363665386566646365383561
3932626264323761313033633665393461353465663664660a653739333333626264396361613337
66363130613938323238306362363432653561393832383838373662336136396565333931306634
3139373732613065300a626138623862363838623065366432303231353134353466373564336162
33313137363264316536346634663036646134356365353361613433653838343636633762303562
39303665326339663566343939393634363366313461363436313639356338626662366234313733
63303530326235306231313432643365376336306464343266373633346533353833613930636663
65356430353832323632

 

Debemos tener en cuenta que hasta la versión 2.4 de Ansible todas las tareas que se ejecuten juntas deben compartir la misma contraseña. Es decir, si tenemos varios ficheros cifrados que se usan de forma simultánea en el mismo playbook, se deben cifrar con la misma clave.

Cifrar un fichero que ya existe

Cuando necesitamos cifrar ficheros que ya existen podemos usar el siguiente comando:

## Comprobación del contenido del fichero sin cifrar
MATRIX>>cat existe1.txt
¿Qué es real?
¿Cómo defines lo real?
Si estás hablando de lo que puedes sentir,
lo que puedes oler, lo que puedes saborear y ver,
entonces lo real son simplemente señales eléctricas interpretadas por tu cerebro.
 
## Cifrado de fichero existe1.txt
MATRIX>>ansible-vault encrypt existe1.txt
New Vault password:
Confirm New Vault password:
Encryption successful
 
## Comprobación del contenido del fichero cifrado
MATRIX>>cat existe1.txt
$ANSIBLE_VAULT;1.1;AES256
32623130326566363630393461366434646336656263363332373038343636663130383630383435
6338323032626363373533363565306135313361326437340a373936393333633965366639373936
61323931313665393831313162663339626438313666623361613730333733663839363763643233
3237373539646664380a343866623266633537366531313335323661383961303064353433333830
38323631633830653037343934633736386233383835346166633239323437386339386536616163
63656665623633613963646535366465393834386134626265323566393830363936663262363736
36303530333863613962636261393236393637663439376264373534373930343433633662326435
30643530363166383130346237336132646165663039623539306337633061623937643635626439
34666365323164653338653633616634663764633837363031333831323037376663356633373766
61383732303730343838666134353233366166626138613134646566306463343134313839633864
31363139653239323134393539303938666532653163356361613264396636323832663362336230
31386239313666656561386338316264616430373665336363363536303238623261326466366135
65343065633738323262633136613138336332616132393338623631666334376537363165376464
63393234613038303935323735323862653030663439323831623564323636646663623962393137
393962393565313535346135636163393530

Visualizar contenido de ficheros cifrados

En el caso de que necesitemos visualizar el contenido de un fichero que tenemos cifrado podemos utilizar:

## Visualizar contenido de un fichero cifrado
MATRIX>>ansible-vault view fichero1.txt
## Introducimos la contraseña con la que lo hemos cifrado
Vault password:
No existen preguntas sin respuesta, solo preguntas mal formuladas.
 
## Visualizar contenido de un fichero cifrado
MATRIX>>ansible-vault view existe1.txt
## Introducimos la contraseña con la que lo hemos cifrado
Vault password:
¿Qué es real?
¿Cómo defines lo real?
Si estás hablando de lo que puedes sentir,
lo que puedes oler, lo que puedes saborear y ver,
entonces lo real son simplemente señales eléctricas interpretadas por tu cerebro.

Editar ficheros cifrados

Si lo que necesitamos es editar el contenido de alguno de los ficheros que ya tenemos cifrados podemos usar:

## Editamos un fichero cifrado
MATRIX>>ansible-vault edit existe1.txt
## Introducimos la contraseña con la que lo hemos cifrado
Vault password:
## Nos abrirá nuestro editor de texto predeterminado para que realicemos los cambios.
 
## Visualizamos el contenido después de los cambios
MATRIX>>ansible-vault view existe1.txt
Vault password:
Nada es real vivimos en una simulación.

Descifrar ficheros

En el caso de que necesitemos descifrar alguno de los ficheros que tenemos cifrados podemos utilizar:

## Desciframos el fichero
MATRIX>>ansible-vault decrypt fichero1.txt
## Introducimos la contraseña con la que lo hemos cifrado
Vault password:
Decryption successful
 
## Podemos visualizar el contenido del fichero.
MATRIX>>cat fichero1.txt
No existen preguntas sin respuesta, solo preguntas mal formuladas.

Cambiar clave de cifrado de ficheros

En el caso de que necesitemos modificar la clave de cifrado de alguno de nuestros ficheros podemos utilizar:

## Cambiar clave de cifrado
MATRIX>>ansible-vault rekey existe1.txt
## Contraseña original
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful

Tratamiento de variables

Aparte del tratamiento de ficheros, muchas veces necesitamos utilizar variables dentro de nuestro YAML que estén cifradas, pero no el contenido completo del YAML. Desde la versión de Ansible 2.3 nos permite hacer uso de variables cifradas.

En los siguientes apartados os enseñamos cómo cifrar y visualizar variables que podemos usar en nuestras configuraciones.

Cifrar variable

Para cifrar una variable utilizaremos encrypt_string dentro de Ansible-vault:

## Comando
MATRIX>>ansible-vault encrypt_string --name "<NOMBRE VARIABLE>" "<CONTENIDO DE LA VARIABLE>"
 
## Ejemplo de variable cifrada
MATRIX>>ansible-vault encrypt_string --name "matrix_in" "No existen preguntas sin respuesta, solo preguntas mal formuladas."
New Vault password:
Confirm New Vault password:
 
## La definición de la variable cifrada que podemos incluir en nuestro ficheros.
matrix_in: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          65353032373533373464643531333061316439353636613765636365363537383539623163623432
          6132623361616265623765363663393866636132623635380a366538623435393932656438363833
          39366537386662346566363939653862346266616266633066663932353834333336613536353432
          3666653134363633640a633463633430646433376534326166666266326437646266613465646430
          37643161313631383837653266313738313935646434383139333035336665353462346338613062
          63316335333336323238353964393231316365636234313361363262363536356130386637393736
          61636166333838656432343034383438353538633136366639633530323332353834303133633462
          31663034323637623737
Encryption successful

Visualizar variable cifrada

Si queremos visualizar alguna de las variables que tenemos cifradas podemos usar lo siguiente:

## Comando
MATRIX>>echo '<CIFRADO DE LA VARIABLE>' | ansible-vault decrypt && echo
 
## Ejemplo visualizar variable cifrada
MATRIX>>echo '$ANSIBLE_VAULT;1.1;AES256
> 65353032373533373464643531333061316439353636613765636365363537383539623163623432
> 6132623361616265623765363663393866636132623635380a366538623435393932656438363833
> 39366537386662346566363939653862346266616266633066663932353834333336613536353432
> 3666653134363633640a633463633430646433376534326166666266326437646266613465646430
> 37643161313631383837653266313738313935646434383139333035336665353462346338613062
> 63316335333336323238353964393231316365636234313361363262363536356130386637393736
> 61636166333838656432343034383438353538633136366639633530323332353834303133633462
> 31663034323637623737' | ansible-vault decrypt  && echo
Vault password:
Decryption successful
No existen preguntas sin respuesta, solo preguntas mal formuladas.

Ejecución de playbooks con contenido cifrado

Una vez tenemos nuestros ficheros cifrados y/o variables, ya podemos ejecutar nuestros playbooks de Ansible, pero tenemos que tener en cuenta que deberemos indicar la clave de cifrado.

Podemos indicarle esta contraseña de dos maneras:

  • Introduciendo la contraseña de forma interactiva.
  • Desde la versión 1.7 indicando un fichero donde está almacenada la contraseña.

Ejecución introduciendo contraseña de forma interactiva

Si queremos ejecutar un playbook que necesita hacer uso de ficheros y/o variables cifradas y que podamos indicar la contraseña de forma interactiva podemos usar:

MATRIX>>ansible-playbook -i inventory playbook.yml --ask-vault-pass

 

Tened en cuenta que cada vez que sea necesario que el playbook consulte un fichero y/o contraseña cifrada, nos solicitará que introduzcamos la clave de cifrado.

Ejecución desatendida con contraseña almacenada en fichero

Si queremos ejecutar un playbook que necesita hacer uso de ficheros y/o variables cifradas, podemos indicarle un fichero donde está almacenada nuestra clave de cifrado:

MATRIX>>ansible-playbook -i inventory playbook.yml --vault-password-file vault_pass.txt

 

Tened especial cuidado de que el fichero que almacena nuestras claves de cifrado tenga los permisos adecuados para que solo pueda ser utilizado por el usuario que ejecuta Ansible o usuarios autorizados.

Como podéis observar, es muy fácil mantener seguros las datos sensibles que tenemos dentro de nuestros repositorios.

Esperamos que os sea de utilidad esta guía de iniciación al uso de Ansible-vault.

 

Newsletter de STR Sistemas

Suscríbete a nuestra newsletter para recibir contenido interesante del mundo DevOps y artículos escritos por nuestros técnicos

¡Usamos cookies propias y de terceros para mejorar tu experiencia en esta web! Si sigues navegando, consientes y aceptas estas cookies en tu ordenador, móvil o tablet.

Más información sobre las cookies y cómo cambiar su configuración en tu navegador aquí.

x