Dove inserire la password di Ansible-Vault


26

Stiamo pianificando di utilizzare Ansible Vault nel nostro progetto per evitare la perdita di password o chiavi in ​​git.

L'idea è quella di mettere tutti i nostri dati sensibili in un file semplice, quindi crittografare questo file con ansible-vault usando una password prima di passare a git.

Per decrittografare il file, dobbiamo passare la password del Vault a Ansible, sto pensando a 3 possibilità:

  • Memorizzarlo all'interno di una variabile di ambiente del server
  • Passalo come opzione al comando ansible-playbook
  • Memorizzalo in un file non con versione.

Esistono altre opzioni, che è il modo migliore (e sicuro) per archiviare la password di ansible-vault, la documentazione delle best practice di Ansible non dice nulla al riguardo.



Ci sono alcune buone risposte qui: devops.stackexchange.com/questions/3806/…
Vish

Risposte:


13

L'idea è di mettere tutti i nostri dati sensibili [...]

Il significato di "tutto" in questa frase deve essere analizzato molto attentamente prima di implementare la soluzione che si prevede.

Ansible Vault è uno strumento molto utile, ma dovrebbe essere usato solo per memorizzare segreti che sono:

  1. Necessariamente specifico per le distribuzioni rispondibili
  2. Facilmente reso inutile per i proprietari che dovrebbero non essere consapevoli di loro, ma che potrebbero "ricordarli" illegittimamente (in genere dipendenti off-boarding)

Il secondo punto è critico.

Molte persone, e potenzialmente l'intero team DevOps, avranno accesso alla password di Vault Ansible e quindi a tutti i segreti.

Pertanto, per tutti i segreti archiviati nel caveau, dovrebbe sussistere una condizione per la quale una persona o una macchina con accesso non autorizzato ad essi dovrebbe essere incapace di farne uso se lo si desidera.

