Con la maggior parte dell’automazione, sono necessarie credenziali per autenticare e utilizzare risorse sicure. Ciò che è sempre stata una sfida è il modo migliore per archiviare tali credenziali in modo sicuro. Ansible è un sistema di automazione che fornisce il provisioning del software, la gestione della configurazione e l’implementazione delle applicazioni.
Come con qualsiasi sistema di automazione, Ansible ha bisogno di un modo sicuro per archiviare i segreti. Nel caso di Ansible, quel sistema si chiama Ansible Vault. Ansible Vault fornisce una soluzione multipiattaforma per l’archiviazione sicura delle credenziali.
Introduzione ad Ansible Vault Ansible Vault può essere utilizzato per crittografare qualsiasi file, o le variabili stesse, dall’interno di un playbook. Per impostazione predefinita viene utilizzato AES, che è una crittografia basata su segreti condivisi. Entrambi i metodi di crittografia dei file e delle variabili hanno i loro vantaggi e svantaggi.
Crittografia file Per creare un nuovo file crittografato denominato secrets.yml, usa semplicemente il seguente ansible- comando vault.
ansible -vault create secrets.yml Dopo aver richiesto una password, il Il comando ansible-vault avvierà l’editor di file di sistema predefinito, che risulterà in un file crittografato al momento del salvataggio.
Allo stesso modo, per crittografare un file precedentemente non crittografato, utilizzare il seguente comando ansible-vault. Si noti che questo utilizza il parametro encrypt anziché create parametro.
ansible-vault encrypt secrets.yml Lo svantaggio dell’utilizzo della crittografia dei file è la leggibilità. Se apri il file, scoprirai che senza decrittazione, è impossibile decifrare il contenuto.
Crittografia variabile All’interno di un playbook, è possibile utilizzare una variabile crittografata anteponendo ai dati crittografati !vault etichetta. Esecuzione dell’argomento encrypt_string di ansible_vault si tradurrà in una stringa crittografata che puoi utilizzare all’interno dei tuoi playbook.
ansible-vault encrypt_string ‘secret_data’ –name ‘my_secret’ Dopo aver richiesto una password, otterrai la seguente stringa crittografata.
my_secret: !vault | $ANSIBLE_VAULT;1.1;AES1198 62373737623337616130386137373461306535383538373162316263386165376131623631323434 653638643639333133306331336365a6565353063303065303831323539656138653863353230620 62373737623337616130386137373461306535383538373162316263386165376131623631323434 6565353063303065303831323539656138653863353230620a653638643639333133306331336365 6565353063303065303831323539656138653863353230620 La crittografia delle variabili è ottima per la leggibilità, ma la possibilità di utilizzare il rekeying della riga di comando viene sacrificata quando si utilizza questo metodo.
Uso di Ansible Vault in pratica Potresti capire che l’utilizzo di Ansible Vault in produzione è una sfida. Per utilizzare in modo efficace Ansible Vault, le seguenti tecniche semplificano questo processo.
Decrittografia non richiesta Più Vault Reimpostazione Decrittografia non richiesta Un’opzione per decifrare in modo trasparente un file o variabile durante l’utilizzo di Ansible consiste nell’archiviare la password all’interno di un file di password protetto e senza versione. Per fare riferimento a questa password memorizzata, passa semplicemente la posizione del file utilizzando il parametro vault-password-file.
ansible-playbook –vault-password-file /path/vault-password-file secrets.yml Questo decrittograferà tutti i file o le variabili crittografati inclusi utilizzando la password inclusa.
È molto importante non inserire il file di password in chiaro nel sistema di controllo della versione. Allo stesso modo, proteggi questo file solo per l’utente o il gruppo che ha bisogno di accedere alla password memorizzata nel file system utilizzando gli elenchi di controllo dell’accesso (ACL).
Vault multipli Sebbene sia conveniente avere un unico deposito con tutti i segreti crittografati, una pratica di sicurezza migliore consiste nel separare le credenziali di sicurezza in depositi pertinenti separati. Un esempio di ciò potrebbe essere la separazione di un ambiente di produzione e sviluppo. Per fortuna, Ansible Vault ci consente di creare più depositi e riferimenti da cui provengono i dati crittografati utilizzando un’etichetta.
ansible-vault create –vault-id prod@prompt prod-secrets.yml Il codice sopra creerà un prod vault e richiederà la tua password in fase di esecuzione (come notato da la stringa @prompt). Se hai già un file di password che desideri utilizzare, passa semplicemente il percorso al file.
ansible-vault create –vault-id prod@/path/prod-vault-password-file prod-secrets.yml Diciamo di voler crittografare la stessa my_secret variabile, ma questa volta conservalo nel nostro caveau prod. Proprio come prima, usando encrypt_string ma con il relativo vault-id consente la memorizzazione del segreto nella posizione specificata.
ansible-vault encrypt_string –vault-id prod@/path/prod-vault-password-file ‘secret_data’ –name ‘my_secret’ Noterai che dopo AES3161 stringa, una nuova parte di testo, prod viene mostrato. Indica il deposito in cui si trova il testo crittografato.
my_secret: !vault | $ANSIBLE_VAULT;1.1;AES584;prod6565353063303065303831323539656138653863353230620a3866363862363335620 62373737623337616130386137373461306535383538373162316263386165376131623631323434 6565353063303065303831323539656138653863353230620a376466656164383032633338306162326639643635663936623939666238 376466656164383032633338306162326639643635663936623939666238 E se volessi includere più vault in un unico playbook? Puoi facilmente passare più vault-id dichiarazioni su un ansible -playbook riga di comando.
ansible-playbook –vault-id dev@/path/dev-vault-password-file –vault-id prod@/path/prod-vault-password-file site.yml Rekeying Infine, è importante ciclicamente le password. Per i file crittografati, puoi utilizzare la riga di comando di seguito. Il passaggio del parametro new-vault-id semplifica la modifica della password con cui sono crittografati i segreti.
ansible-vault rekey –vault-id prod@/path/prod-vault-password -file-old –new-vault-id prod@/path/prod-vault-password-file-new site.yml Come notato sopra, il rekeying della riga di comando non funziona per le variabili crittografate. In questo caso, dovrai ricodificare individualmente le stringhe e sostituirle in un determinato playbook.
Best practice La sicurezza è difficile, soprattutto quando si tratta di utilizzare i segreti all’interno dei sistemi di automazione. Con questo in mente, di seguito sono riportate diverse best practice da utilizzare quando si utilizza Ansible Vault. Sebbene ne abbiamo già parlato in precedenza, è prudente ribadire tali pratiche.
File di password ACL protetti e senza versione I file di password non devono essere archiviati all’interno di sistemi di controllo della versione, come GIT. Inoltre, assicurati che solo gli utenti appropriati possano accedere al file della password. Vault separatiNormalmente, ci sono molti ambienti diversi uso. Pertanto, è meglio separare le credenziali richieste nei depositi appropriati. File regolare e reimpostazione della password variabileNel caso di riutilizzo o perdite di password, è meglio ridigitare regolarmente le password in uso per limitare l’esposizione. Conclusione Come con qualsiasi sistema di automazione, è di fondamentale importanza che i segreti siano adeguatamente protetti e controllati. Con Ansible Vault, questo processo è reso facile e flessibile. Utilizzando le best practice descritte sopra, l’archiviazione e l’utilizzo dei segreti all’interno di Ansible è sicuro e protetto.
Per estendere ulteriormente Ansible Vault e portare questo processo al livello successivo, puoi utilizzare script che si integrano in soluzioni di gestione delle password. Come puoi vedere, Ansible Vault è un modo eccellente per utilizzare i segreti all’interno dei playbook di Ansible.