ansible
Cifrado secreto
Buscar..
Observaciones
Ansible ofrece Vault (¡no debe confundirse con HashiCorp Vault !) Para manejar el cifrado de datos confidenciales. Vault se dirige principalmente a cifrar cualquier dato estructurado, como variables, tareas, manejadores.
Encriptación de datos estructurados sensibles.
Primero, cree un archivo clave, por ejemplo, vault_pass_file
, que idealmente contiene una larga secuencia de caracteres aleatorios. En los sistemas linux, puede usar pwgen
para crear un archivo de contraseña aleatorio:
pwgen 256 1 > vault_pass_file
Luego, use este archivo para cifrar datos confidenciales, por ejemplo, groups_vars/group.yml
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-vault encrypt group_vars/group.yml
A partir de ahora, para ejecutar un libro de jugadas, necesita el vault_pass_file
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-playbook -i inventories/nodes my-playbook.yml
Tenga en cuenta que también puede usar el indicador --vault-password-file vault_pass_file
lugar de configurar la variable de entorno ANSIBLE_VAULT_PASSWORD_FILE
.
Para editar o descifrar el secreto en el disco, puede utilizar la ansible-vault edit
ansible-vault decrypt
respectivamente.
Uso de tuberías de búsqueda para descifrar datos encriptados no almacenados en bóveda
Con Vault también puede cifrar datos no estructurados, como archivos de clave privada y aún así poder descifrarlos en su juego con el módulo de lookup
.
---
- name: Copy private key to destination
copy:
dest=/home/user/.ssh/id_rsa
mode=0600
content=lookup('pipe', 'ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-vault view keys/private_key.enc')
Usando local_action para descifrar plantillas encriptadas en bóveda
Puede ejecutar una local_action
que se basa en plantillas encriptadas en bóveda utilizando el módulo local_action
.
---
- name: Decrypt template
local_action: "shell {{ view_encrypted_file_cmd }} {{ role_path }}/templates/template.enc > {{ role_path }}/templates/template"
changed_when: False
- name: Deploy template
template:
src=templates/template
dest=/home/user/file
- name: Remove decrypted template
local_action: "file path={{ role_path }}/templates/template state=absent"
changed_when: False
Tenga en cuenta el changed_when: False
. Esto es importante en caso de que ejecute pruebas de idempotencia con sus roles de disponibilidad, de lo contrario, cada vez que ejecute el libro de jugadas se notificará un cambio. En group_vars/all.yml
puede establecer un comando de descifrado global para reutilizarlo, por ejemplo, como view_encrypted_file_cmd
.
group_vars / all.yml
---
view_encrypted_file_cmd: "ansible-vault --vault-password-file {{ lookup('env', 'ANSIBLE_VAULT_PASSWORD_FILE') }} view"
Ahora, al ejecutar una reproducción, debe configurar la variable de entorno ANSIBLE_VAULT_PASSWORD_FILE
para que apunte a su archivo de contraseña de bóveda (idealmente con una ruta absoluta).