Gestion des secrets avec Vault 15 min de lecture

Utiliser Vault dans les playbooks

Executer un playbook avec Vault

# Demander le mot de passe interactivement
ansible-playbook site.yml --ask-vault-pass

# Utiliser un fichier de mot de passe
ansible-playbook site.yml --vault-password-file ~/.vault_pass.txt

# Le fichier contient uniquement le mot de passe
echo "MonMotDePasseVault" > ~/.vault_pass.txt
chmod 600 ~/.vault_pass.txt

Configurer le mot de passe dans ansible.cfg

# ansible.cfg
[defaults]
vault_password_file = ~/.vault_pass.txt

# Avec cette config, plus besoin de --ask-vault-pass
ansible-playbook site.yml

Vault IDs : multiples mots de passe

# Chiffrer avec un ID specifique
ansible-vault encrypt --vault-id prod@~/.vault_prod.txt secrets-prod.yml
ansible-vault encrypt --vault-id dev@~/.vault_dev.txt secrets-dev.yml

# Executer avec plusieurs vault IDs
ansible-playbook site.yml \
  --vault-id prod@~/.vault_prod.txt \
  --vault-id dev@~/.vault_dev.txt

Exemple complet avec Vault

# Structure du projet
project/
  ansible.cfg
  inventory/hosts
  vars/
    common.yml          # Variables non sensibles
    secrets.yml         # Variables chiffrees avec Vault
  playbooks/
    deploy.yml

# vars/common.yml
app_name: myapp
app_port: 8080
db_host: db.example.com

# vars/secrets.yml (chiffre)
db_password: "SuperSecret123!"
api_key: "sk-abc123def456"

# playbooks/deploy.yml
---
- name: Deployer l'application
  hosts: webservers
  become: yes
  vars_files:
    - ../vars/common.yml
    - ../vars/secrets.yml

  tasks:
    - name: Deployer la config avec les secrets
      template:
        src: templates/app.conf.j2
        dest: /etc/myapp/app.conf
        mode: "0600"

# templates/app.conf.j2
[database]
host = {{ db_host }}
password = {{ db_password }}

[api]
key = {{ api_key }}
Bonne pratique : Separez les variables sensibles (chiffrees) des variables normales dans des fichiers distincts. Ajoutez le fichier vault_pass.txt au .gitignore.