Proteggi i tuoi segreti con Ansible Vault

Sicurezza dei Segreti con Ansible Vault

La protezione dei tuoi segreti dall’accesso non autorizzato è una priorità assoluta. Ma come esattamente si assicurano i tuoi segreti? Salvare su un file di testo locale? Senza crittografia, questa opzione è troppo rischiosa. Perché non utilizzare Ansible Vault per crittografare le tue variabili e i file?

In questo tutorial, imparerai come proteggere contenuti sensibili, come le tue password o chiavi, con Ansible Vault.

Continua a leggere e tieni lontani gli occhi indiscreti dai tuoi segreti!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se desideri seguirci, assicurati di avere quanto segue.

  • A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
  • Ansible installato sulla tua macchina.

Configurazione dell’Editor Predefinito di Ansible Vault

Come amministratore di sistema, potresti lavorare su vari playbook di Ansible contenenti nomi utente e password di diversi server. Non puoi inserire questi file nel sistema di controllo delle versioni in formato testo normale perché non è sicuro. Ed è per questo motivo che Ansible Vault è utile.

Ansible Vault è progettato per essere integrato nel tuo flusso di lavoro esistente per archiviare i tuoi dati in un file crittografato. Ma prima di creare il tuo primo Ansible Vault, dovrai impostare il tuo editor predefinito di Ansible Vault.

1. Apri il terminale e connettiti via SSH alla tua macchina.

2. Successivamente, apri il file ~/.bashrc utilizzando un editor di testo. Il file ~/.bashrc è uno script della shell che viene eseguito ogni volta che inizia una nuova sessione terminale. Questo script inizializza una sessione della shell interattiva e definisce le variabili d’ambiente.

3. Aggiungi la seguente riga alla fine del file ~/.bashrc, salva le modifiche ed esci dall’editor.

Questa riga imposta la variabile EDITOR per l’utente attualmente connesso. La variabile EDITOR assicura che il tuo editor di testo preferito venga utilizzato ogni volta che apri una nuova sessione terminale.

Puoi impostare qualsiasi altro editor di testo che preferisci, ma questo tutorial utilizza l’editor di testo nano.

export EDITOR=nano
Setting the Default Text Editor

4. Infine, esegui i seguenti comandi per applicare le modifiche (source) senza disconnetterti e ristampare (echo) l’editor di testo predefinito attuale del tuo sistema.

# Carica la variabile d'ambiente nella tua sessione corrente della shell.
source ~/.bashrc
# Stampa l'editor di testo predefinito attuale del tuo sistema.
echo $EDITOR

Verifica che la variabile EDITOR sia impostata sul tuo editor preferito, come mostrato di seguito.

Applying and Verifying Changes

Creazione e Crittografia del Tuo Primo Ansible Vault

Hai impostato il tuo editor predefinito per la cassaforte, quindi è ora di creare la tua prima cassaforte. Creerai e cripterai un file che contiene informazioni sensibili, come nomi utente, password, chiavi di accesso segrete, ecc.

Userai il comando ansible-vault, l’interfaccia principale per interagire con le Cassaforti Ansible.

1. Esegui il seguente comando per creare il file secret.yml . Ansible utilizza YAML, un formato di dati più leggibile rispetto ad altri formati come JSON.

ansible-vault create secret.yml

Ti verrà chiesto di inserire e confermare una password per il file. Utilizzerai questa password per criptare e decriptare il file secret.yml in seguito, quindi assicurati di scegliere una password robusta che puoi ricordare.

Creating the secret.yml File with a Password

2. Dopo aver impostato la password della cassaforte, il tuo editor di testo predefinito apre un file vuoto. Inserisci le informazioni sensibili che desideri memorizzare nel file, salvalo e chiudi l’editor.

In questo tutorial, vengono memorizzate le variabili aws_access_key e aws_secret_key nel file secret.yml. A questo punto, Ansible cripta il file secret.yml, e nessun’altra persona può leggere il contenuto della cassaforte a meno che non conosca la password della cassaforte.

Providing Sensitive Information (secrets)

3. Esegui il comando cat per cercare di visualizzare il contenuto del file secret.yml senza la password.

cat secret.yml

È possibile verificare che il contenuto del file sia criptato se si vedono numeri casuali, come mostrato di seguito. L’intestazione $ANSIBLE_VAULT;1.1;AES256 nella parte superiore del file indica che il file è criptato con Ansible Vault utilizzando la cifratura AES256.

Lo Standard di Crittografia Avanzata (AES) è un algoritmo a chiave simmetrica che utilizza la stessa chiave per crittografare e decrittografare i dati.

Viewing the secret.yml file Without the Vault’s Password

Crittografare File Esistenti

Hai creato un file da zero che viene automaticamente criptato. Ma come si crittografano i file esistenti? Ansible offre anche il sottocomando encrypt per criptare un file specificato. Per vedere come crittografare un file esistente, cripterai un file specifico che contiene variabili Ansible.

Esegui il seguente comando per crittografare un file (vars.yml).

ansible-vault encrypt vars.yml

Come quando hai creato il file secret.yml la prima volta, ti verrà chiesto di fornire una password per il file vars.yml.

L’editor predefinito non si aprirà questa volta perché il file vars.yml esiste già. Invece, riceverai il messaggio Encryption successful che indica che Ansible ha criptato il file, come mostrato di seguito.

Encrypting an Existing File (vars.yml)

Ora esegui il comando cat di seguito per verificare che Ansible abbia criptato il file vars.yml.

cat vars.yml
Verifying Encrypted Existing File

Decifrare Dati da Ansible Vault

Ecco come crittografare i file, rendendoli sicuri. Ma quando hai bisogno di visualizzare il contenuto dei tuoi file, come decrittare i file? Decrittare un file è utile quando vuoi modificare un file crittografato o leggerne il contenuto senza fornire la password ogni volta. E il sotto-comando decrypt di Ansible ti sarà utile.

1. Esegui il seguente comando per decrittare il file secret.yml.

Il sotto-comando decrypt richiede il percorso di un file crittografato come suo unico argomento.

ansible-vault decrypt secret.yml

Fornisci la password per il file e il contenuto del file verrà decrittografato e scritto su disco in testo normale.

Decrypting File Data

2. Successivamente, esegui il comando cat per visualizzare il contenuto decrittografato del file secret.yml.

cat secret.yml

Puoi vedere qui sotto il contenuto del file secret.yml stampato nel terminale senza alcuna crittografia. A questo punto, puoi aggiungere, modificare o eliminare qualsiasi riga nel file a tuo piacimento.

file to your heart’s content

3. Infine, esegui il seguente comando per crittografare il file secret.yml e fornire una password per mantenere sicuro il contenuto del file.

ansible-vault encrypt secret.yml
Encrypting a Decrypted File (secret.yml)

Aggiornamento della password di Ansible Vault

Hai visto che è necessario inserire una password ogni volta che crittografi e decrittografi i file. Ma forse, vuoi solo aggiornare la password del file senza decrittografarlo. In tal caso, dovrai utilizzare il sotto-comando rekey. Questo sotto-comando ti permette di cambiare la password del tuo file a tuo piacimento.

Esegui il seguente comando per aggiornare la password per il file secret.yml.

Il sotto-comando rekey prende il percorso di un file crittografato come suo unico argomento.

ansible-vault rekey secret.yml

Fornisci la password attuale per il file seguita dalla nuova password, come mostrato di seguito.

A questo punto, la vecchia password non funzionerà più per decodificare il file.

Updating Ansible Vault’s Password

Ora, esegui il comando qui sotto per cercare di decodificare il secret.yml.

ansible-vault decrypt secret.yml

Fornisci la vecchia password quando richiesto, e vedrai un messaggio di errore che dice che la Decrittazione fallita, come mostrato di seguito. Questo output conferma che la password per il file è stata aggiornata con successo.

Verifying New Password is in Effect

Utilizzo di Dati Protetti in Playbooks e Moduli

Hai visto che eseguire comandi per crittografare e decrittografare file funziona. Ma se prevedi di automatizzare il processo in modo sicuro per la tua applicazione, dovrai utilizzare playbooks e moduli.

1. Apri il file di configurazione di Ansible (~/.ansible.cfg) nel tuo editor, che contiene le impostazioni per Ansible.

