Aller au contenu

Introduction à Rudder

Mise à jour :

logo rudder

Dans ce premier tutoriel, nous verrons comment installer un serveur rudder localement sur votre machine en utilisant une stack Vagrant. Nous verrons aussi comment configurer plusieurs nodes.

Présentation de Rudder

Rudder est un logiciel open source de gestion de configuration. Il se veut simple d’utilisation en proposant une interface utilisateur écrite en scala. Rudder, contrairement à Ansible, s’appuie sur des agents légers installés sur chacun des nodes pour déployer les configurations.

Le serveur RUDDER est appelé le master et les clients les nodes. Sur le master les configuration sont déclarées et ce sont les agents tournant sur les nodes qui se charge de les appliquer. Dans le cas où la configuration décrite n’est pas celle présente sur le node, l’agent appliquera les changements nécessaires pour la respecter en utilisant CFEngine.

Rudder prend en charge des nodes provisionnés avec la plupart des distributions Linux. Windows Server, Solaris et AIX sont également supportés via une souscription.

Les configurations permettent :

  • d’installer des packages en utilisant les gestionnaires de packages des OS cibles.
  • de configurer les paramètres et services tournant sur les nodes.
  • de créer et maintenir des comptes et les groupes d’utilisateurs.
  • de construire un système durci en configurant puis en contrôlant que les règles de sécurité sont toujours appliquées.
  • d’appliquer des configurations aux middlewares en utilisant des templates.

Rudder peut être étendu via des plugins. On retrouve :

  • Un système de gestion d’application de patchs OS.
  • Des systèmes de contrôle de compliance ISO 27001, PCI-DSS, NIST
  • Openscap, que je vous ai déjà présenté avec son utilisation pour développer des rôles Ansible proposant des options pour durcir les systèmes d’exploitation
  • CIS, un autre système d’audit de sécurité
  • Gestion des bastions Wallix
  • Gestion de Vault pour le stockage des secrets
  • Authentification
  • Zabbix, Centreon

Certains de ces plugins sont gratuits et d’autres sont propriétaires et nécessitent une licence.

Notions importantes

Avant de commencer à utiliser Rudder, il est important de mettre en place son vocabulaire technique.

rudder concept

Techniques

Les Techniques sont les squelettes de configuration, adapté à une fonction ou à un service particulier (par ex. Configuration du DNS). Ce squelette comprend la logique de configuration pour cette fonction ou ce service et peut être défini selon une liste de variables (dans le même exemple: adresses IP des serveurs DNS, la zone de recherche par défaut, etc)

La bibliothèque standard de Rudder ne fournit que les techniques les plus courantes. Vous pouvez créer de nouvelles techniques avec l’Éditeur de Technique.

Directives

Les directives sont les instances d’une technique qui permet de définir des valeurs aux paramètres de cette technique. Chaque directive peut avoir un nom unique. Une directive doit être complétée par une description et les valeurs pour les paramètres définies dans la technique.

Groupe de nodes

Il est possible de créer un groupe de nœuds basé sur des critères de recherche pour faciliter l’attribution Règles de gestion de la configuration. Par exemple : un groupe par version de système d’exploitation, un groupe par environnement, un groupe par fonction, etc

Rules

Les rules permettent de définir l’application d’une ou plusieurs directives à un groupe de nœuds.

Installation de Rudder

Comme dit précédemment, je vais l’installer sur ma machine de développement en utilisant Vagrant et le provider libvirt. Vous pouvez utiliser le Vagrantfile fourni par l’éditeur qui lui utilise le provider Virtualbox.

Mon vagrantfile :

