Aller au contenu

États de référence et dérive de configuration : maîtriser le drift

Mise à jour :

Un serveur de production tombe en panne un vendredi soir. L’équipe de garde cherche la cause pendant des heures. Finalement, quelqu’un découvre qu’un paramètre réseau a été modifié « temporairement » il y a trois semaines, sans documentation. Personne ne savait. Le système était censé être identique aux autres, mais il avait dérivé silencieusement.

Ce guide vous explique ce qu’est la dérive de configuration, comment la détecter avant qu’elle ne cause des incidents, et comment l’empêcher de se reproduire.

Un scénario que vous connaissez peut-être

Imaginez cette situation : vous gérez un parc de 50 serveurs web. Tous sont censés être identiques, déployés à partir du même playbook Ansible. Un jour, vous devez migrer vers une nouvelle version de l’application.

Vous lancez la mise à jour. 47 serveurs se mettent à jour sans problème. Trois échouent avec des erreurs incompréhensibles. Après investigation, vous découvrez que :

  • Sur le serveur 23, quelqu’un a modifié manuellement le fichier /etc/hosts pour « corriger un problème de DNS urgent » il y a six mois
  • Sur le serveur 41, un collègue a installé un package de debug qui n’a jamais été retiré et qui entre en conflit avec la nouvelle version
  • Sur le serveur 48, les permissions d’un répertoire ont été changées lors d’un dépannage nocturne, et le script de déploiement n’a plus les droits d’écriture

Trois serveurs, trois dérives différentes, trois heures perdues par serveur. Vous venez de découvrir le coût réel de la dérive de configuration.

Qu’est-ce que la dérive de configuration ?

L’état de référence : votre source de vérité

L’état de référence (baseline en anglais) est l’état validé et documenté d’un système. C’est la définition de « comment ce serveur devrait être configuré ».

Elle inclut généralement :

ComposantExemples d’éléments contrôlés
SystèmeVersion OS, paramètres noyau, utilisateurs
PackagesListe des logiciels installés, versions
ConfigurationFichiers de conf, permissions, services actifs
RéseauInterfaces, routes, firewall, DNS
SécuritéDurcissement, certificats, politiques

L’état de référence peut être :

  • Documenté : wiki, fichiers de référence, CMDB
  • Codifiée : playbooks Ansible, manifests Terraform, Dockerfiles, configurations Rudder
  • Implicite : « c’est comme ça qu’on fait » (dangereux)

La dérive : l’écart silencieux

La dérive de configuration (configuration drift) survient quand l’état réel d’un système s’écarte de son état de référence. C’est la différence entre « ce que le système devrait être » et « ce qu’il est vraiment ».

État attendu (état de référence) - État réel = Dérive

Trois analogies pour bien comprendre

Votre état de référence est l’itinéraire planifié. La dérive, c’est quand vous prenez des détours non prévus. Chaque détour vous éloigne de la route optimale. Sans « recalcul d’itinéraire » (détection), vous pouvez finir complètement perdu.

Un bon GPS vous alerte immédiatement si vous quittez la route. Un bon système de gestion de configuration fait pareil.

Ce que la dérive n’est PAS

Ce n’est PAS de la dérivePourquoi
Un changement planifié et documentéC’est une évolution de l’état de référence
Une mise à jour de sécurité appliquée uniformémentL’état de référence évolue de façon contrôlée
Une différence volontaire entre environnementsDev ≠ Prod par conception
Un bug logicielC’est un défaut, pas un écart de configuration

Pourquoi la dérive est dangereuse

La dérive de configuration peut sembler anodine — après tout, qu’est-ce qu’un petit paramètre modifié ? Pourtant, elle est à l’origine de nombreux incidents majeurs, de failles de sécurité et de problèmes de conformité. Comprendre ses conséquences permet de prendre au sérieux sa prévention.

Les quatre cavaliers de la dérive

