
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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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.
Pourquoi auditer ?
Section intitulée « Pourquoi auditer ? »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.
Checklist en 7 axes
Section intitulée « Checklist en 7 axes »Axe 1 — Mainteneur (3 points)
Section intitulée « Axe 1 — Mainteneur (3 points) »- 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.
Axe 2 — Qualité du code (4 points)
Section intitulée « Axe 2 — Qualité du code (4 points) »-
meta/main.ymlcomplet (galaxy_info, platforms, dependencies) -
meta/argument_specs.ymlprésent (validation auto des entrées) -
README.mddocumente toutes les variables - FQCN partout dans
tasks/(ansible.builtin.dnf, pas justednf) - Pas de
command:oushell:sanscreates:/removes: - Variables préfixées par le nom du rôle (
nginx_*, pasversion)
Drapeaux rouges : variables génériques (version, port), tâches non-idempotentes, pas de meta.
Axe 3 — Sécurité (5 points)
Section intitulée « Axe 3 — Sécurité (5 points) »- 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: 0640ou plus restrictif) - Pas de
become_user: rootnon 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é.
Axe 4 — Tests (3 points)
Section intitulée « Axe 4 — Tests (3 points) »-
molecule/présent avec scénario default -
verify.ymlou tests testinfra -
.ansible-lintpré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.
Axe 5 — Compatibilité (2 points)
Section intitulée « Axe 5 — Compatibilité (2 points) »- Platforms déclarées dans
meta/main.ymlmatchent 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).
Axe 6 — Idempotence (1 point)
Section intitulée « Axe 6 — Idempotence (1 point) »- Test
molecule converge && molecule verifyretournechanged=0au 2e run - Pas de
changed_when: truenon justifié - Pas de
ignore_errors: truesur les tâches critiques
Comment tester :
ansible-galaxy role install <role># Créer un playbook testansible-playbook test.yml # 1er runansible-playbook test.yml # 2e run → changed=0 attenduAxe 7 — Maintenabilité (1 point)
Section intitulée « Axe 7 — Maintenabilité (1 point) »- 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)
Le score
Section intitulée « Le score »Sur 19 critères au total :
| Score | Dé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. |
Patterns d’attaque à reconnaître
Section intitulée « Patterns d’attaque à reconnaître »Typosquatting
Section intitulée « Typosquatting »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).
Takeover de namespace
Section intitulée « Takeover de namespace »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.
Dépendances malicieuses
Section intitulée « Dépendances malicieuses »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.
Outils complémentaires
Section intitulée « Outils complémentaires »| Outil | Usage |
|---|---|
ansible-lint --profile=production | Vérification automatique de qualité |
yamllint | Vérification syntaxe YAML |
ansible-galaxy collection verify | Intégrité cryptographique |
| Steampunk Spotter (commercial) | Audit avancé : secrets leak, FQCN, suggestions |
Pratiquer dans le lab
Section intitulée « Pratiquer dans le lab »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.
cd ~/Projets/ansible-training/labs/galaxy/auditer-role-existant/
cat AUDIT_CHECKLIST.mdpytest -v challenge/tests/ # 8 testsPièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
| Rôle adopté trop vite, casse en prod | Pas d’audit | Imposer la checklist 7 axes en code review |
| Score 10/10 mais bug en prod | Test sur la mauvaise distro | Tester sur votre distro cible avant adoption |
| Mainteneur disparaît post-adoption | Pas de plan de fallback | Forker dans votre namespace dès l’adoption |
| Faille découverte dans un rôle utilisé | Pas de monitoring CVE | Suivre ansible-galaxy collection verify régulièrement |
| Vérification cryptographique optionnelle ignorée | Galaxy 2024+ | Activer signatures: dans requirements.yml |
À retenir
Section intitulée « À retenir »- 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 test2 fois = test d’idempotence rapide.