Copia e incolla il seguente codice alla fine del file ~/.ansible.cfg, salva le modifiche e chiudi l’editor. Questo codice dice ad Ansible di cercare il file di inventario (~/.ansible-hosts).

[defaults]
hostfile = ~/.ansible-hosts

2. Successivamente, apri il file ~/.ansible-hosts, che contiene l’inventario degli host che il tuo nodo gestisce di Ansible può gestire.

Popola il file ~/.ansible-hosts con la seguente riga di codice, salva le modifiche e chiudi il file. Questo codice dice ad Ansible che può gestire il localhost tramite il tipo di connessione locale.

localhost ansible_connection=local

3. Esegui il comando seguente per creare un nuovo file cifrato. Puoi dare qualsiasi nome al file, ma in questo tutorial il file si chiama helloworld.yml.

ansible-vault create helloworld.yml
Creating Ansible Playbook (helloworld.yml)

Compila il codice qui sotto nel file helloworld.yml, salva le modifiche e chiudi l’editor.

Questo codice è un playbook di base di Ansible che stampa il messaggio di hello world su tutti gli host nel tuo inventario. Il simbolo — all’inizio del blocco di codice indica l’inizio di un documento YAML.

---

- hosts: all # Imposta per eseguire il compito su tutti gli host nell'inventario 
  tasks: # Imposta i compiti da eseguire
    - shell: echo 'hello world' # Stampa un messaggio 'hello world'

4. Infine, esegui il comando ansible-playbook qui sotto seguito dalle opzioni –ask-vault-pass per eseguire il playbook helloworld.yml su tutti gli host nel tuo inventario.

ansible-playbook --ask-vault-pass helloworld.yml

Fornisci la password per il file helloworld.yml quando richiesto. Come puoi vedere di seguito, l’esecuzione del tuo playbook è stata completata con successo.

  • ok=2 – indica che entrambi i compiti sono stati eseguiti con successo.
  • changed=1 – indica che il tuo compito ha apportato una modifica allo stato del sistema. In questo caso, ha scritto un messaggio di hello world sulla shell.
  • unreachable e failed sono entrambi 0 – indica che nessun host era irraggiungibile o ha fallito durante l’esecuzione.
Running your playbook

Utilizzo di Ansible Vault con un file di password

Anche se inserire manualmente una password durante l’esecuzione di compiti occasionali funziona, non è pratico per un utilizzo del mondo reale.

A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.

1. Esegui il comando sottostante per memorizzare la password di Ansible Vault in un file chiamato .vault_pass. Sostituisci my_vault_password con la tua effettiva password di Vault.

echo 'my_vault_password' > .vault_pass

2. Successivamente, esegui ciascun comando sottostante per cambiare la proprietà (chown) del file a root e cambiare i permessi del file .vault_pass. Questi comandi garantiscono che solo tu (l’utente root) possa leggere e scrivere sul file.

# Cambia la proprietà del file all'utente root
chown root:root .vault_pass
# Cambia i permessi del file solo a root (permessi di lettura e scrittura)
chmod 700 .vault_pass

3. Infine, esegui il comando ansible-playbook di seguito, seguito dall’opzione –vault-password-file per eseguire un playbook (helloworld.yml) utilizzando un file di password (.vault_pass).

ansible-playbook --vault-password-file=.vault_pass helloworld.yml

Nota che Ansible ha eseguito il playbook senza chiedere la password del file crittografato.

Running Playbook using a Password File

Conclusioni

In questo tutorial, hai imparato come utilizzare Ansible Vault per crittografare e decrittografare dati sensibili per playbooks e attività di Ansible. Hai memorizzato la password di Ansible Vault in una posizione sicura utilizzando un file di password. Questo comportamento è utile per una minore intervento dell’utente durante l’esecuzione di un playbook.

Con questa nuova conoscenza, ora puoi criptare con fiducia i dati sensibili e condividere i tuoi playbook con gli altri senza preoccuparti della sicurezza dei tuoi dati.

Se usi LastPass per la gestione delle password, perché non memorizzare la password del tuo Ansible Vault in LastPass e far sì che Ansible la recuperi automaticamente quando necessario?

Source:
https://adamtheautomator.com/ansible-vault/