In termini concreti, se usi Ansible per distribuire un database e i suoi utenti, puoi archiviare le password nel Vault, ma dovrai stare molto attento (e molto probabilmente prendere in considerazione un'altra soluzione) se quel servizio sarà disponibile da Internet e senza la necessità di alcuna autenticazione VPN!

Gli utenti (DevOps) esposti al segreto, dovrebbero essere incapaci di usare password "ricordate" se viene loro imposta una barriera di sicurezza (es. Accesso VPN revocato). Inoltre, è necessario revocare anche l'accesso al repository del codice sorgente (dove è archiviato il vault) prima di modificare le password.

In queste condizioni, Ansible Vault è uno strumento molto utile.

Cercare di memorizzare un segreto che potrebbe essere utilizzato da qualsiasi persona o macchina su Internet nel Vault sarebbe invece un errore (ad esempio, le credenziali VPN degli utenti).

Esistono altre opzioni, che è il modo migliore (e sicuro) per memorizzare la password di Ansible-Vault

Alle condizioni del paragrafo precedente, penso che una buona pratica sarebbe:

  1. Archivia la password del vault in un vault sicuro esterno (qualcosa come Vault di HashiCorp o qualsiasi SaaS per la gestione delle credenziali)
  2. Consentire l'accesso all'elemento del vault esterno a DevOps (avranno bisogno della password per il test) e del sistema CI / CD o controller di risposta
  3. Mantieni una convenzione per usare i segreti ! Non sarai in grado di rivedere le modifiche ai segreti e non potrai richiedere variabili rispondibili nei file dei segreti! Quindi sii accurato fin dall'inizio. Una buona convenzione è quella di nominare tutte le variabili memorizzate nel Vault Ansible con un secret_prefisso. Quando vedrai qualcosa di simile:

    postgres.yml:

    postgres_password: "{{ secret_postgres_password }}"
    

    saprai che il valore è memorizzato nel Vault Ansible.


1
Un buon punto per archiviare la password di Ansible Vault in un posto più sicuro (HashiCorp Vault o SaaS vault come AWS Secrets Manager). Tuttavia, deve comunque essere ruotato (modificato) se qualcuno lascia la squadra, poiché ha avuto accesso ad essa anche se per un breve periodo. Ciò può essere mitigato forse utilizzando depositi separati (sviluppo, test, produzione), ovvero file di segreti in YAML. Ansible 2.4+ consente inoltre di specificare password diverse per tali file utilizzando un "ID vault" - pagina dei documenti
RichVel

1
Ansible 2.3 ha introdotto una funzionalità che crittografa solo i valori nei file YAML, non l'intero file: è più semplice da mantenere rispetto alla vecchia convenzione menzionata al punto 3 alla fine di questa risposta.
RichVel

7

Stiamo pianificando di utilizzare Ansible Vault nel nostro progetto per evitare la perdita di password o chiavi in ​​git.

Dato che non hai ancora implementato nulla, potresti riconsiderarlo. L'utilizzo di un sistema come Ansible vault presenta numerosi aspetti negativi della sicurezza:

  • non esiste alcuna traccia di controllo di chi ha avuto accesso
  • quando un dipendente lascia, è facile per loro portare il negozio segreto con sé
  • quando un dipendente lascia, rimuovere il proprio accesso significa cambiare la password e ridistribuirla a tutti gli altri
  • una password di Ansible Vault compromessa può essere utilizzata per sempre su una versione precedente del Vault, come memorizzata nel controllo versione
  • i segreti devono essere statici

Un sistema potenzialmente molto più sicuro, sebbene più complesso, che non ha questi svantaggi è utilizzare Hashicorp Vault per archiviare i tuoi segreti. Puoi quindi estrarre i valori da esso quasi con la stessa facilità di Ansible vault utilizzando https://github.com/jhaals/ansible-vault .

Tuttavia, devi gestire l'autenticazione su Hashicorp Vault, e questa è la domanda sulla tartaruga . Per gli umani, penso che la soluzione migliore sia richiedere periodicamente una password e far scadere il token dopo un breve periodo di tempo; per le macchine, per utilizzare il back - end di autenticazione AWS o simili. Non puoi mai sbarazzarti del tutto della necessità di autenticazione da qualche parte, ma puoi rendere più difficile per un utente malintenzionato accedervi.

Ora, se configurare e amministrare un server segreto è troppo per te, allora puoi semplicemente usare Ansible vault. Perché archiviare la password sui singoli computer però? Per un uso interattivo, puoi semplicemente richiedere la password e gli utenti possono memorizzarla nel loro gestore di password preferito. iTerm su OS X ha un gestore di password che si integra con Keychain.app che lo rende particolarmente facile lì.


2
Il modo migliore per utilizzare Ansible Vault non è usarlo .. Grazie per averlo sottolineato!
tempesta

1
Per le organizzazioni medio-piccole, consiglierei di consultare un gestore di segreti basato su cloud come AWS Secrets Manager: questo è molto meno lavoro rispetto all'esecuzione di un cluster altamente disponibile per HashiCorp Vault, ma un grande miglioramento della sicurezza che ottieni con Ansible Vault, inclusi auditing e controllo granulare degli accessi. Naturalmente, si finisce per dipendere da quel servizio, ma che può essere incapsulato con alcune codifiche di app e lavoro Ansible. Il vantaggio principale è che alcuni segreti non devono assolutamente essere gestiti da Ansible, ad esempio le password dei DB: lascia che l'app diventi segreta dal gestore dei segreti.
RichVel

3

Questo è abbastanza per quanto riguarda le politiche interne che hai sulla gestione dei dati sensibili.

Vorrei dirti il ​​mio approccio a questo e spiegare ciò che vedo come pro e contro. Conservo la password di Ansible Vault in un file sulla macchina di controllo e ho una variabile di ambiente che la punta:

export ANSIBLE_VAULT_PASSWORD_FILE=/deep/dark/place

Ce l'ho sulla mia postazione di lavoro (dato che devo testare e sviluppare i playbook), anche alcuni colleghi ce l'hanno, e ovviamente ce l'abbiamo sulla principale macchina di controllo Ansible.

Professionisti:

  • non in un percorso / repository condiviso (è un file non con versione come dici tu)
  • non è necessario conoscere la password di Ansible Vault per eseguire una riproduzione (a condizione che si disponga di uno strumento CI, ad esempio Jenkins, in cui è possibile avviare facilmente i playbook)

Contro:

  • non è facile ruotare la password
  • tutti coloro che lavorano sui tuoi playbook devono averlo sulla propria workstation

I contro hanno mitigazioni, ma ancora una volta dipende dalle politiche e dalle regole che hai adottato nelle tue operazioni quotidiane.


1
Bel combinaison .. controlla l'altra risposta anche se potrebbe interessarti.
tempesta

0

Dai un'occhiata a questo progetto per gestire le tue password di crittografia del caveau ansible https://github.com/Smile-SA/ansible-vault-manager

Gestisce più piattaforme di archiviazione portachiavi con plugin (per ora implementato solo AWS SSM). Inoltre l'integrazione con un progetto Ansible attuale è molto semplice ...


Sarebbe utile se rendessi il più facile più concreto piuttosto che aggiungere qualcosa di generico. Ho letto il README della pagina di github, ma potresti cambiare la risposta in modo che contenga un chiaro esempio? Mi piacerebbe provarlo.
030
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.