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¶
- Détecter le drift (CI planifie ou trigger sur événement)
- Notifier l'équipe avec le détail du diff
- É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
- Documenter la cause racine pour éviter la récurrence
Alerting sur le drift¶
Signaux a monitorer¶
terraform planavec 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 |