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.
ansible-vault encrypt <file>ansible-vault view <file>ansible-vault edit <file>ansible-vault decrypt <file>-- Evite utilizar el comandodecrypt. Si su intención es ver o editar el archivo encriptado, utilice los comandosviewoedit. Cada vez que desencripta un archivo, corre el riesgo de olvidar re-encriptarlo antes de guardar los cambios en el repo.ansible-vault rekey <file>
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 archivosvault.yml.Para ver o editar un archivo encriptado
vault.yml, utiliceansible-vault view <archivo>oransible-vault edit <archivo>. Evita utilizar el comandodecrypt.Variables with sensitive data such as passwords are defined in files named
vault.yml.Each environment has its own
vault.ymlfile:group_vars/<environment>/vault.yml.There is also one
vault.ymlfile applicable to all environments:group_vars/all/vault.yml.Variables named with the
vault_prefix are defined in thevault.ymlfiles.To view or edit an encrypted
vault.ymlfile, use eitheransible-vault view <file>oransible-vault edit <file>. Avoid using thedecryptcommand. 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.