Aller au contenu
Infrastructure as Code medium

Auditer un rôle Ansible Galaxy avant utilisation : checklist en 7 axes

5 min de lecture

Logo Ansible

Avant d’utiliser un rôle Galaxy ou GitHub dans votre projet, vous devez l’auditer. Toutes les rôles Galaxy ne se valent pas : certains sont abandonnés, mal testés, ou compromis (typosquatting, takeover). Cette checklist en 7 axes vous donne un protocole reproductible pour évaluer un rôle en 5-10 minutes et décider d’adopter, forker, ou refuser.

  • Les 7 axes d’audit d’un rôle Ansible.
  • Critères mesurables par axe (pas de subjectivité).
  • Calculer un score d’audit (10/10).
  • Quand adopter, forker, refuser un rôle.
  • Reconnaître les patterns d’attaque supply chain.

Un rôle Galaxy compromis peut :

  • Exfiltrer des secrets (/etc/shadow, clés SSH).
  • Installer un backdoor (cron job persistant).
  • Modifier sshd_config (autorisation root via clé).
  • Inclure des dépendances malicieuses (en cascade).

L’audit prévient ces risques. 5-10 minutes par rôle Galaxy avant adoption.

  • Auteur connu ou organisation officielle (Red Hat, geerlingguy, ansible-collections, etc.)
  • Date du dernier commit < 12 mois
  • Issues récentes répondues (au moins 50 % de réponses)
  • CHANGELOG.md à jour avec versions

Drapeaux rouges : auteur sans nom complet (juste un pseudo), 0 contribution depuis 18 mois, issues abandonnées.

  • meta/main.yml complet (galaxy_info, platforms, dependencies)
  • meta/argument_specs.yml présent (validation auto des entrées)
  • README.md documente toutes les variables
  • FQCN partout dans tasks/ (ansible.builtin.dnf, pas juste dnf)
  • Pas de command: ou shell: sans creates:/removes:
  • Variables préfixées par le nom du rôle (nginx_*, pas version)

Drapeaux rouges : variables génériques (version, port), tâches non-idempotentes, pas de meta.

  • Aucune clé ou secret dans le code
  • Aucune URL de download non-HTTPS (http://...)
  • Pas de téléchargement sans checksum:
  • Permissions strictes sur les fichiers déployés (mode: 0640 ou plus restrictif)
  • Pas de become_user: root non justifié
  • Validation des entrées via argument_specs.yml

Drapeaux rouges : curl http://... dans une tâche, mode 0777, secrets en clair (même partiels), command: avec input non échappé.

  • molecule/ présent avec scénario default
  • verify.yml ou tests testinfra
  • .ansible-lint présent (idéalement profil production)
  • CI/CD (GitHub Actions, GitLab CI) actif

Drapeaux rouges : zéro test, dossier tests/ vide ou non maintenu, CI éteinte.

  • Platforms déclarées dans meta/main.yml matchent votre environnement
  • min_ansible_version ≤ votre version d’Ansible
  • Pas de dépendances obsolètes (yum_module, etc.)

Drapeaux rouges : platforms: [Ubuntu 18.04] (EOL), min_ansible_version: 2.5 (ancienne).

  • Test molecule converge && molecule verify retourne changed=0 au 2e run
  • Pas de changed_when: true non justifié
  • Pas de ignore_errors: true sur les tâches critiques

Comment tester :

Fenêtre de terminal
ansible-galaxy role install <role>
# Créer un playbook test
ansible-playbook test.yml # 1er run
ansible-playbook test.yml # 2e run → changed=0 attendu
  • Code commenté (au moins les sections complexes)
  • Variables avec defaults raisonnables
  • Pas de rôle imbriqué > 2 niveaux
  • Tâches groupées par responsabilité (install / configure / start / verify)

Sur 19 critères au total :

ScoreDécision
17-19/19✅ Rôle de qualité production. Adopter.
13-16/19🟡 Acceptable. Adopter avec audit complémentaire (vérif sécurité approfondie).
9-12/19🟠 Risqué. Considérer un fork (corriger les manques) ou chercher une alternative.
< 9/19🔴 Refuser. Trop d’effort de maintenance.

Un attaquant publie comunity.general (1 m manquant) en espérant des fautes de frappe.

Mitigation : copier-coller depuis Galaxy, jamais retaper. Vérifier le mainteneur officiel (community.general = ansible-collections/community.general).

Un namespace abandonné est récupéré par un attaquant qui publie une version compromise.

Mitigation : préférer les namespaces d’organisations (redhat.*, ansible.*, geerlingguy.*) plutôt que d’individus inconnus.

Une collection peut dépendre d’autres collections, qui dépendent de packages Python compromis.

Mitigation : cat ~/.ansible/collections/.../MANIFEST.json après install pour voir l’arbre de dépendances.

OutilUsage
ansible-lint --profile=productionVérification automatique de qualité
yamllintVérification syntaxe YAML
ansible-galaxy collection verifyIntégrité cryptographique
Steampunk Spotter (commercial)Audit avancé : secrets leak, FQCN, suggestions

Cette page a un lab d’accompagnement : labs/galaxy/auditer-role-existant/ dans stephrobert/ansible-training.

Le lab fournit un AUDIT_CHECKLIST.md complet avec 25+ checkpoints. 8 tests structure validés.

Fenêtre de terminal
cd ~/Projets/ansible-training/labs/galaxy/auditer-role-existant/
cat AUDIT_CHECKLIST.md
pytest -v challenge/tests/ # 8 tests
SymptômeCauseFix
Rôle adopté trop vite, casse en prodPas d’auditImposer la checklist 7 axes en code review
Score 10/10 mais bug en prodTest sur la mauvaise distroTester sur votre distro cible avant adoption
Mainteneur disparaît post-adoptionPas de plan de fallbackForker dans votre namespace dès l’adoption
Faille découverte dans un rôle utiliséPas de monitoring CVESuivre ansible-galaxy collection verify régulièrement
Vérification cryptographique optionnelle ignoréeGalaxy 2024+Activer signatures: dans requirements.yml
  • 7 axes d’audit : mainteneur, code, sécurité, tests, compatibilité, idempotence, maintenabilité.
  • Score sur 19 — adopter ≥ 17, refuser < 9.
  • Drapeaux rouges : variables non préfixées, command: non idempotent, pas de tests.
  • Patterns d’attaque : typosquatting, takeover, dépendances malicieuses.
  • Forker dans votre namespace dès l’adoption pour fallback.
  • molecule test 2 fois = test d’idempotence rapide.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn