
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 |
Mettre en pratique
Section intitulée « Mettre en pratique »Une grille d'audit ne prouve sa valeur que confrontée à du code réel, avec ses zones grises. Le lab vous fait installer un rôle Galaxy largement diffusé, remplir une checklist de plus de vingt points de contrôle, relever les anti-patterns décrits plus haut, puis conclure par une décision argumentée : adopter, forker ou refuser. La vérification porte sur les points d'audit effectivement relevés et sur la cohérence du score, pas sur le verdict que vous auriez préféré.
Piè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.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Vault dans les rôles : cloisonner les secrets qu'un rôle adopté va recevoir, une fois l'audit passé.
- HashiCorp Vault / OpenBao : garder les secrets hors du dépôt, ce qui limite la casse si un rôle tiers dérape.
- Construire un EE custom : figer la version auditée et ses dépendances dans une image, pour que l'audit reste valable dans le temps.