Vault

Algunas variables de Ansible contienen información sensible como contraseñas. Trellis separa estas variables en archivos vault.yml. Para evitar exponer información sensible en el repositorio del proyecto, recomendamos encriptar estos archivos vault.yml utilizando Ansible Vault. Los comandos de Trellis continuarán siendo los mismos, sin la necesidad de nuevos flags.

Para demostrar rápidamente qué hace vault, tenga en cuenta este archivo vault.yml.

# archivo vault.yml de ejemplo -- texto plano desencriptado
my_password: example_password

Debes reemplazar el example_password y luego encriptar el archivo con Ansible Vault antes de hacer el commit en tu repo. La información estará asegurada en tu repo, porque al estar encriptada, se verá de la siguiente manera:

# archivo vault.yml de ejemplo -- encriptado
$ANSIBLE_VAULT;1.1;AES256
343163646662643438323831343332626234333233386666333162383265663
3132306538383762336332376165383530633838643937320a6363343238643
363065366664316364646561613163653866623566303235666537343437643
6638363265383831390a6631663239373833636133623333666363643166383
6237663637353638653266616562616535623465636265316231613331 etc.

Pasos para activar Ansible Vault

1. Definir un vault password

Genera una contraseña larga aleatoria y guárdala como string de una sola línea en un nuevo archivo llamado .vault_pass. Este archivo debe estar en la raíz del proyecto (en la misma jerarquía que ansible.cfg). Probablemente querrás ejecutar chmod 600 .vault_pass para evitar el acceso a este archivo. Este archivo .vault_pass se mantendrá en texto plano y no debe hacerse commit en el repositorio. Asegurese que está incluído en el archivo .gitignore.

Si prefieres no crear un archivo con tu vault password, puedes agregar la flag --ask-vault-pass al comando ansible-playbook, que requerirá que ingreses la contraseña a través de la línea de comandos.

2. Informa a Ansible del vault password

La forma más sencilla de informar a Ansible acerca del vault password es listando el archivo .vault_pass como una de las configuraciones predeterminadas en ansible.cfg:

  # ansible.cfg
  [defaults]
  roles_path = vendor/roles
  force_handlers = True
  inventory = hosts
+ vault_password_file = .vault_pass

Si prefieres no definir esta configuración en el archivo ansible.cfg, puedes agregar la flag --vault-password-file .vault_pass a tu comando ansible-playbook. De forma alternativa, puedes agregar la bandera --ask-vault-pass, que hará que el comando ansible-playbook te pida que ingreses la contraseña a través de la línea de comandos.

3. Encriptar archivos

Atención: Si has desencriptado el archivo vault.yml en la historia de tu proyecto de git, te sugerimos que cambies los valores en estos archivos, antes de encriptar y hacer un commit en el repo.

Encripta los archivos vault.yml con el comando ansible-vault encrypt <file>. El ejemplo de abajo utiliza este comando para encriptar la lista completa de archivos vault.yml (fileglobs no son compatibles, vea https://github.com/ansible/ansible/issues/6241):

ansible-vault encrypt group_vars/all/vault.yml group_vars/development/vault.yml group_vars/staging/vault.yml group_vars/production/vault.yml

Otros comandos vault

Aquí puedes encontrar otros comandos importantes de la documentación oficial de Ansible Vault.

Trabajando con variables vault

Aquí hay algunas sugerencias conceptuales para trabajar con las variables y vault en Trellis.

  • Variables con información sensible como contraseñas se definen en archivos llamados vault.yml.

  • Cada entorno tiene su propio archivo vault.yml: group_vars/<entorno>/vault.yml.

  • También hay un archivo vault.yml, que se aplica a todos los entornos: group_vars/all/vault.yml.

  • Variables llamadas con el prefijo vault_ se definen en los archivos vault.yml.

  • Para ver o editar un archivo encriptado vault.yml, utilice ansible-vault view <archivo> or ansible-vault edit <archivo>. Evita utilizar el comando decrypt.

  • Variables with sensitive data such as passwords are defined in files named vault.yml.

  • Each environment has its own vault.yml file: group_vars/<environment>/vault.yml.

  • There is also one vault.yml file applicable to all environments: group_vars/all/vault.yml.

  • Variables named with the vault_ prefix are defined in the vault.yml files.

  • To view or edit an encrypted vault.yml file, use either ansible-vault view <file> or ansible-vault edit <file>. Avoid using the decrypt command. Cada vez que desencripta un archivo, corre el riesgo de olvidar re-encriptarlo antes de guardar los cambios en el repo. Puedes utilizar un pre-commit hook (ejemplo) para mayor prevención

Compartiendo un proyecto con archivos vault encriptados

Tu repositorio con archivos vault encriptados está asegurado de cualquier que quiera ver o utilizar información sensible. Para compartir información con un colega, necesitarás darle a conocer la contraseña vault en forma separada para que utilice. Aún con estas medidas, siempre se sugiere utilizar repositorios privados para los proyectos.

Deshabilitando Ansible Vault

No se recomienda deshabilitar Ansible Vault, pero aún así, puede hacerlo ejecutando ansible-vault decrypt <file1> <file2> <etc>. Si hace un commit de estos archivos desencriptados, la información sensible de tu repo estará alojada en texto plano y será difícil de borrar de la historia de git. Si decides volver a habilitar vault en el futuro, sugerimos cambiar esa información sensible, encriptar mediante vault, y luego hacer un commit de los archivos vault.yml encriptados.

Recursos adicionales

ansible-toolkit provee un comando atk-git-diff que permite hacer git diff en los archivos encriptados.