ConséquenceCe qui se passeExemple réel
IncidentsComportement imprévisibleServeur 23 différent des autres → plantage lors d’une mise à jour
Failles de sécuritéDurcissement perduEn 2020, Twilio a subi une fuite de données via un bucket S3 dont la config avait dérivé
Non-conformitéÉcart aux politiquesAudit PCI-DSS échoué car des serveurs n’avaient plus les bons paramètres
Temps perduDebug de « snowflakes »Chaque serveur différent = chaque incident unique à investiguer

La spirale de la dette de configuration

La dérive fonctionne comme la dette technique : elle s’accumule avec intérêts. Imaginez une boule de neige qui dévale une pente — plus elle roule, plus elle grossit et plus elle est difficile à arrêter.

Spirale de la dette de configuration : de la dérive initiale à la paralysie, avec le coût de correction qui augmente à chaque étape

  1. Dérive initiale — Une petite modification manuelle « juste pour tester ». Ça semble anodin : « Je corrige vite ce paramètre en SSH, je documenterai plus tard ». Coût de correction à ce stade : quelques minutes.

  2. Accumulation — D’autres modifications s’ajoutent sans documentation. Chaque membre de l’équipe fait « une petite correction ». Ces modifications s’empilent comme des couches de peinture. Coût de correction : quelques heures.

  3. Divergence — Les serveurs « identiques » ne le sont plus. Le serveur de production ne se comporte pas comme celui de test. L’équipe commence à entendre : « Ça marche chez moi mais pas en prod ». Coût de correction : jours de travail.

  4. Snowflake — Chaque serveur devient unique, impossible à reproduire. Le serveur 23 a des configurations que personne ne comprend. On n’ose plus y toucher. Coût de correction : semaines, avec risque d’incident.

  5. Paralysie — L’équipe a peur de toucher quoi que ce soit. Toute mise à jour devient un projet risqué. L’innovation s’arrête. Coût de correction : mois de refonte, souvent après un incident majeur.

Sources et types de dérive

La dérive ne vient pas de nulle part. Elle a toujours une cause — technique ou humaine. Comprendre ses sources est la première étape pour la prévenir efficacement.

Sources et types de dérive : technique (modifications manuelles, patchs, automatisations défaillantes, ressources non gérées) et organisationnelle (processus non respectés, documentation obsolète, silos, turnover)

Dérive technique : les causes opérationnelles

Ces causes sont liées aux outils et aux processus techniques. Elles sont souvent les plus faciles à résoudre car elles relèvent de l’outillage.

SourceComment ça arrivePourquoi c’est dangereux
Modifications manuellesSSH + commandes ad hoc pour « corriger vite »Pas de trace, pas de rollback
Patchs et mises à jourCorrectif appliqué sur certains serveurs seulementParc hétérogène
Automatisations partiellesPlaybook qui échoue à mi-cheminÉtat incohérent
Ressources non géréesCréation cloud via console au lieu d’IaCShadow IT invisible

Exemple concret — Un développeur crée un bucket S3 via la console AWS pour tester quelque chose. Il ne le supprime pas. Le bucket n’existe pas dans Terraform, donc il n’est pas audité. Six mois plus tard, il contient des données sensibles et n’a pas les bonnes politiques de sécurité.

Dérive organisationnelle : les causes humaines

Ces causes sont liées à l’organisation, aux processus et aux personnes. Elles sont souvent plus difficiles à résoudre car elles nécessitent des changements culturels.

SourceComment ça arrivePourquoi c’est dangereux
Processus contournés« Pas le temps pour le change management »Modifications non tracées
Documentation obsolèteL’état de référence « officiel » date de 2022On ne sait plus ce qui est correct
Silos équipesDev, Ops, Sécu travaillent séparémentChacun modifie de son côté
TurnoverL’expert qui savait tout est partiConnaissances perdues

Exemple concret — L’équipe sécurité demande l’ajout de règles firewall. L’équipe ops les applique manuellement « en attendant la prochaine release ». Un an plus tard, ces règles n’existent toujours pas dans le code. Personne ne sait pourquoi elles sont là.

