Aller au contenu
Infrastructure as Code medium

Concepts Rudder : Techniques, Directives, Groupes, Règles et Policy Mode

16 min de lecture

Logo rudder

Avant d'installer et de créer votre première configuration Rudder, il est essentiel de comprendre comment l'outil organise la gestion de configuration. Rudder repose sur 4 concepts structurants (Technique, Directive, Groupe, Règle) et un concept transversal clé : le Policy Mode (Audit/Enforce).

Ce guide vous explique chaque concept, comment ils interagissent, et pourquoi cette organisation facilite la gestion d'infrastructures complexes.

Imaginez que vous voulez installer et configurer Apache sur tous vos serveurs web. Voici comment Rudder structure cette tâche :

Concepts Rudder : Règle, Directive, Technique et Groupe

En résumé :

  • La Technique définit comment faire quelque chose (installer Apache, gérer SSL...)
  • La Directive configure quoi faire exactement (activer SSL, port 443, chemin des certificats...)
  • Le Groupe définit qui est concerné (mes serveurs web)
  • La Règle combine Directive + Groupe pour dire "appliquer ceci à ceux-là"

Une Technique est un modèle réutilisable qui décrit comment réaliser une tâche de configuration. Concrètement, c'est une suite ordonnée d'appels de méthodes (installer un paquet, écrire un fichier, démarrer un service) exposant des paramètres que vous renseignerez ensuite. La Technique ne cible aucune machine et ne fixe aucune valeur : elle définit la mécanique, pas le contenu.

Rudder est livré avec des dizaines de Techniques prêtes à l'emploi couvrant les besoins courants :

CatégorieExemples de Techniques
PaquetsPackage management, APT repository
FichiersFile content, File template, Permissions
ServicesService management, Systemd service
UtilisateursUser management, Group management, SSH keys
SécuritéSudo management, SSH configuration, Firewall
WebApache HTTP Server, Nginx
Bases de donnéesPostgreSQL, MySQL
MonitoringNTP, Time settings

Ces Techniques sont visibles dans Configuration Management → Techniques.

Pour des besoins spécifiques, vous pouvez créer vos propres Techniques de deux façons :

1. Via le Technique Editor (recommandé)

L'éditeur visuel intégré permet de créer des Techniques sans écrire de code :

  1. Allez dans Configuration Management → Techniques
  2. Cliquez sur Create
  3. Ajoutez des "blocs" de configuration par glisser-déposer
  4. Définissez les paramètres que l'utilisateur pourra renseigner

2. Via YAML/JSON (avancé)

Pour les utilisateurs expérimentés, les Techniques peuvent être écrites en code et versionnées dans Git :

# Exemple simplifié de Technique en YAML
name: "Mon application métier"
description: "Installe et configure notre app interne"
version: "1.0"
parameters:
- name: APP_VERSION
description: "Version de l'application"
default: "latest"
- name: APP_PORT
description: "Port d'écoute"
default: "8080"
method_calls:
- method: package_present
params:
name: "mon-app=${APP_VERSION}"
- method: service_started
params:
name: "mon-app"

Une Directive est une instance paramétrée d'une Technique. Elle prend une Technique et lui donne des valeurs concrètes.

Cette séparation offre une grande flexibilité. Imaginons que vous gérez :

  • Des serveurs web de production (haute disponibilité)
  • Des serveurs web de staging (configuration de test)

Avec une seule Technique "Apache HTTP Server", vous créez deux Directives :

DirectiveConfiguration
"Apache Production"max_workers: 400, enable_ssl: true, log_level: warn
"Apache Staging"max_workers: 50, enable_ssl: false, log_level: debug
  1. Choisissez une Technique

    Dans Configuration Management → Directives, parcourez les Techniques disponibles.

  2. Créez la Directive

    Cliquez sur une Technique, puis Create Directive.

  3. Remplissez les paramètres

    Chaque paramètre a :

    • Un nom et une description
    • Une valeur par défaut (modifiable)
    • Parfois des options (menu déroulant, checkbox...)
  4. Nommez et documentez

    Donnez un nom explicite qui indique l'usage : "NTP - Serveurs Europe" plutôt que "NTP directive 1".

  5. Sauvegardez

    La Directive existe mais n'est appliquée à personne tant qu'elle n'est pas associée à une Règle.

Ces trois habitudes règlent le même problème : une Directive mal nommée ou non documentée devient illisible dès que votre parc en compte des dizaines. Le premier point est le plus rentable, un nom explicite portant le contexte (rôle, environnement) évite les collisions du type « NTP directive 1 » et rend la liste des Directives directement exploitable, sans avoir à ouvrir chacune pour savoir ce qu'elle fait.

  • Un nom explicite qui indique le contexte : "SSH - Bastion servers", "Users
    • Dev team"
  • Documenter les choix de paramétrage dans la description
  • Versionner les Directives importantes via l'API ou Git

