Committer un mot de passe ou une clé API dans Git est une des erreurs les plus communes en infrastructure. Ansible Vault est la réponse intégrée à ce problème.
Les bases : chiffrer un fichier de variables
# Chiffrer un fichier existant
ansible-vault encrypt group_vars/prod/secrets.yml
# Créer un nouveau fichier chiffré
ansible-vault create group_vars/prod/secrets.yml
# Contenu d'un fichier vault
db_password: "s3cr3t-production-pwd"
api_key: "sk-prod-xxxxxxxxxxxx"
smtp_password: "mail-secret"
Le fichier est stocké chiffré dans Git. Seul quelqu’un qui possède le mot de passe vault peut le déchiffrer.
Plusieurs mots de passe vault : vault-id
Pour des environnements différents (dev, staging, prod), utilisez des vault-ids séparés :
# Chiffrer avec un vault-id spécifique
ansible-vault encrypt --vault-id prod@prompt group_vars/prod/secrets.yml
ansible-vault encrypt --vault-id staging@~/.vault-staging group_vars/staging/secrets.yml
# Lancer le playbook avec plusieurs vault-ids
ansible-playbook site.yml \
--vault-id prod@~/.vault-prod \
--vault-id staging@~/.vault-staging
Intégration CI/CD
# GitLab CI — stocker le mot de passe vault dans une variable CI
deploy:
script:
- echo "$ANSIBLE_VAULT_PASSWORD" > .vault-pass
- ansible-playbook site.yml --vault-password-file .vault-pass
- rm .vault-pass # toujours nettoyer
La variable $ANSIBLE_VAULT_PASSWORD est stockée dans les variables CI/CD GitLab, chiffrée et masquée dans les logs.
Chiffrer uniquement les valeurs, pas le fichier entier
# group_vars/prod/vars.yml — format mixte lisible
db_host: "db.prod.example.com"
db_port: 5432
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
61626364... # valeur chiffrée inline
Avec ansible-vault encrypt_string, seules les valeurs sensibles sont chiffrées. Le reste du fichier est lisible — meilleur pour les revues de code.
Notre formation Ansible couvre Vault et la gestion des secrets dans les playbooks de production.