Le cycle de gestion de la dérive

Gérer la dérive n’est pas un projet ponctuel qu’on coche et qu’on oublie. C’est un processus continu, comme la gestion de la dette technique ou la sécurité. Le cycle se répète en permanence : détecter, analyser, corriger, prévenir.

Cycle de gestion de la dérive en 4 étapes : Détecter, Analyser, Corriger, Prévenir

Étape 1 : Détecter — Comparer l’état réel à l’état de référence

La détection est la première ligne de défense. Elle consiste à identifier automatiquement les écarts entre l’état attendu (votre état de référence) et l’état réel des systèmes. Sans détection, vous naviguez à l’aveugle.

Si vous utilisez Terraform, Ansible ou Puppet, ces outils ont des fonctions de détection intégrées :

Terminal window
# Terraform : voir les différences entre état et réel
terraform plan
# Ansible : mode check (dry-run)
ansible-playbook site.yml --check --diff
# Puppet : mode noop
puppet agent --test --noop

Limitation : Ces outils ne voient que ce qu’ils gèrent. Une modification faite en dehors de l’outil reste invisible.

Étape 2 : Analyser — Comprendre avant de corriger

Ne corrigez jamais une dérive à l’aveugle ! Chaque dérive a une cause, et cette cause peut révéler un problème plus profond. Parfois, c’est l’état de référence lui-même qui doit évoluer.

Question à poserPourquoi c’est important
Qui a fait la modification ?Identifier si c’est un problème de processus ou de compétence
Quand a-t-elle eu lieu ?Corréler avec des incidents ou des déploiements
Pourquoi était-elle nécessaire ?Peut révéler un problème que l’état de référence ne résout pas
Quel impact si on corrige ?Éviter de casser quelque chose en « réparant »

Exemple : Vous détectez qu’un serveur a une règle firewall non standard. Avant de la supprimer, vérifiez qu’elle n’a pas été ajoutée pour bloquer une attaque en cours. Si c’est le cas, la bonne action est d’intégrer cette règle à l’état de référence, pas de la supprimer.

Étape 3 : Corriger — Rétablir ou faire évoluer

Une fois la cause comprise, deux choix s’offrent à vous. Le bon choix dépend de la nature de la dérive : était-ce une erreur ou une amélioration légitime ?

OptionQuand l’utiliserComment
Rétablir l’état de référenceLa dérive était une erreurRéappliquer le playbook, terraform apply
Mettre à jour l’état de référenceLa dérive était une améliorationModifier l’IaC puis redéployer

Attention : Ne corrigez jamais en « bricolant » à la main. Vous ne feriez que créer une nouvelle dérive — un cercle vicieux. Toute correction doit passer par l’outil de gestion de configuration.

Terminal window
# ❌ Mauvais : correction manuelle
sudo systemctl enable nginx
# ✅ Bon : correction via l'outil (Ansible ici)
ansible-playbook -l serveur23 site.yml --tags nginx

Étape 4 : Prévenir — Empêcher la récidive

La meilleure dérive est celle qui ne se produit pas. La prévention est l’étape la plus importante — elle transforme un cycle de « pompier » en approche proactive.

  1. Automatiser tout changement

    Si une modification doit être faite, elle doit être codifiée (IaC, playbook) et versionnée. Jamais de SSH pour « corriger vite ».

  2. Détecter en continu

    Exécuter terraform plan ou un scan de drift quotidiennement, pas juste avant les déploiements. Alerter sur tout écart.

  3. Bloquer les modifications manuelles

    Restreindre les accès SSH, utiliser des politiques IAM qui empêchent les modifications console sur les ressources gérées par IaC.

  4. Documenter et former

    S’assurer que tout le monde comprend pourquoi la modification manuelle est interdite et comment faire correctement.

  5. Tracer et auditer

    Logs d’accès, audit trail cloud. Si quelqu’un dévie, vous devez pouvoir le savoir.

Anti-patterns et bonnes pratiques

Il est facile de tomber dans certains pièges quand on gère la configuration. Cette section présente les erreurs les plus courantes et comment les éviter.

Anti-pattern vs Bonne pratique : modification manuelle vs IaC, documentation manquante vs automatique, dérive silencieuse vs détection, incident vs cohérence

Les 10 erreurs les plus courantes

Ces anti-patterns sont observés dans la plupart des équipes. En les reconnaissant, vous pouvez les éviter :

Anti-patternPourquoi c’est un problèmeQue faire à la place
Modifications manuelles non documentéesDérive invisible, pas de rollbackTout passer par IaC
État de référence « implicite »Personne ne sait ce qui est correctDocumenter et versionner
Détection uniquement avant déploiementLa dérive s’accumule entre-tempsScan quotidien automatisé
Correction sans analyseRisque de casser ce qui marchaitComprendre avant d’agir
Documentation dans un wiki à partElle devient obsolèteÉtat de référence = code versionné
Accès SSH/console pour tout le mondeTentation de « corriger vite »Principe du moindre privilège
Pas de responsable identifié« C’est le problème de qui ? »Owner par zone/service
État de référence trop complexeImpossible à maintenirSimplifier, modulariser
Ignorer les alertes de drift« C’est normal, on verra plus tard »SLA de correction (ex: 48h)
Corriger la dérive manuellementNouvelle dérive crééeCorrection via l’outil

Le « Fix Forward » ou « Fix Backward » ?

Face à une dérive, deux philosophies s’affrontent. Le choix entre les deux dépend d’une question simple : la dérive était-elle une erreur ou une amélioration ?

Arbre de décision : Fix Forward ou Fix Backward selon que la dérive était intentionnelle ou non

ApprochePrincipeQuand l’utiliser
Fix BackwardRétablir l’état précédent (rollback)La dérive a causé un problème
Fix ForwardIntégrer la modification à l’état de référenceLa dérive était une amélioration

Règle pratique : si la dérive était intentionnelle et bénéfique, fix forward. Si elle était accidentelle ou problématique, fix backward.

Outils de détection par environnement

Infrastructure cloud (IaC)

OutilCloudPoints fortsLimites
terraform planMultiGratuit, intégréNe voit que le managed
driftctlAWS, Azure, GCPOpen source, détecte les unmanagedProjet archivé (intégré à Snyk)
Snyk IaCMultiCommercial, UI, couverture totalePayant
SpaceliftMultiDrift en temps réel, policiesPayant
FireflyMultiDécouverte + codification autoPayant

Serveurs Linux

OutilTypePoints forts
AIDEDétection changements fichiersLéger, open source
TripwireDétection changements fichiersRéférence historique
OpenSCAPConformité SCAP/CISÉtats de référence standards
LynisAudit sécuritéFacile à utiliser
OSSECHIDS avec détection de changementsTemps réel
** Rudder**Gestion de configuration + driftInterface web, reporting

Orchestration

OutilCapacité
Ansible--check --diff pour voir les écarts
PuppetAgent détecte et corrige automatiquement
ChefInSpec pour audit de conformité
SaltStackMode test=True pour dry-run

Mesurer la dérive

On ne peut pas améliorer ce qu’on ne mesure pas. Mesurer la dérive permet de savoir si la situation s’améliore ou se dégrade, et de justifier les investissements en outillage et formation.

Métriques à suivre

Ces indicateurs vous donnent une vision claire de votre « santé configuration » :

MétriqueCe qu’elle mesureObjectifPourquoi c’est important
Taux de conformité% de ressources sans dérive> 95%L’indicateur principal : combien de vos systèmes sont conformes
MTTD (Mean Time To Detect)Temps entre dérive et détection< 24hPlus vite vous détectez, moins la dérive s’accumule
MTTR (Mean Time To Remediate)Temps entre détection et correction< 48hMesure votre capacité à réagir
Ressources non géréesNombre de ressources hors IaCTendre vers 0Le « shadow IT » que vous ne voyez pas
RécurrenceDérives qui reviennent après correction0Si elle revient, vous n’avez pas traité la cause racine

