Ansible Vault : gérer les secrets
Le problème des secrets en clair
Un playbook ou un fichier de variables contenant un mot de passe de base de données ou une clé API en texte clair, versionné dans Git, expose ce secret à quiconque a accès au dépôt, y compris dans l'historique des commits même après suppression ultérieure.
Ansible Vault : chiffrer les fichiers sensibles
ansible-vault create secrets.yml
ansible-vault edit secrets.yml
ansible-vault view secrets.yml
Le fichier est chiffré avec un mot de passe (ou une clé), et son contenu n'est lisible qu'en le déchiffrant avec ce mot de passe.
# secrets.yml (chiffré sur disque, en clair une fois déchiffré)
db_password: "MotDePasseSecret123"
api_key: "sk_live_abc123"
Utiliser un fichier chiffré dans un playbook
ansible-playbook playbook.yml --ask-vault-pass
# ou avec un fichier de mot de passe
ansible-playbook playbook.yml --vault-password-file .vault_pass
Chiffrer une valeur unique plutôt qu'un fichier entier
ansible-vault encrypt_string 'MotDePasseSecret123' --name 'db_password'
Utile pour n'avoir qu'une seule variable chiffrée dans un fichier par ailleurs en clair, plus lisible pour les revues de code.
Cas concret
Une équipe committe par erreur un fichier de variables non chiffré contenant un mot de passe de production sur un dépôt Git privé. Un ancien collaborateur, toujours membre de l'organisation par oubli, conserve un accès en lecture au dépôt et donc au secret exposé. L'utilisation d'Ansible Vault dès le départ aurait rendu ce fichier illisible sans le mot de passe du Vault, limitant l'exposition réelle même en cas d'accès non désiré au dépôt.
Erreurs fréquentes
- Committer le mot de passe du Vault lui-même dans le même dépôt que les fichiers chiffrés : annule toute la protection apportée.
- Partager le mot de passe du Vault par email ou messagerie non sécurisée : le secret de dernier niveau doit être transmis via un canal au moins aussi sécurisé que ce qu'il protège.
- Chiffrer un fichier entier quand une seule variable a réellement besoin d'être secrète, rendant les revues de code impossibles sur le reste du contenu.
À retenir
- Ansible Vault chiffre des fichiers ou des variables individuelles pour protéger les secrets versionnés dans Git.
- Le mot de passe du Vault ne doit jamais être stocké dans le même dépôt que les fichiers qu'il protège.
encrypt_stringpermet de ne chiffrer qu'une variable précise, gardant le reste du fichier lisible en revue de code.
Mini-exercice
Un fichier de variables contient une seule valeur sensible (un mot de passe de base de données) au milieu de dizaines de variables non sensibles. Faut-il chiffrer tout le fichier avec Ansible Vault ?
Réponse : non, préférable d'utiliser ansible-vault encrypt_string pour ne chiffrer que cette variable précise, gardant le reste du fichier lisible en clair pour faciliter les revues de code.