Un Groupe est un ensemble de nodes (machines) partageant des caractéristiques communes. Les Groupes définissent à qui s'appliquent les configurations.

Rudder propose deux types de Groupes :

Groupes dynamiques

Les membres sont définis par des critères. La liste se met à jour automatiquement quand de nouvelles machines correspondent aux critères.

Exemple : "Toutes les machines avec OS = Ubuntu 22.04"

Groupes statiques

Les membres sont définis manuellement. Vous ajoutez/retirez explicitement chaque machine.

Exemple : "Les 3 serveurs du projet Alpha"

Les Groupes dynamiques utilisent des critères basés sur l'inventaire collecté par Rudder :

CatégorieExemples de critères
SystèmeOS, version, architecture, kernel
RéseauHostname, adresse IP, nom de domaine
MatérielRAM, CPU, fabricant, modèle
LogicielPaquets installés, version
CustomVariables définies par vous

Exemples de requêtes dynamiques :

# Tous les serveurs Debian 12
OS Type = Debian AND OS Version = 12
# Machines avec plus de 8 Go de RAM
Physical Memory > 8192
# Serveurs dont le hostname commence par "web-"
Hostname matches ^web-.*
# Machines ayant nginx installé
Software = nginx

Rudder crée automatiquement des Groupes spéciaux :

  • All nodes, Toutes les machines acceptées
  • All Linux nodes, Toutes les machines Linux
  • All Windows nodes, Toutes les machines Windows
  • Rudder server, Le serveur Rudder lui-même

Ces Groupes ne peuvent pas être supprimés mais peuvent être utilisés dans vos Règles.

Organisez vos Groupes en catégories logiques :

Organisation recommandée des Groupes Rudder

Une Règle est le lien entre une Directive et un Groupe. Elle répond à la question : "Appliquer quoi à qui ?"

Le schéma ci-dessous montre les trois éléments qui composent toute Règle : la ou les Directives appliquées, le ou les Groupes ciblés, et le statut qui décide si l'ensemble est actif. Lisez-le de gauche à droite, c'est l'ordre dans lequel vous remplirez le formulaire de création, et retenez que rien ne se produit tant que le statut n'est pas passé sur activé.

Anatomie d'une Règle Rudder : Directives, Groupes et Statut

Une Règle peut inclure :

  • Plusieurs Directives, Pour regrouper des configurations liées
  • Plusieurs Groupes, Pour cibler différents ensembles de machines

Exemple concret :

La Règle "Baseline sécurité" pourrait inclure :

  • Directives : SSH durcissement + Firewall + NTP + Sudo
  • Groupes : Production + Staging
  1. Allez dans Configuration Management → Rules

  2. Cliquez sur Create

  3. Nommez la Règle

    Choisissez un nom descriptif : "Baseline Linux - Production" plutôt que "Rule 1".

  4. Sélectionnez les Directives

    Cochez les Directives à inclure. Vous pouvez en ajouter plusieurs.

  5. Sélectionnez les Groupes

    Cochez les Groupes ciblés. Une machine dans plusieurs Groupes recevra la Directive une seule fois.

  6. Activez la Règle

    Par défaut, les nouvelles Règles sont désactivées. Activez-la quand vous êtes prêt.

  7. Sauvegardez

    Les nodes concernés recevront la configuration à leur prochaine exécution (toutes les 5 minutes par défaut).

Au quotidien, seuls deux états comptent vraiment : Enabled et Disabled, qui décident si la Règle est poussée aux agents ou simplement conservée. Le désactivé est votre interrupteur de sécurité : il neutralise instantanément une Règle sans la supprimer ni perdre son paramétrage, ce qui est précieux quand un déploiement dérape et qu'il faut revenir à l'état antérieur au prochain passage de l'agent.

ÉtatSignification
EnabledLa Règle est active et sera appliquée
DisabledLa Règle existe mais n'est pas appliquée
DraftEn cours d'édition, non sauvegardée

Un concept transversal essentiel dans Rudder est le Policy Mode. Il détermine comment l'agent se comporte face à une non-conformité.

Mode Enforce

L'agent modifie le système si nécessaire pour atteindre l'état souhaité. C'est le mode par défaut.

→ Si nginx n'est pas installé, Rudder l'installe.

Mode Audit

L'agent vérifie l'état du système et rapporte les écarts, sans rien modifier.

→ Si nginx n'est pas installé, Rudder le signale mais ne l'installe pas.

