Aller au contenu
Infrastructure as Code medium

Trouver le bon module Ansible : cartographie et sécurité supply chain

12 min de lecture

Logo Ansible

Quand vous abordez un nouveau besoin (gérer un load-balancer, parler à une API CRM, configurer un firewall exotique), la première question à se poser est : quel module utiliser ? Ansible propose 3000+ modules répartis sur des dizaines de collections — vous trouverez quasiment toujours quelqu’un qui a déjà packagé votre cas d’usage. Mais cette abondance a un revers : toutes les collections ne se valent pas. Certaines sont abandonnées, d’autres mal maintenues, et quelques-unes peuvent être compromises (typosquatting, takeover de package, dépendances malicieuses). Cette page donne la méthode pour trouver vite le bon module et les garde-fous sécurité.

  • Identifier rapidement le module adapté à un besoin via ansible-doc -l et Galaxy.
  • Évaluer la qualité d’une collection avant de l’installer.
  • Pinner les versions dans requirements.yml pour éviter les mises à jour silencieuses.
  • Vérifier l’authenticité d’une collection avec ansible-galaxy collection verify.
  • Reconnaître les patterns d’attaques supply chain (typosquatting, dépendances malicieuses).

Avant de chercher, formulez le besoin en un verbe + un objet :

Besoin formulé vagueReformulation utile
« Gérer Docker »« Démarrer un conteneur Docker avec une image et un volume »
« Configurer le firewall »« Ouvrir le port 443/tcp dans la zone publique de firewalld »
« Parler à une API »« Faire un POST JSON vers une API REST avec authentification Bearer »

Plus le besoin est précis, plus il est facile de trouver le bon module — au lieu de feuilleter 300 modules Docker, vous cherchez docker_container.

Fenêtre de terminal
ansible-doc -l | grep -i docker
ansible-doc -l | grep -i firewall
ansible-doc -l | grep -i mysql

ansible-doc -l liste tous les modules installés (collections présentes sur votre control node) avec leur description courte. Filtrer avec grep est l’approche la plus rapide.

Fenêtre de terminal
$ ansible-doc -l | grep -i docker | head -5
community.docker.current_container_facts Return facts about whether the module runs ...
community.docker.docker_compose_v2 Manage multi-container Docker applications ...
community.docker.docker_container manage Docker containers
community.docker.docker_container_copy_into Copy a file into a Docker container
community.docker.docker_container_exec Execute command in a Docker container

Pour les modules non installés, naviguer sur galaxy.ansible.com ou docs.ansible.com.

Une fois un candidat identifié :

Fenêtre de terminal
ansible-doc community.docker.docker_container

Repérer :

  • Les paramètres requis (souvent name:, state:, image: pour Docker).
  • Les paramètres avec defaults raisonnables (qu’on peut omettre).
  • Les exemples en bas de doc — le copier-coller est souvent suffisant pour démarrer.
  • La version mini Ansible requise (compatibilité avec votre ansible-core).
Fenêtre de terminal
ansible-doc -s community.docker.docker_container > /tmp/snippet.yml

Génère un YAML annoté prêt à coller dans votre playbook. Indispensable au RHCE pour gagner du temps.

CollectionPérimètreMaintenu parQuand l’utiliser
ansible.builtinModules cœur livrés avec ansible-coreRed HatToujours en premier — copy, file, dnf, apt, systemd, user, group, lineinfile
ansible.posixLinux/POSIX bas niveauRed Hatfirewalld, mount, sysctl, selinux, authorized_key
community.generalCatalogue générique très largeCommunautésudoers, lvg, lvol, hostname, pamd, nmcli — quand builtin/posix ne suffisent pas
community.cryptoCryptographie X.509CommunautéCertificats SSL, clés OpenSSH, CSRs
community.dockerDocker / Docker ComposeCommunautéConteneurs, images, networks, volumes Docker
community.libvirtVirtualisation libvirt/KVMCommunautéInventaire dynamique KVM, gestion de VMs (lab inventaires/dynamique-kvm)
community.mysql / community.postgresqlBases de donnéesCommunautéUsers, databases, replication
community.hashi_vaultHashiCorp Vault / OpenBaoCommunautéLookups de secrets, intégration Vault
kubernetes.coreKubernetes natifRed Hatk8s module, helm, helm_repository
amazon.awsAWS officielleRed HatEC2, S3, RDS, IAM, VPC, Route53
azure.azcollectionAzure officielleMicrosoftVMs, storage, AKS, identités managées
google.cloudGCP officielleGoogleCompute, GKE, Cloud Storage
ansible.windowsWindows officielleRed Hatwin_user, win_service, win_feature, win_chocolatey
community.windowsWindows extensionsCommunautéCompléments à ansible.windows
redhat.satelliteRed Hat SatelliteRed HatHosts, content views, sync plans

Règle pragmatique : commencer par ansible.builtin, descendre vers ansible.posix, puis community.general. Aller chercher une collection plus spécifique uniquement si nécessaire.

Toutes les collections Galaxy ne se valent pas. Avant d’ajouter community.<random> dans votre requirements.yml, vérifier :

CritèreComment vérifierPourquoi c’est important
MainteneurPage Galaxy → champ “Maintainer”Les collections redhat.*, ansible.*, amazon.aws sont supportées Red Hat. Les community.* sont communautaires (qualité variable).
ActivitéGitHub → date du dernier commit, issues ouvertesUne collection sans commit depuis 18 mois est probablement abandonnée.
Tests CIGitHub → workflow Actions ou GitLab CIPas de tests = pas de garantie d’idempotence ou de compatibilité versions.
Documentationansible-doc <module> complet ?Une doc minimale signale souvent un développement rushé.
TéléchargementsGalaxy → compteur de downloadsUne collection à 50 downloads/an est rarement battle-tested.
Issues récurrentesGitHub → issues fermées vs ouvertesBeaucoup d’issues ouvertes sans réponse = mauvais signe.