Dashboard de suivi

Un bon dashboard de gestion de la dérive donne une vision d’ensemble en un coup d’œil. Il doit répondre à ces questions :

  • Quelle est ma situation globale ? (taux de conformité)
  • Où sont mes problèmes ? (environnements, systèmes concernés)
  • Quelle est ma tendance ? (amélioration ou dégradation)
  • Quelle est mon urgence ? (dérives critiques à traiter)

Exemple de dashboard de gestion de la dérive : KPIs (conformité, MTTD, MTTR, ressources non gérées), courbe d'évolution, liste des dérives actives par criticité, et état par environnement

Ce type de dashboard peut être implémenté avec des outils comme Grafana, Datadog ou un simple tableau de bord interne. L’important est qu’il soit visible par toute l’équipe et mis à jour automatiquement.

Checklists opérationnelles

Checklist « Minimum viable »

Pour une équipe qui démarre la gestion de la dérive :

  1. État de référence documenté

    Au minimum, un fichier décrivant la configuration attendue des serveurs critiques. Idéalement, du code IaC.

  2. Détection hebdomadaire

    Exécuter un terraform plan ou un audit AIDE/OpenSCAP une fois par semaine minimum.

  3. Processus de correction

    Savoir qui est responsable de corriger et sous quel délai.

  4. Historique des écarts

    Conserver une trace de chaque dérive détectée et de sa correction.

  5. Formation de base

    L’équipe sait pourquoi les modifications manuelles sont interdites.

Checklist « Organisation mature »

Pour une équipe qui veut industrialiser :

  1. IaC à 100%

    Toute l’infrastructure est codifiée. Aucune ressource manuelle.

  2. Détection continue

    Scan de drift automatisé quotidien, alertes en temps réel.

  3. Blocage des modifications manuelles

    Policies IAM, accès SSH restreints, audit trail.

  4. SLA de correction

    Critique : 4h. Haute : 24h. Moyenne : 48h. Basse : 1 semaine.

  5. Métriques et reporting

    Dashboard de conformité, rapports hebdomadaires au management.

  6. Revue post-incident

    Chaque dérive ayant causé un incident fait l’objet d’un postmortem.

  7. Amélioration continue

    Rétrospectives régulières sur la gestion de la dérive.

À retenir

  1. L’état de référence est votre source de vérité

    Sans état de référence clair, vous ne pouvez pas détecter la dérive. Documentez et versionnez l’état attendu de vos systèmes.

  2. La dérive est inévitable

    Elle arrivera. Le problème n’est pas d’en avoir, c’est de ne pas la détecter. Automatisez la détection.

  3. Détecter ≠ Corriger aveuglément

    Chaque dérive a une cause. Comprenez-la avant d’agir. Parfois, c’est l’état de référence qu’il faut mettre à jour.

  4. Prévenir vaut mieux que guérir

    Automatisez les changements, bloquez les modifications manuelles, formez les équipes. Une dérive évitée coûte moins cher qu’une dérive corrigée.

  5. Infrastructure as Code est votre meilleur allié

    Un système géré par IaC est plus facile à auditer, corriger et reproduire qu’un système configuré manuellement.

  6. Mesurez pour progresser

    Taux de conformité, MTTD, MTTR. Ce qui se mesure s’améliore.

Liens utiles

Ces guides complètent votre compréhension de la gestion de configuration :

Références externes

Articles fondateurs

Guides pratiques

Standards et frameworks

Outils open source

  • driftctl — Détection de drift pour Terraform (maintenu par Snyk)
  • AIDE — Advanced Intrusion Detection Environment
  • OpenSCAP — Audit de conformité contre états de référence SCAP
  • Lynis — Outil d’audit de sécurité Linux