# -*- mode: ruby -*-
# vi: set ft=ruby :
ENV['VAGRANT_NO_PARALLEL'] = 'yes'
nb_nodes = 3
Vagrant.configure("2") do |config|
config.vm.synced_folder '.', '/vagrant', disabled: true
config.hostmanager.enabled = true
config.hostmanager.manage_host = true
config.vm.define "server" do |server|
server.vm.box = "generic/ubuntu2204"
server.vm.provider :libvirt do |lv|
lv.memory = 2048
lv.cpus = 2
lv.management_network_name = 'my_network'
lv.management_network_address = '192.168.3.0/24'
end
server.vm.provision :shell, :inline => "apt update"
server.vm.provision :shell, :path => "https://repository.rudder.io/tools/rudder-setup",
:args => ["setup-server", "latest"],
:env => {"ADMIN_USER" => "admin", "ADMIN_PASSWORD" => "admin"}
server.vm.hostname = "server.rudder.local"
server.vm.network :forwarded_port, guest: 443, host: 8081
end
for i in 1..nb_nodes do
config.vm.define "node#{i}" do |node|
node.vm.box = "generic/ubuntu2204"
node.vm.provider :libvirt do |lv|
lv.memory = 1024
lv.management_network_name = 'my_network'
lv.management_network_address = '192.168.3.0/24'
end
node.vm.provision :shell, :inline => "apt update"
node.vm.provision :shell, :path => "https://repository.rudder.io/tools/rudder-setup",
:args => ["setup-agent", "latest", "server.rudder.local"]
node.vm.provision :shell, :inline => "echo 'SUCCESS: You can now access the Rudder web interface on https://localhost:8081/ with admin/admin credentials'"
node.vm.hostname = "node#{i}.rudder.local"
end
end
end

Ce vagrantfile provisionne un master et 3 nodes. Si vous voulez moins ou plus de nodes, il suffit de changer la variable nb_nodes.

Allez, on provisionne :

Terminal window
vagrant up

Au bout de 2-3 minutes l’application est disponible à l’adresse https://localhost:8081

Utilisation de Rudder

Nous allons voir comment prendre en main rapidement Rudder.

Ligne de commande rudder.

Sur les nodes et le master, vous avez à votre disposition une CLI (utilitaire de ligne de commande) qui permet de lancer un certain nombre d’actions comme :

  • mettre à jour l’inventaire des nodes, récupère l’ensemble des informations des nodes : caractéristiques techniques, disques, packages, services, OS, etc
  • d’obtenir des informations sur un node

L’utilisation de la CLI permet de lancer plus rapidement des actions que via l’interface. Cette CLI doit être lancé avec le compte root.

Terminal window
root@node1:~# rudder agent info
General
Hostname: node1.rudder.local
UUID: c3b662fb-5a63-4733-b142-7dcd62c76bb0
Policy server: server.rudder.local
Role: node
Version: 7.2.4
Policies
Status: enabled
Report mode: full-compliance
Run interval: 5 min
Forced audit mode: no
Configuration id: 20230212-125729-9aa773d3
Policy updated: 2023-02-12 13:22:51
Inventory sent: 2023-02-11 13:30:59
Key/Certificate
Key hash: MD5=3fbcf20c30626b76a3baadbda65e28f7
Key hash: sha256//Gwq1jftVAVu5+94nohYNAHjdMiTBNKo38/3vHtMYP+0=
Cert. fingerprint: 14:9E:9A:51:40:38:5A:0A:F3:AA:79:C0:94:E7:4A:B0:35:30:DA:79
Key pinning: full
Cert. creation: 2023-02-11
Cert. expiration: 2033-02-08

Vous pouvez obtenir plus d’infos en utilisant l’option help.

Terminal window
rudder help
Usage: rudder help
rudder agent <command> [parameters ...]
rudder directive <command> [parameters ...]
rudder relay <command> [parameters ...]
rudder remote <command> [parameters ...]
rudder server <command> [parameters ...]
This is rudder generic command line interface.
help: this help
agent: rudder agent related commands
directive: rudder directive related commands
relay: rudder relay related commands
remote: rudder remote related commands
server: rudder server related commands