Mandatory pour éviter qu’une mise à jour casse votre pipeline ou introduise une vulnérabilité :

---
collections:
- name: ansible.posix
version: "1.6.2" # ← version exacte (recommandé en prod)
- name: community.general
version: ">=8.0.0,<9.0.0" # ← range mineur (acceptable)
- name: amazon.aws
version: "*" # ← AVOID : version flottante

Argument : sans pinning, ansible-galaxy collection install -r requirements.yml --upgrade récupère la dernière version. Si un mainteneur publie une régression, votre pipeline casse silencieusement.

Sécurité — Attaques supply chain sur les collections

Section intitulée « Sécurité — Attaques supply chain sur les collections »

Les collections Ansible ne sont pas exemptes des attaques supply chain qui frappent npm, PyPI, Docker Hub. Connaître les patterns d’attaque permet de les éviter.

Un attaquant publie une collection au nom proche d’une collection légitime, en espérant que vous fassiez une faute de frappe :

Collection légitimeTyposquats potentiels
community.generalcommunity.generals, commmunity.general, community.genral
amazon.awsamazon.awa, amazon-aws, amazons.aws
kubernetes.corekubenetes.core, kubernets.core, kubernetes.cor

Mitigation : copier-coller depuis Galaxy, ne jamais retaper un nom de collection. Vérifier le mainteneur officiel avant install.

Un namespace abandonné par son mainteneur peut être récupéré par un attaquant qui publie ensuite une version malicieuse. Cas connu sur PyPI et npm — moins fréquent sur Galaxy mais possible.

Mitigation : préférer les namespaces maintenus par des organismes (redhat.*, ansible.*, amazon.aws, microsoft.azure) plutôt qu’un compte individuel. Vérifier l’activité du mainteneur.

Pattern 3 — Dépendances transitives malicieuses

Section intitulée « Pattern 3 — Dépendances transitives malicieuses »

Une collection peut dépendre d’autres collections, qui peuvent elles-mêmes dépendre de packages Python malveillants. La chaîne devient vite opaque.

Mitigation :

Fenêtre de terminal
# Inspecter les dépendances avant install
ansible-galaxy collection install community.general --pre --no-deps
cat ~/.ansible/collections/ansible_collections/community/general/MANIFEST.json | jq '.collection_info.dependencies'

Si dependencies: contient une collection inconnue, investiguer.

Le compte du mainteneur est piraté et une release malicieuse est publiée sous le nom légitime. Difficile à détecter sans signature.

Mitigation : depuis Galaxy 2024, les collections peuvent être signées avec GPG. Vérification :

Fenêtre de terminal
ansible-galaxy collection verify community.general

Cette commande compare le digest local au digest publié sur Galaxy. Une divergence = collection altérée localement (ou release piratée).

Les collections Galaxy ne devraient pas exécuter de code Python à l’installation, mais certaines (rares) le font via des hooks. Risque de payload caché.

Mitigation : préférer Automation Hub (Red Hat) ou un mirror privé validé par votre équipe sécurité, plutôt que Galaxy public.

# ansible.cfg
[galaxy]
server_list = corporate_hub
[galaxy_server.corporate_hub]
url = https://hub.corp.example.com/api/automation-hub/
token = <token>

Toute collection passe par votre mirror au lieu de Galaxy public. Le mirror est validé par l’équipe sécurité (scan, signature, allow-list).

collections:
- name: ansible.posix
version: "1.6.2"
signatures:
- https://galaxy.ansible.com/api/v3/.../signatures/abc123

ansible-galaxy collection install -r requirements.yml vérifie la signature avant install. Si la signature ne correspond pas, l’install échoue.

Fenêtre de terminal
ansible-galaxy collection list > /tmp/collections.txt
# Comparer avec un état de référence connu (commit Git du fichier requirements.yml)
diff requirements.lock.yml /tmp/collections.txt

Un drift entre le lock et l’état réel signale un install non autorisé.

Le runner CI qui installe les collections doit avoir un scope minimal : pas d’accès réseau hors mirror privé, pas de credentials cloud, pas de write sur le repo. Si une collection malicieuse s’exécute, le blast radius est limité.

SymptômeCauseFix
Module installé mais couldn't resolve module/actionFQCN manquantToujours utiliser ansible.posix.firewalld: (pas juste firewalld:)
Mise à jour Galaxy casse le pipelinePas de pinning de versionversion: "1.6.2" exact dans requirements.yml
Collection introuvable sur GalaxyRécemment supprimée ou renomméeChercher sur Automation Hub ou GitHub upstream
Collection community.X lente à installerDépendances Python lourdesVérifier MANIFEST.jsondependencies:
Module obsolète mais encore présentCollection pas mise à jouransible-galaxy collection list --upgrade ou consulter le CHANGELOG
  • Méthode pour trouver un module : ansible-doc -l | grep puis ansible-doc <fqcn> puis ansible-doc -s <fqcn>.
  • 3 collections = 90 % des cas : ansible.builtin, ansible.posix, community.general.
  • Pinning de version mandatory en requirements.yml — éviter les versions flottantes.
  • Évaluer une collection : mainteneur, activité, tests CI, downloads, issues.
  • Attaques supply chain : typosquatting, takeover, dépendances, releases compromises — connaître les patterns.
  • Mitigation entreprise : mirror privé (Automation Hub), signatures, audit régulier, scope CI restreint.

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