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.