Prise en main de l’interface de Rudder

rudder ui

L’interface est vraiment bien faite et une fois les concepts compris (voir ci-dessus) vous devriez vous en sortir.

Ajout d’un node

Dans notre cas nos nodes sont déjà déctectés puisque vagrant s’est chargé de les déclarer via l’outil setup. Mais il faut les accepter et pour cela, il faut se rendre dans le menu pending nodes.

rudder ajout node

Cochez-les nodes et acceptez-les.

Création d’un groupe

Nous allons créer un groupe dynamique Ubuntu 22.04. Allez dans le menu groups et cliquez sur [Create].

rudder group

Saisissez les informations de nom et une description, puis cliquez sur [Create]. On peut ensuite ajouter des critères pour qu’il n’accepte que les nodes tournant sous Ubuntu 22.04.

rudder group

Rentrez les critères comme dans l’image ci-dessus. Cliquez sur [Search], vous devriez voir apparaître nos 3 nodes.

Création d’une directive

Nous allons créer une directive package installant openscap sur les nodes ubuntu 22.04. Allez dans le menu directives et cliquez package dans la liste des techniques cliquez packages puis [Create]

rudder group

Dans les parmètres, complétez nom avec openscap et dans les packages entrez libopenscap8 python3-openscap. Finissez par [Save].

Création d’une rules

Nous allons créer une | qui installe le package openscap sur le group ubuntu 22.04. Allez dans le menu rules, puis cliquez sur [Create] et dans la partie directive sélection package OpenScap et dans group Ubuntu 22.04 et saisissez le nom Ubuntu 22.04 OpenScap. Finissez par [Save]

rudder group

Application des rules

Il existe deux méthodes :

  • par la CLI depuis le node server : rudder remote run node2.rudder.local.
Terminal window
Start execution with config [20230212-142437-25657aa8]
Hostname M| State Technique Component Key Message
192.168.3.75 E| compliant Common ncf Initialization Configuration library initialization was correct
192.168.3.75 E| repaired Common Update Policy or configuration library were updated
192.168.3.75 E| compliant Common Security parameters The internal environment security is acceptable
192.168.3.75 E| compliant Common CRON Daemon CRON is correctly running
192.168.3.75 E| compliant Common Log system for reports Reports forwarding to policy server was correct
192.168.3.75 E| compliant Inventory Inventory Next inventory scheduled between 00:00 and 06:00
192.168.3.75 E| repaired packageManagement Package python3-openscap Presence of package python3-openscap in any version was repaired
192.168.3.75 E| compliant packageManagement Package libopenscap8 Presence of package libopenscap8 in any version was correct
192.168.3.75 E| n/a packageManagement Post-modification script python3-openscap No post-modification script was defined
192.168.3.75 E| n/a packageManagement Post-modification script libopenscap8 No post-modification script was defined
192.168.3.75 E| n/a Common Monitoring No Rudder monitoring information to share with the server
## Summary #####################################################################
11 components verified in 5 directives
=> 11 components in Enforce mode
-> 6 compliant
-> 2 repaired
-> 3 not-applicable
Execution time: 22.22s
################################################################################
  • par l’interface en allant dans nodes / Compliance reports et cliquez sur Trigger Agent.

Normalement les packages vont s’installer et dans le rapport de compliance, vous devriez voir que tout s’est passé comme attendu.

rudder group

Conclusion

Rudder est un outil de gestion de configuration plutôt convivial une fois les concepts compris. Il est clair que cela prend un peu plus de temps que via l’utilisation d’un DSL comme avec puppet ou ansible. Mais ne connaissant pas encore totalement le produit, il existe peut-être des moyens plus rapides pour créer tous les objets de l’interface.

Rudder est un système ouvert et par exemple, il fournit une collection Ansible permettant de le piloter et de récupérer l’inventaire.

Plus d’infos

Sites

Vidéos