Come utilizzare Ansible Vault per archiviare le chiavi segrete

Contenuti

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.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.