Aller au contenu

Drift détection

Détecter et corriger les ecarts entre l'état desire de l'infrastructure et son état réel.


Qu'est-ce que le drift

Le drift (ou dérivé) est l'ecart entre l'état desire de l'infrastructure — tel que déclaré dans le code IaC — et l'état réel observe sur les systèmes.

Causes principales

  • Intervention manuelle : un opérateur modifie une ressource directement via la console cloud ou SSH pour résoudre un incident rapide
  • Changements hors-bande : une équipe tierce provisionne une ressource sans passer par le code IaC
  • Changements automatiques : le provider cloud met à jour une propriété (AMI, certificat, tag automatique)
  • Échec partiel : un apply échoué a mi-chemin, laissant certaines ressources dans un état intermédiaire

Conséquences

  • Sécurité : un port ouvert manuellement n'est pas trace, pas revue, potentiellement pas ferme
  • Reproductibilite : l'infrastructure ne peut plus être redeployee identiquement depuis le code
  • Incidents : une configuration modifiée manuellement peut causer des pannes inexplicables

Détection du drift

Terraform plan en CI

La méthode la plus simple : exécuter terraform plan régulièrement (en dehors des deployments) et alerter si le plan n'est pas vide.

graph LR
    A["Cron ou push Git"] --> B["terraform plan"]
    B --> C{"Changements<br/>detectes ?"}
    C -->|"Non"| D["OK — aucun drift"]
    C -->|"Oui"| E["Alerte : drift detecte"]
    E --> F["Ticket automatique<br/>ou notification"]
    F --> G["Investigation<br/>et reconciliation"]

Ansible check mode

ansible-playbook --check exécuté le playbook en mode simulation et rapporte les changements qu'il appliquerait. Combine avec --diff, il affiche les différences de fichiers de configuration.

driftctl

Outil dédié à la détection de drift : il compare l'ensemble des ressources réelles du cloud avec ce qui est déclaré dans le state Terraform, y compris les ressources non gérées par Terraform.

Drift détecté = opportunité d'amélioration

Un drift n'est pas forcement une catastrophe. C'est un signal : quelqu'un a eu besoin de faire un changement hors du processus normal. Analysez pourquoi — le processus IaC etait trop lent ? Pas adapté ? Le drift révélé des lacunes dans votre workflow.


Reconciliation

Re-apply automatique vs alerte humaine

Stratégie Avantages Risques Cas d'usage
Re-apply automatique Convergence immédiate, zero intervention Ecrase des changements intentionnels Environnements de dev/test
Alerte + validation humaine Contrôle, audit, prise en compte du contexte Drift persiste jusqu'à intervention Production
Alerte + ticket Traçabilité complète Peut s'accumuler si negligee Toute criticite

Processus de reconciliation recommande

  1. Détecter le drift (CI planifie ou trigger sur événement)
  2. Notifier l'équipe avec le détail du diff
  3. Évaluer : le changement etait-il intentionnel ?
    • Si oui : mettre à jour le code IaC pour refléter la réalité
    • Si non : re-appliquer le code IaC pour revenir à l'état desire
  4. Documenter la cause racine pour éviter la récurrence

Alerting sur le drift

Signaux a monitorer

  • terraform plan avec output non vide en dehors d'un cycle de déploiement
  • Resources cloud sans tag managed-by: terraform (ressources non gérées)
  • Modifications sur des ressources sensibles : security groups, IAM policies, pare-feu

Intégration avec les outils de notification

Le plan Terraform peut être parse pour extraire le nombre d'ajouts/modifications/destructions et envoyer une notification enrichie vers Slack, PagerDuty ou un système de ticketing.

Ne pas ignorer le drift en production

Un drift non traite s'accumule. Après quelques semaines, le code IaC ne reflete plus du tout la réalité et l'outil devient inutile. Traitez chaque drift détecté dans les 48h — même si la résolution est d'updater le code pour accepter le changement.


Outils

Outil Description Lien
terraform plan Détection native de drift via comparaison state/API Inclus avec Terraform/OpenTofu
driftctl Détection étendue incluant les ressources hors-state driftctl.com
Ansible --check Détection de drift pour la configuration système Inclus avec Ansible
config-lint Validation de conformité des fichiers de config github.com/stelligent/config-lint