Le mode Audit est précieux dans plusieurs situations :

  • Évaluer l'impact d'une nouvelle politique avant de l'appliquer
  • Auditer un parc existant pour mesurer la conformité actuelle
  • Démontrer la conformité à un auditeur sans risquer de modifier les systèmes
  • Tester une Directive sur un environnement de production sensible

Le mode peut être défini à trois niveaux (du plus global au plus précis) :

NiveauConfigurationHéritage
GlobalSettings → GeneralS'applique partout par défaut
DirectiveDans chaque DirectiveSurcharge le mode global
NodeDans les propriétés du nodeSurcharge tout pour ce node

Règle de priorité : Si un override est autorisé, le mode Audit gagne toujours. Si une Directive est en Enforce mais le node en Audit, le résultat est Audit.

  1. Créez votre Directive en mode Audit

    Configurez le Policy Mode sur "Audit" dans les paramètres de la Directive.

  2. Appliquez et observez

    Déployez la Règle et consultez les rapports de conformité. Les éléments non-conformes apparaissent en orange (audit-non-compliant).

  3. Analysez les écarts

    Vérifiez que les modifications prévues correspondent à vos attentes. Aucun système n'est modifié à ce stade.

  4. Passez en mode Enforce

    Une fois validé, changez le Policy Mode en "Enforce" (ou "Global" si le défaut est Enforce).

  5. Vérifiez les réparations

    Les éléments passent en bleu (repaired) puis en vert (success) une fois conformes.

La même couleur ne veut pas dire la même chose selon le mode, c'est le piège de lecture le plus courant. En Enforce, le bleu signale une réparation effectuée : l'agent a modifié le système. En Audit, ce bleu n'apparaît jamais puisque rien n'est modifié ; un écart y ressort en orange. Avant d'interpréter un rapport, vérifiez donc toujours dans quel Policy Mode tournait le node concerné.

CouleurMode EnforceMode Audit
🟢 VertConforme, rien à faireConforme, rien à signaler
🔵 BleuRéparé (modification appliquée)-
🟠 Orange-Non-conforme (écart détecté)
🔴 RougeErreur (réparation échouée)Erreur (vérification échouée)

Récapitulons avec un exemple complet :

Vous voulez que tous vos serveurs web aient :

  • Le paquet nginx installé
  • Le service nginx démarré
  • Un fichier de configuration standardisé
  1. Technique : Vous utilisez la Technique intégrée "Package management" et "Service management" (ou créez une Technique custom "Nginx standard")

  2. Directive : Vous créez une Directive "Nginx Production" avec :

    • Package : nginx
    • Service : nginx
    • Config : /etc/nginx/nginx.conf avec votre contenu
  3. Groupe : Vous créez un Groupe dynamique "Serveurs web" avec le critère :

    • Hostname matches ^web-.* OU
    • Tag webserver = true
  4. Règle : Vous créez la Règle "Nginx sur serveurs web" qui lie :

    • Directive "Nginx Production"
    • Groupe "Serveurs web"

Une fois la Règle activée, vous n'avez plus rien à faire : la boucle suivante s'exécute d'elle-même, à intervalle régulier. Le point à comprendre est que c'est l'agent qui tire la configuration, node par node, à chaque cycle de cinq minutes par défaut ; le serveur ne pousse rien de façon immédiate. Une modification que vous venez de sauvegarder met donc jusqu'à un cycle complet avant d'atteindre toutes les machines.

  1. Toutes les 5 minutes, chaque agent contacte le serveur
  2. Le serveur calcule les politiques applicables à chaque node
  3. L'agent reçoit les politiques et les applique
  4. L'agent rapporte l'état de conformité (succès, réparation, erreur)

Une Directive seule ne fait rien. C'est juste une configuration "en attente". Il faut créer une Règle pour l'appliquer.

Évitez d'appliquer une Règle au groupe "All nodes" sans réflexion. Testez d'abord sur un petit groupe.

Si deux Directives modifient le même fichier avec des contenus différents, le résultat peut être imprévisible. Planifiez vos configurations pour éviter les chevauchements.

Des critères trop complexes rendent le débogage difficile. Préférez des critères simples et créez plusieurs Groupes si nécessaire.

  1. Technique = Comment faire (le modèle réutilisable)
  2. Directive = Quoi faire exactement (les paramètres concrets)
  3. Groupe = Qui est concerné (ensemble de machines)
  4. Règle = L'assemblage Directive + Groupe
  5. Policy Mode = Audit (vérifier) ou Enforce (corriger)
  6. Les Groupes dynamiques se mettent à jour automatiquement selon les critères
  7. Une Directive sans Règle n'est appliquée nulle part
  8. Commencez en Audit, passez en Enforce une fois validé
  9. Testez toujours sur un petit groupe avant de déployer largement

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