Objectif
Reprendre le playbook d’installation MariaDB du lab découverte (avec ses mots de passe en clair) et le sécuriser proprement avec Ansible Vault, sans rien changer au comportement du playbook.
Environnement disponible
Vous disposez de :
- 1 serveur de contrôle avec Ansible installé
- 1 client Debian :
nrd-db1
Informations de connexion
- Utilisateur :
root - Mot de passe :
formation
⚠️ Les conteneurs de ce lab repartent de zéro à chaque session. Les premières étapes ci-dessous refont donc systématiquement tout le bootstrap.
Ce que vous allez réaliser
- Installer Ansible
- Générer une clé SSH et la déployer sur le client
- Localiser l’IP et créer l’inventaire
- Chiffrer les trois secrets du playbook MariaDB avec
encrypt_string: mot de passe root, mot de passe applicatif - Reconstruire le playbook pour qu’il utilise ces variables vaultées plutôt que des valeurs en clair
- Configurer
ansible.cfgpour ne plus avoir à taper le mot de passe Vault à chaque exécution - Exécuter le playbook et vérifier que MariaDB fonctionne exactement comme avant
Conseils
- Réutilisez la structure du playbook
playbook_mariadb_install.yamldu lab découverte de cette formation — l’objectif ici n’est pas de le réécrire, mais de sécuriser ses variables. - N’oubliez pas
chmod 600sur le fichier de mot de passe Vault. - Une fois
ansible.cfgconfiguré, plus besoin de--vault-password-fileni--ask-vault-passen ligne de commande.
🧪 Lab · membre · 30 min
🧪 Lancer le labVoir la solutionMasquer la solution
Générer une clé SSH et la déployer sur le client
ssh-keygen -t ed25519 -C "ansible@control-serveur" -f ~/.ssh/id_ed25519 -N ""
ssh root@nrd-db1
nano .ssh/authorized_keys
# Coller la clé publique, sauvegarder
Localiser l’IP et créer l’inventaire
ping nrd-db1
mkdir ansible && cd ansible
nano inventaire.yaml
# inventaire.yaml
all:
hosts:
nrd-db1:
ansible_host: <IP>
ansible all -i inventaire.yaml -m ping
Créer le fichier de mot de passe Vault
echo "MonMotDePasseVault123" > .vault_pass.txt
chmod 600 .vault_pass.txt
Chiffrer les deux secrets
ansible-vault encrypt_string 'SuperRoot123!' --name 'mysql_root_password' --vault-password-file .vault_pass.txt
ansible-vault encrypt_string 'AppPass123!' --name 'app_password' --vault-password-file .vault_pass.txt
Créer le fichier de variables vaultées
mkdir group_vars
nano group_vars/all.yml
# group_vars/all.yml
mysql_root_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
<collez ici le bloc généré pour mysql_root_password>
app_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
<collez ici le bloc généré pour app_password>
Configurer ansible.cfg
nano ansible.cfg
# ansible.cfg
[defaults]
vault_password_file = .vault_pass.txt
Reconstruire le playbook, en s’appuyant sur les variables vaultées plutôt que sur des valeurs en clair
nano playbook_mariadb_secure.yaml
# playbook_mariadb_secure.yaml
---
- name: Installer et configurer MariaDB de façon sécurisée
hosts: nrd-db1
become: yes
vars:
app_db: appdb
app_user: appuser
tasks:
- name: Installer MariaDB
ansible.builtin.apt:
name:
- mariadb-server
- python3-pymysql
state: present
update_cache: yes
- name: Démarrer MariaDB
ansible.builtin.service:
name: mariadb
state: started
enabled: yes
- name: Définir le mot de passe root
community.mysql.mysql_user:
name: root
host: localhost
password: "{{ mysql_root_password }}"
login_unix_socket: /run/mysqld/mysqld.sock
check_implicit_admin: true
priv: "*.*:ALL,GRANT"
- name: Créer la base applicative
community.mysql.mysql_db:
name: "{{ app_db }}"
state: present
login_user: root
login_password: "{{ mysql_root_password }}"
- name: Créer l'utilisateur applicatif
community.mysql.mysql_user:
name: "{{ app_user }}"
password: "{{ app_password }}"
priv: "{{ app_db }}.*:ALL"
host: "%"
state: present
login_user: root
login_password: "{{ mysql_root_password }}"
Exécuter le playbook
ansible-playbook playbook_mariadb_secure.yaml -i inventaire.yaml -v
Remarquez : aucune option --vault-password-file ni --ask-vault-pass n’a été nécessaire — ansible.cfg s’en charge automatiquement.
Vérifier que tout fonctionne comme avant
ansible nrd-db1 -i inventaire.yaml -m command -a "mysql -u appuser -pAppPass123! -e 'SHOW DATABASES;'" --become
Vous devriez voir appdb dans la liste des bases — le comportement est identique au lab découverte, mais les deux mots de passe ne sont désormais jamais lisibles en clair dans le playbook ni dans group_vars/all.yml.