ansible
Crittografia segreta
Ricerca…
Osservazioni
Ansible offre Vault (da non confondere con HashiCorp Vault !) Per gestire la crittografia dei dati sensibili. Vault si prefigge principalmente di crittografare tutti i dati strutturati come variabili, attività, gestori.
Crittografia di dati strutturati sensibili
Innanzitutto, crea un file chiave, ad esempio vault_pass_file
, che idealmente contiene una lunga sequenza di caratteri casuali. Nei sistemi Linux è possibile utilizzare pwgen
per creare un file password casuale:
pwgen 256 1 > vault_pass_file
Quindi, utilizza questo file per crittografare i dati sensibili, ad es. groups_vars/group.yml
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-vault encrypt group_vars/group.yml
D'ora in poi, per eseguire un playbook hai bisogno di vault_pass_file
:
ANSIBLE_VAULT_PASSWORD_FILE=vault_pass_file ansible-playbook -i inventories/nodes my-playbook.yml
Nota, potresti anche usare il flag --vault-password-file vault_pass_file
invece di impostare la variabile d'ambiente ANSIBLE_VAULT_PASSWORD_FILE
.
Per modificare o decifrare il segreto su disco è possibile utilizzare rispettivamente la ansible-vault edit
ansible-vault decrypt
.
Utilizzo di pipe di ricerca per decifrare i dati crittografati con vault non strutturati
Con Vault puoi anche crittografare i dati non strutturati, come i file delle chiavi private, ed essere ancora in grado di decifrarli nel tuo gioco con il modulo di 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')
Utilizzo di local_action per decrittografare i modelli crittografati con Vault
Puoi eseguire un'opera che si basa su modelli crittografati con local_action
utilizzando il modulo 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
Si prega di notare il changed_when: False
. Questo è importante nel caso si eseguano test di idempotenza con i propri ruoli ansibili, altrimenti ogni volta che si esegue il playbook viene segnalato un cambiamento. In group_vars/all.yml
è possibile impostare un comando di decrittografia globale per il riutilizzo, ad es. Come view_encrypted_file_cmd
.
group_vars / all.yml
---
view_encrypted_file_cmd: "ansible-vault --vault-password-file {{ lookup('env', 'ANSIBLE_VAULT_PASSWORD_FILE') }} view"
Ora, durante l'esecuzione di una riproduzione è necessario impostare la variabile d'ambiente ANSIBLE_VAULT_PASSWORD_FILE
in modo che punti al proprio file di password del vault (idealmente con un percorso assoluto).