Mantener tus secretos fuera del alcance de manos equivocadas es una prioridad absoluta. Pero ¿cómo exactamente aseguras tus secretos? ¿Los guardas en un archivo de texto local? Sin encriptación, esa opción es demasiado arriesgada. ¿Por qué no utilizar Ansible Vault para encriptar tus variables y archivos?
En este tutorial, aprenderás cómo proteger contenido sensible, como tus contraseñas o claves, con Ansible Vault.
Sigue leyendo y mantén alejadas las miradas curiosas de tus secretos!
Requisitos previos
Este tutorial será una demostración práctica. Si quieres seguirlo, asegúrate de tener lo siguiente.
- A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
- Ansible instalado en tu máquina.
Configurando el Editor Predeterminado de Ansible Vault
Como administrador de sistemas, es posible que estés trabajando en varios playbooks de Ansible que contienen nombres de usuario y contraseñas de diferentes servidores. No puedes subir estos archivos al sistema de control de versiones en formato de texto plano porque no está seguro. Y por esa razón, Ansible Vault es útil.
Ansible Vault está diseñado para integrarse en tu flujo de trabajo existente para almacenar tus datos en un archivo encriptado. Pero antes de crear tu primer Ansible Vault, tendrás que configurar tu editor predeterminado de Ansible Vault.
1. Abre tu terminal y haz SSH a tu máquina.
2. A continuación, abre el archivo ~/.bashrc usando un editor de texto. El archivo ~/.bashrc es un script de shell que se ejecuta cada vez que se inicia una nueva sesión de terminal. Este script de shell inicializa una sesión de shell interactiva y define variables de entorno.
3. Agrega la siguiente línea al final del archivo ~/.bashrc, guarda los cambios y cierra el editor.
Esta línea establece la variable EDITOR para el usuario actualmente conectado. La variable EDITOR asegura que se utilice tu editor de texto preferido cada vez que abras una nueva sesión de terminal.
Puedes establecer cualquier otro editor de texto que prefieras, pero este tutorial utiliza el editor de texto nano.

4. Por último, ejecuta los siguientes comandos para aplicar los cambios (source) sin cerrar sesión y volver a iniciarla, e imprime (echo) el editor de texto predeterminado actual de tu sistema.
Verifica que la variable EDITOR esté configurada con tu editor preferido, como se muestra a continuación.

Creando y encriptando tu primer Ansible Vault
Has establecido tu editor de bóveda predeterminado, así que es hora de crear tu primera bóveda. Crearás y cifrarás un archivo que contiene información sensible, como nombres de usuario, contraseñas, claves de acceso secretas, etc.
Ejecutarás el comando ansible-vault, la interfaz principal para interactuar con las bóvedas de Ansible.
1. Ejecuta el siguiente comando para crear el archivo secret.yml. Ansible utiliza YAML, un formato más legible para los humanos en comparación con otros formatos de datos como JSON.
Se te pedirá que ingreses y confirmes una contraseña para el archivo. Utilizarás esta contraseña para cifrar y descifrar el archivo secret.yml más tarde, así que asegúrate de elegir una contraseña fuerte que puedas recordar.

2. Después de establecer la contraseña de la bóveda, tu editor de texto predeterminado abrirá un archivo vacío. Ingresa la información sensible que desees almacenar en el archivo, guárdalo y cierra el editor.
Este tutorial almacena las variables aws_access_key y aws_secret_key en el archivo secret.yml. En este punto, Ansible cifra el archivo secret.yml, y nadie más puede leer el contenido de la bóveda a menos que conozcan la contraseña de la bóveda.

3. Ejecuta el comando cat para intentar ver el contenido del archivo secret.yml sin la contraseña.
Puede verificar que el contenido del archivo esté encriptado si ve números aleatorios, como se muestra a continuación. La cabecera $ANSIBLE_VAULT;1.1;AES256 en la parte superior del archivo indica que el archivo está encriptado con Ansible Vault utilizando el cifrado AES256.
El Estándar de Encriptación Avanzado (AES) es un algoritmo de clave simétrica que utiliza la misma clave para encriptar y desencriptar datos.

Encriptación de archivos existentes
Ha creado un archivo desde cero que se encripta automáticamente. Pero, ¿cómo se encriptan los archivos existentes? Ansible también ofrece el subcomando encrypt para encriptar un archivo especificado. Para ver cómo encriptar un archivo existente, encriptará un archivo específico que contiene variables de Ansible.
Ejecute el siguiente comando para encriptar un archivo (vars.yml
).
Al igual que cuando creó el archivo secret.yml por primera vez, se le pedirá que proporcione una contraseña para el archivo vars.yml.
El editor predeterminado no se abrirá esta vez porque el archivo vars.yml ya existe. En su lugar, recibirá el mensaje Encryption successful, indicando que Ansible encriptó el archivo, como se muestra a continuación.

Ahora, ejecute el comando cat a continuación para verificar que Ansible encriptó el archivo vars.yml.

Desencriptar datos de Ansible Vault
Has visto cómo cifrar archivos, haciéndolos seguros. Pero cuando necesitas ver el contenido de tus archivos, ¿cómo descifras tus archivos? Descifrar un archivo es útil cuando deseas editar un archivo cifrado o leer su contenido sin proporcionar la contraseña cada vez. Y el subcomando decrypt de Ansible te será útil.
1. Ejecuta el siguiente comando para descifrar el archivo secret.yml.
El subcomando decrypt toma la ruta de un archivo cifrado como su único argumento.
Proporciona la contraseña para el archivo, y el contenido del archivo se descifrará y se escribirá en el disco en texto plano.

