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:
- Necessariamente specifico per le distribuzioni rispondibili
- 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:
- Archivia la password del vault in un vault sicuro esterno (qualcosa come Vault di HashiCorp o qualsiasi SaaS per la gestione delle credenziali)
- 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
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.