Ansible Vault

Ansible-Vault et Variables and Vaults best practices

Il y a certainement beaucoup d’approches pour protéger des variables confidentielles utilisées dans les livres de jeu :

  • Selon un certain niveau de sécurité, on pourra utiliser des variables d’environnement (notamment pour stocker des TOKEN).
  • Chiffrer un fichier de variables secrètes et encoder un mot de passe à chaque usage.
  • Chiffrer la valeur uniquement.

Une autre approche fonctionnelle consiste à placer son mot de passe dans un fichier dans un emplacement protégé avec des droits restreints, en tout cas en dehors du livre de jeu et de dépôt de contrôle de version. Il s’agira d’appeler ce fichier à chaque exécution du livre de jeu. Un fichier de variables confidentielle aura été chiffré avec ansible-vault à l’aide du fichier qui contient le mot de passe. Ce fichier de variables est inclus comme d’habitude dans un jeu ou ailleurs comme tout fichier de variables.

Une approche selon nous plus complexe est évoquée ici comme “Best Practice” : Variables and Vaults best practices

Approche par fichiers de mot de passe et de variables confidentiels

Placer ses variables confidentielles dans un fichier (ici secret.yml) :

secret: |
  Ceci est le message chiffré sur plusieurs lignes
  Voici la seconde ligne

Créer un fichier qui contient les mots de passe :

echo "testtest" > ~/.vault_passwords.txt ; chmod 600 ~/.vault_passwords.txt

Chiffrer le fichier secret.yml avec le mot de passe contenu dans l’endroit protégé ~/.vault_passwords.txt :

ansible-vault encrypt secret.yml --vault-password-file ~/.vault_passwords.txt

Pour preuve :

cat secret.yml | head -n 3
$ANSIBLE_VAULT;1.1;AES256
38633337663964663931613733393934383236653434393534393035643137333966633061653762
3536326465643930343062663065303538393831353863360a303036396362353934353163633730

Playbook de démonstration :

---
- name: "demo ansible-vault"
  hosts: localhost
  vars_files:
    - secret.yml
  gather_facts: False
  tasks:
    - name: "affiche le secret"
      debug:
        msg: "{{ secret }}"

Le message chiffré s’affiche !

ansible-playbook test-vault.yml --vault-password-file ~/.vault_passwords.txt

PLAY [demo ansible-vault] ******************************************************

TASK [affiche le secret] *******************************************************
ok: [localhost] => {
    "msg": "Ceci est le message chiffré sur plusieurs lignes\nVoici la seconde ligne\n"
}

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0

Fichier de mot de passe par défaut

On peut indiquer dans la configuration de Ansible l’emplacement par défaut du fichier de mot de passe via la directive vault_password_file = /path/to/vault_password_file.

Articles