Con la maggior parte dell'automazione, le credenziali sono necessarie per autenticarsi 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, gestione della configurazione e distribuzione delle applicazioni.
Come con qualsiasi sistema di automazione, Ansible ha bisogno di un modo sicuro per conservare i segreti. Nel caso di Ansible, quel sistema si chiama Ansible Vault. Ansible Vault fornisce una soluzione multipiattaforma per archiviare le credenziali in modo sicuro.
Presentamos Ansible Vault
Ansible Vault può essere utilizzato per crittografare qualsiasi file, o variabili stesse, dall'interno di un playbook. Per impostazione predefinita, Viene utilizzato AES, cos'è la crittografia basata su segreti condivisi?. Entrambi i metodi di crittografia dei file e delle variabili hanno i loro vantaggi e svantaggi.
Crittografia dei file
Per creare un nuovo file crittografato chiamato secrets.yml
, basta usare quanto segue ansible-vault
comando.
ansible-vault create secrets.yml
Dopo aver richiesto una password, il ansible-vault
Il comando avvierà l'editor di file di sistema predefinito, che risulterà in un file crittografato durante il salvataggio.
Equivalentemente, per crittografare un file precedentemente non crittografato, utilizza il seguente ansible-vault
comando. Nota che questo usa il encrypt
parametro invece di create
parametro.
ansible-vault encrypt secrets.yml
Lo svantaggio dell'utilizzo della crittografia dei file è la leggibilità. Se apri il file, lo troverai senza la decrittazione, è impossibile decifrare il contenuto.
Crittografia variabile
Dentro un playbook, è possibile utilizzare una variabile crittografata anteponendo i dati crittografati con il !vault
etichetta. correndo il encrypt_string
argomento del ansible_vault
Il comando risulterà in una stringa crittografata che puoi utilizzare all'interno dei tuoi playbook.
ansible-vault encrypt_string 'secret_data' --name 'my_secret'
Dopo averti chiesto una password, otterrà la prossima stringa crittografata.
my_secret: !vault |
$ANSIBLE_VAULT;1.1;AES256
37636561366636643464376336303466613062633537323632306566653533383833366462366662
6565353063303065303831323539656138653863353230620a653638643639333133306331336365
62373737623337616130386137373461306535383538373162316263386165376131623631323434
3866363862363335620a376466656164383032633338306162326639643635663936623939666238
3161
La crittografia variabile è ottima per la leggibilità, ma la possibilità di utilizzare la modifica del tasto della riga di comando viene sacrificata quando si utilizza questo metodo.
Utilizzo di Ansible Vault nella pratica
Potresti scoprire che l'utilizzo di Ansible Vault in produzione è impegnativo. Per utilizzare Ansible Vault in modo efficace, le seguenti tecniche facilitano questa procedura.
- Decrittazione spontanea
- Varie volte
- Rekeying
Decrittazione spontanea
Un'opzione per decrittografare in modo trasparente un file o una variabile durante l'utilizzo di Ansible consiste nell'archiviare la password all'interno di un file senza versione e protetto da password. Per fare riferimento a questa password memorizzata, passa semplicemente la posizione del file usando il vault-password-file
parametro.
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 inviare il file della password in testo normale al sistema di controllo della versione. Equivalentemente, proteggi questo file solo per l'utente o il gruppo che deve inserire la password memorizzata nel file system tramite elenchi di controllo di accesso (ACL).
Varie volte
Anche se è conveniente avere un unico deposito con tutti i segreti crittografati, una best practice di sicurezza consiste nel separare le credenziali sicure in depositi pertinenti indipendenti. Un esempio di ciò potrebbe essere la separazione di un ambiente di produzione e sviluppo. fortunatamente, Ansible Vault ci consente di creare più depositi e riferimenti da cui provengono i dati crittografati tramite un tag.
ansible-vault create --vault-id prod@prompt prod-secrets.yml
Il codice sopra creerà a prod
vault e richiedi la tua password in fase di esecuzione (come indicato nel @prompt
corda). Se hai già un file di password che vorresti usare, basta passare il percorso al file.
ansible-vault create --vault-id prod@/path/prod-vault-password-file prod-secrets.yml
Diciamo che vogliamo crittografare lo stesso my_secret
variabile, ma questa volta conservalo nel nostro prod
volta. Proprio come prima, usando encrypt_string
ma con il relativo vault-id
consente di memorizzare il segreto nella posizione specificata.
ansible-vault encrypt_string --vault-id prod@/path/prod-vault-password-file 'secret_data' --name 'my_secret'
Noterai che dopo il AES256
catena, un nuovo pezzo di testo, prod
mostra. Questo indica il caveau in cui si trova il testo cifrato.
my_secret: !vault |
$ANSIBLE_VAULT;1.1;AES256;prod
37636561366636643464376336303466613062633537323632306566653533383833366462366662
6565353063303065303831323539656138653863353230620a653638643639333133306331336365
62373737623337616130386137373461306535383538373162316263386165376131623631323434
3866363862363335620a376466656164383032633338306162326639643635663936623939666238
3161
Cosa succede se si desidera includere più depositi in un unico playbook?? Può facilmente passare in più vault-id
dichiarazioni in a 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
Finalmente, il ciclo regolare delle password è essenziale. Per i file crittografati, puoi usare la riga di comando qui sotto. Passando in new-vault-id
Il parametro semplifica la modifica della password con cui vengono 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 in precedenza, la modifica della chiave della riga di comando non funziona per le variabili crittografate. In questa circostanza, dovrai ricodificare individualmente le stringhe e sostituirle in un determinato playbook.
Migliori pratiche
La sicurezza è difficile, soprattutto quando si tratta di utilizzare i segreti all'interno dei sistemi di automazione. Tenendo conto di questo, Di seguito sono riportate alcune delle migliori pratiche da utilizzare quando si utilizza Ansible Vault. Anche se abbiamo trattato alcuni di questi in precedenza, è prudente ribadire queste pratiche.
- File protetti da password e nessuna versione ACLI file delle password non devono essere archiviati nei sistemi di controllo della versione, nel ruolo di GIT. Allo stesso tempo, assicurati che solo gli utenti giusti possano inserire il file della password.
- Volte separateRegolarmente, vengono utilizzati molti ambienti diversi. Perché, è meglio separare le credenziali richieste negli appositi caveau.
- Cambio chiave regolare di file e password variabiliIn caso di riutilizzo o perdita della password, è meglio reinserire le password in uso regolarmente per limitare l'esposizione.
conclusione
Come con qualsiasi sistema di automazione, è di vitale importanza che i segreti siano adeguatamente protetti e controllati. Con Ansible Vault, questa procedura è resa facile e flessibile. Utilizzando le migliori pratiche descritte in precedenza, archiviare e utilizzare i segreti all'interno di Ansible è sicuro.
Per estendere ulteriormente Ansible Vault e portare questa procedura al livello successivo, puoi utilizzare script integrati nelle soluzioni di gestione delle password. Come potete vedere, Ansible Vault è un ottimo modo per utilizzare i segreti all'interno dei playbook di Ansible.