2. A continuación, ejecuta el comando cat para ver el contenido descifrado del archivo secret.yml.
Puedes ver a continuación el contenido del archivo secret.yml impreso en la terminal sin ningún cifrado. En este punto, puedes agregar, editar o eliminar cualquier línea en el archivo a tu gusto.

3. Por último, ejecuta el siguiente comando para cifrar el archivo secret.yml y proporcionar una contraseña para mantener seguro el contenido del archivo.

Actualización de la contraseña de Ansible Vault
Has visto que necesitas ingresar una contraseña cada vez que cifras y descifras archivos. Pero tal vez solo quieras actualizar la contraseña del archivo sin descifrar el archivo. Si es así, necesitarás usar el subcomando rekey
. Este subcomando te permite cambiar la contraseña de tu archivo a voluntad.
Ejecute el siguiente comando para actualizar la contraseña del archivo secret.yml
.
El subcomando rekey toma la ruta de un archivo encriptado como su único argumento.
Proporcione la contraseña actual para el archivo seguida de la nueva contraseña, como se muestra a continuación.
En este punto, la antigua contraseña ya no funcionará para desencriptar el archivo.

Ahora, ejecute el siguiente comando para intentar desencriptar el secret.yml
.
Proporcione la antigua contraseña cuando se le solicite, y verá un mensaje de error que dice que la Desencriptación fallida, como se muestra a continuación. Esta salida confirma que la contraseña para el archivo se ha actualizado correctamente.

Uso de Datos Seguros en Playbooks y Módulos
Has visto que ejecutar comandos para cifrar y descifrar archivos funciona. Pero si planea automatizar el proceso de manera segura para su aplicación, necesitará usar playbooks y módulos.
1. Abra el archivo de configuración de Ansible (~/.ansible.cfg) en su editor, que contiene las configuraciones para Ansible.
Copie y pegue el siguiente código al final del archivo ~/.ansible.cfg, guarde los cambios y cierre el editor. Este código le indica a Ansible que busque el archivo de inventario (~/.ansible-hosts).
2. A continuación, abra el archivo ~/.ansible-hosts, que contiene el inventario de hosts que su nodo de gestión de Ansible puede manejar.
Complete el archivo ~/.ansible-hosts con la siguiente línea de código, guarde los cambios y cierre el archivo. Este código le indica a Ansible que puede gestionar el localhost a través del tipo de conexión local.
3. Ejecute el siguiente comando para crear un nuevo archivo cifrado. Puede nombrar el archivo como desee, pero en este tutorial el archivo se llama helloworld.yml.

Complete el código a continuación en el archivo helloworld.yml, guarde los cambios y cierre el editor.
Este código es un playbook básico de Ansible que imprime el mensaje de hola mundo en todos los hosts de su inventario. El símbolo — en la parte superior del bloque de código denota el inicio de un documento YAML.
4. Por último, ejecute el comando ansible-playbook a continuación seguido de las opciones –ask-vault-pass para ejecutar el playbook helloworld.yml en todos los hosts de su inventario.
Proporcione la contraseña para el archivo helloworld.yml cuando se le solicite. Como puede ver a continuación, la ejecución de su playbook ha sido exitosa.
- ok=2 – indica que ambas de sus tareas se ejecutaron correctamente.
- cambiado=1 – indica que su tarea ha realizado un cambio en el estado de su sistema. En este caso, escribió un mensaje de hola mundo en la terminal.
- inaccesible y fallado ambos son 0 – indica que no hubo hosts inaccesibles o fallidos durante la ejecución.

Usando Ansible Vault con un Archivo de Contraseña
Si bien ingresar manualmente una contraseña al ejecutar tareas ocasionales funciona, no es práctico para uso en el mundo real.
A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.
1. Ejecute el siguiente comando para almacenar la contraseña de Ansible Vault en un archivo llamado .vault_pass. Reemplace “mi_contraseña_vault” con su contraseña de vault real.
2. A continuación, ejecute cada comando a continuación para cambiar la propiedad (chown) del archivo a root y cambiar los permisos del archivo .vault_pass. Estos comandos aseguran que solo usted (el usuario root) pueda leer y escribir en el archivo.
3. Por último, ejecute el comando ansible-playbook a continuación, seguido de la opción –vault-password-file para ejecutar un libro de jugadas (helloworld.yml) usando un archivo de contraseña (.vault_pass).
Observe que Ansible ejecutó el libro de jugadas sin solicitar la contraseña del archivo cifrado.

Conclusión
En este tutorial, ha aprendido cómo usar Ansible Vault para cifrar y descifrar datos sensibles para libros de jugadas y tareas de Ansible. Ha almacenado la contraseña de Ansible Vault en un lugar seguro usando un archivo de contraseña. Este comportamiento es útil para una menor intervención del usuario al ejecutar un libro de jugadas.
Con este nuevo conocimiento, ahora puedes cifrar datos sensibles y compartir tus manuales con otros sin preocuparte por la seguridad de tus datos.
Si utilizas LastPass para la gestión de contraseñas, ¿por qué no guardar tu contraseña de Ansible Vault en LastPass y hacer que Ansible la recupere automáticamente cuando sea necesario?