RousselTMLEARNING

Article · Ansible : de la découverte à l'expertise

Sécurité : Vault, SSH et privilèges

1. Menaces et principes #

Où se situent les risques ?

Les points sensibles d'une chaîne Ansible #

Ansible a accès en administration à toute votre infrastructure : le nœud de contrôle est donc une cible de choix. Les risques classiques sont les secrets en clair dans Git, les clés SSH partagées, les mots de passe affichés dans les logs et les droits sudo trop larges.

  • Secrets : chiffrés au repos (Vault) et jamais affichés (no_log).
  • Authentification : clés SSH dédiées, protégées par passphrase ou agent, pas de mot de passe root.
  • Privilèges : become uniquement quand nécessaire, utilisateur sudo limité.
  • Contrôleur : accès restreint, journalisé, jamais exposé sur Internet.

2. Ansible Vault #

Chiffrer les variables et fichiers sensibles.

Les commandes essentielles #

Cycle de vie d'un secret avec Ansible Vault
Le mot de passe du vault n'est jamais versionné.
# Créer, éditer, afficher, chiffrer, déchiffrer
ansible-vault create group_vars/prod/vault.yml
ansible-vault edit   group_vars/prod/vault.yml
ansible-vault view   group_vars/prod/vault.yml
ansible-vault encrypt group_vars/prod/secrets.yml
ansible-vault decrypt group_vars/prod/secrets.yml
ansible-vault rekey   group_vars/prod/vault.yml       # changer le mot de passe

# Chiffrer une seule valeur (intégrable dans un fichier en clair)
ansible-vault encrypt_string 'S3cr3t!' --name 'db_password'
db_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          61373030633036386239...

Utiliser le vault à l'exécution #

ansible-playbook site.yml --ask-vault-pass
ansible-playbook site.yml --vault-password-file ~/.vault_pass     # fichier hors dépôt, chmod 600
ansible-playbook site.yml --vault-id prod@prompt --vault-id dev@~/.vault_dev   # plusieurs vaults

# Dans ansible.cfg
[defaults]
vault_password_file = ~/.vault_pass
Bonne Pratique : Convention : placez les variables chiffrées dans vault.yml préfixées vault_ et référencez-les depuis un fichier clair (db_password: "{{ vault_db_password }}") : on voit les noms, pas les valeurs.
Erreur Courante : Ne versionnez jamais le fichier du mot de passe du vault. Ajoutez-le au .gitignore.

3. Authentification et privilèges #

SSH, sudo et become.

Clés SSH dédiées #

# Clé dédiée à Ansible, protégée par passphrase
ssh-keygen -t ed25519 -f ~/.ssh/ansible_ed25519 -C "ansible-controller"

# Diffuser la clé publique avec Ansible lui-même
ansible all -m authorized_key -a "user=deploy key='{{ lookup('file','~/.ssh/ansible_ed25519.pub') }}' state=present" -k

# Agent SSH pour éviter de retaper la passphrase
eval "$(ssh-agent -s)" && ssh-add ~/.ssh/ansible_ed25519
# ansible.cfg
[defaults]
remote_user = deploy
private_key_file = ~/.ssh/ansible_ed25519
host_key_checking = True

[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=60s

Sudo limité côté cible #

# Autoriser l'utilisateur deploy à devenir root sans mot de passe
- name: Règle sudo pour deploy
  ansible.builtin.copy:
    dest: /etc/sudoers.d/deploy
    content: "deploy ALL=(ALL) NOPASSWD: ALL\n"
    mode: "0440"
    validate: visudo -cf %s

En environnement sensible, remplacez ALL par la liste des commandes réellement nécessaires.

4. Ne rien laisser fuiter #

no_log, logs et CI/CD.

no_log et diff #

- name: Créer l'utilisateur de base de données
  community.postgresql.postgresql_user:
    name: app
    password: "{{ vault_db_password }}"
  no_log: true                     # masque les arguments et résultats dans les logs

- name: Déployer le fichier de secrets
  ansible.builtin.template:
    src: secrets.env.j2
    dest: /etc/app/secrets.env
    mode: "0600"
  diff: false                      # ne pas afficher le contenu avec --diff

Dans un pipeline CI/CD #

# GitLab CI : le mot de passe du vault vient d'une variable masquée
deploy:
  script:
    - echo "$VAULT_PASSWORD" > .vault_pass && chmod 600 .vault_pass
    - ansible-playbook site.yml -i inventories/prod --vault-password-file .vault_pass
    - shred -u .vault_pass

Pour aller plus loin, déléguez les secrets à un coffre dédié (HashiCorp Vault, AWS Secrets Manager) via les lookups community.hashi_vault : le secret n'est alors jamais stocké dans le dépôt.

ansible-galaxy collection install community.hashi_vault
ansible-lint --profile production site.yml       # détecte les mauvaises pratiques de sécurité

📄 Ansible : gérer la sécurité (Vault, SSH, privilèges et secrets) →

Mon suivi

  • ⏱ Durée estimée : ≈ 11 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Articles recommandés

Linux vs Unix : Le Guide Complet des Commandes et Distributions

Comprenez les différences entre Linux et Unix, explorez les distributions (serveur, desktop, ligh...

Ansible : l'inventaire (statique, dynamique, groupes et variables)

Comprendre et maîtriser l'inventaire Ansible : fichiers INI et YAML, groupes, variables d'hôte et...

Ansible : les commandes Ad-Hoc

Exécuter des actions immédiates sur un parc de serveurs avec ansible : modules ping, command, she...

Ansible : structurer son code avec les rôles

Créer, organiser et réutiliser des rôles Ansible : arborescence, defaults, tasks, handlers, templ...

Ansible : générer des fichiers dynamiques avec Jinja2 et les facts

Créer des fichiers de configuration dynamiques : templates Jinja2, variables, facts, filtres, bou...

Ansible : gérer son infrastructure avec des playbooks (Infrastructure as Code)

Écrire des playbooks de production : structure d'un projet, plays, handlers, tags, strategy seria...

Ansible : piloter ses automatisations avec une interface graphique (AWX, Semaphore, AAP)

Comparer et installer les interfaces graphiques d'Ansible : AWX, Ansible Automation Platform, Sem...

Ansible : aller plus loin (tests, qualité, CI/CD et performance)

Industrialiser Ansible : ansible-lint, yamllint, Molecule, intégration continue, collections, exe...

Bonnes pratiques Vagrant : des environnements reproductibles et rapides

Bonnes pratiques Vagrant : Vagrantfile versionné, boxes épinglées, provisioning idempotent, multi...