Introduction
Ansible Vault permet de chiffrer des variables sensibles afin qu'elles puissent être stockées avec les playbooks sans exposer les secrets en texte clair. Un playbook ne peut utiliser la valeur que si vous fournissez un mot de passe Vault valide.
Dans ce laboratoire, vous allez créer une variable chiffrée, observer l'échec de l'exécution en l'absence de mot de passe, puis exécuter un playbook avec succès en utilisant un fichier de mot de passe Vault.
Créer un projet de pratique pour Vault
Dans cette étape, vous allez créer un projet comprenant un inventaire, un répertoire de variables de groupe, un répertoire de playbooks et un répertoire de rapports.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars/managed,playbooks,managed,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
La variable chiffrée sera placée sous inventory/group_vars/managed, afin qu'elle soit chargée pour le groupe managed comme n'importe quel autre fichier de variables. La différence est qu'Ansible doit la déchiffrer avant de l'utiliser.
Créer un fichier de mot de passe Vault
Dans cette étape, vous allez créer un fichier de mot de passe pour l'automatisation du laboratoire. Dans un environnement réel, protégez ce fichier avec soin ou utilisez un flux de travail basé sur une invite de commande. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.
cd /home/labex/project/rhce-ansible
cat > vault_pass.txt <<'EOF'
labex-vault-pass
EOF
chmod 600 vault_pass.txt
Ce fichier de mot de passe est destiné uniquement au flux de travail du laboratoire. Le mode chmod 600 signifie que seul le propriétaire peut le lire et l'écrire, ce qui constitue la pratique minimale à adopter lorsqu'un fichier permet de déverrouiller des secrets.
ls -l vault_pass.txt
Vérifiez que les permissions ressemblent à -rw-------. Si le fichier est lisible par le groupe ou d'autres utilisateurs, réexécutez la commande chmod 600.
Créer une variable chiffrée
Dans cette étape, vous utiliserez ansible-vault encrypt_string pour créer une variable chiffrée nommée app_secret. Le fichier chiffré peut être chargé comme n'importe quel autre fichier de variables de groupe.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
ansible-vault encrypt_string --vault-password-file vault_pass.txt 'redhat' --name app_secret > inventory/group_vars/managed/vault.yml
La commande écrit une variable YAML chiffrée nommée app_secret. Le nom de la variable reste lisible, mais la valeur redhat est stockée à l'intérieur d'un bloc Vault.
sed -n "1,8p" inventory/group_vars/managed/vault.yml
Le fichier doit afficher app_secret: !vault et un en-tête $ANSIBLE_VAULT;. Vous ne devriez pas voir le secret en texte clair dans ce fichier.
Écrire un playbook qui utilise le secret
Dans cette étape, vous allez écrire un playbook qui fait référence à app_secret. Sans le mot de passe Vault, Ansible ne peut pas déchiffrer cette variable.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
cat > playbooks/use-vault.yml <<'EOF'
---
- name: Use an encrypted variable
hosts: managed
gather_facts: false
tasks:
- name: Write secret-derived file
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/managed/secret.txt
content: |
secret={{ app_secret }}
mode: '0600'
EOF
Le playbook utilise app_secret comme une variable normale. C'est tout l'intérêt de Vault : la logique du playbook reste propre tandis que la valeur sensible demeure chiffrée au repos.
ansible-playbook playbooks/use-vault.yml > reports/vault-missing.txt 2>&1 || true
Cette exécution est censée échouer car aucun mot de passe Vault n'a été fourni. La sortie est redirigée vers un rapport afin que vous puissiez inspecter l'erreur sans interrompre le laboratoire.
grep -Ei "vault|decrypt|password|secret" reports/vault-missing.txt
L'erreur filtrée devrait mentionner Vault, le déchiffrement, le mot de passe ou le secret. Notez également que la vérification confirme qu'aucun fichier managed/secret.txt n'a été créé.
Exécuter le playbook avec le mot de passe Vault
Dans cette étape, vous allez fournir le fichier de mot de passe Vault afin qu'Ansible puisse déchiffrer la variable et écrire le fichier de sortie protégé. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/use-vault.yml --vault-password-file vault_pass.txt | tee reports/vault-run.txt
Désormais, Ansible peut déchiffrer app_secret et transmettre la valeur en texte clair à la tâche copy lors de l'exécution. Le fichier chiffré sur le disque reste, quant à lui, chiffré.
sudo ls -l managed/secret.txt && cat managed/secret.txt
Le fichier doit avoir le mode 600 et contenir secret=redhat. Cela prouve que le playbook a utilisé la valeur déchiffrée tout en protégeant le fichier secret généré.
Résumé
Vous avez créé une variable chiffrée avec Vault, observé que le playbook ne peut pas l'utiliser sans mot de passe, puis exécuté le playbook avec un fichier de mot de passe Vault pour déchiffrer et appliquer le secret.


