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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn