Quali sono le migliori pratiche per strutturare le variabili di crittografia da Ansible 2.3.0?


8

Questo documento indica che da Ansible 2.3 dovrebbe essere possibile crittografare alcuni var usando un !vault |prefisso invece di inserire una variabile e le chiavi in ​​un file del vault e crittografarlo completamente.

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue

Al momento la struttura è la seguente:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault

Quando una variabile crittografata viene spostata dal Vault nella directory VAR e ansible-vault decrypt ansible/group_vars/testing/varsviene eseguita, restituisce:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars

Questa variabile del vault può essere decifrata con il segreto del vault fornito e utilizzata come una normale variabile. La riga di comando ansible-vault supporta stdin e stdout per crittografare i dati al volo, che possono essere utilizzati dal tuo editor preferito per creare queste variabili nel vault; devi solo essere sicuro di aggiungere il tag! vault in modo che sia Ansible che YAML siano consapevoli della necessità di decifrare. Il | è inoltre necessario, poiché la crittografia del Vault genera una stringa multilinea.

Domande

  1. Le variabili che devono essere crittografate, devono essere crittografate una ad una utilizzando la riga di comando?
  2. Quali sono le migliori pratiche per ristrutturare la vecchia struttura Ansible? Ad esempio rimuovere i file del vault e inserire tutte le variabili crittografate nel file delle variabili?

Risposte:


2

Avendo lavorato con Ansible Vault un po 'di recente (in particolare riguardo a ciò che crittografa e come crittografare quelle cose senza rendere illeggibile il codice) ho trovato uno scarso incentivo a cambiare le mie abitudini in 2.3.

Se avrò una serie di variabili o file crittografati, tienili separati (li prefisso tutti con vault_) e lascialo a quello.

Alcune volte ho usato la funzione! Vault, ma sono rimasto decisamente sbalordito in quanto sembra più semplice essere molto esplicito su ciò che è e non proviene da un file di segreti. In questo modo nessuno modificando le mie opere fa ipotesi su cosa siano e cosa non siano dati sensibili.


1

Ho deciso di rimuovere la ansible/group_vars/testingdirectory e sostituirla con un file, cioè ansible/group_vars/testingche contiene le variabili crittografate:

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136

Invece di eseguirne ansible-vault edit ansible/group_vars/testing/vaultuno, è possibile reindirizzare i valori che devono essere crittografati su ansible-vault, ovvero printf mysecret | ansible-vault encrypt. Quest'ultimo crittograferà mysecrete l'output potrebbe essere aggiunto al ansible/group_vars/testingfile. Quando ansible-playbookverranno eseguite le variabili crittografate verranno decrittografate se il file Vault Ansible è ovviamente specificato.

Se è necessario eseguire il debug del valore crittografato, è possibile utilizzare il codice seguente:

- debug: msg="Decrypted value: {{ encrypted_var }}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.