Etude de cas — Automatisation & securite
Patcher 21 serveurs hybrides chaque semaine sans y penser : Ansible, tiering et supervision de bout en bout
Comment j'ai industrialise la gestion des mises a jour de securite d'un parc hybride Windows/Linux dans Azure — de l'inventaire raisonne a l'automatisation hebdomadaire planifiee, avec supervision complete et modele de securite par tiering.
- 21
- serveurs (14 Windows, 7 Linux) patches chaque semaine
- 0
- incident d'annuaire : DC patches un par un, replication verifiee
- 1
- email d'alerte, uniquement quand quelque chose ne va pas
- 365 j
- de metriques historisees pour chaque campagne
Le contexte
Un organisme de formation professionnelle multi-sites heberge dans Azure un parc hybride d'une vingtaine de serveurs : 14 Windows Server (controleurs de domaine, infrastructure, applications metier, supervision) et 7 Linux Ubuntu (supervision, GitLab, syslog, ITSM, proxys de sauvegarde). Les mises a jour de securite etaient appliquees manuellement, sans tracabilite ni garantie de couverture.
Objectif : un processus automatise, reproductible et observable — qui respecte les contraintes fortes du parc : controleurs de domaine a patcher un par un, ordre BDD-avant-App pour l'application metier, CA racine hors ligne a ne jamais demarrer, fenetres de sauvegarde a eviter.
La demarche
- 01
Inventaire raisonne du parc, exclusions comprises
J'ai recense l'ensemble des serveurs repartis sur plusieurs sous-reseaux Azure, avec ouverture NSG au strict necessaire : SSH et WinRM uniquement depuis le controleur Ansible, vers les seuls sous-reseaux concernes. J'ai exclu explicitement du perimetre : les equipements de securite reseau du constructeur (firmware gere via leur console dediee), la CA racine de la PKI interne — qui doit rester hors ligne, un patching automatise la demarrerait — et une VM metier via --limit. Savoir ce qu'on ne patche pas est aussi important que ce qu'on patche.
- 02
Installation non intrusive du controleur
Ansible installe dans un virtualenv Python isole sur un serveur mutualise qui heberge deja la pile de supervision (Prometheus, Grafana, InfluxDB, Nginx, PostgreSQL) — sans toucher au Python systeme ni aux services existants. Wrappers dans le PATH, arborescence propre : inventaire, group_vars, playbooks, scripts, logs, backups.
- 03
Modele de securite avant le premier playbook
Application du modele de tiering Microsoft : compte de service Tier 0 reserve aux controleurs de domaine et serveurs sensibles, compte Tier 1 pour le reste, comptes locaux dedies pour les serveurs hors domaine — chacun avec sa politique de mot de passe (PSO) dediee. Tous les secrets chiffres dans un vault Ansible AES256, un mot de passe become individuel par serveur Linux, gestion des caracteres speciaux via le tag YAML !unsafe. Cle SSH Ed25519, controleur sans IP publique.
- 04
Orchestration phasee avec garde-fous
Un playbook maitre execute cinq phases dans un ordre impose : Linux d'abord (par moities), puis les controleurs de domaine strictement un par un (serial: 1) avec verification de la replication AD, des roles FSMO et des services NTDS/DNS avant et apres chaque patch, puis l'infrastructure Windows, puis le couple metier dans l'ordre BDD-avant-App, et enfin les serveurs de supervision et de sauvegarde en dernier — pour qu'ils observent tout le reste. Chaque phase verifie l'espace disque et les services critiques avant et apres, avec reboot conditionnel uniquement si le systeme le demande.
- 05
Culture du dry-run
Aucune execution reelle sans --check prealable. Le mode check a d'ailleurs revele un piege documente : les taches shell y sont skippees, ce qui rendait certaines assertions dependantes indefinies — corrige par des gardes when: variable is defined. Les problemes rencontres sont consignes dans la documentation d'exploitation avec leur solution : doublon de vault et sa regle de precedence, serveur au nom trompeur qui n'est pas un controleur de domaine malgre les apparences, procedure de deverrouillage de compte.
- 06
Automatisation planifiee via Semaphore UI
Interface web au-dessus d'Ansible (Semaphore, adosse a PostgreSQL, derriere Nginx) avec des templates de taches distincts dry-run / execution reelle, et une planification cron hebdomadaire : Linux puis Windows chaque lundi soir, hors fenetres de sauvegarde. Subtilite de production documentee : le planificateur fonctionne en UTC, d'ou un decalage a anticiper au passage a l'heure d'ete.
- 07
Chaine de supervision de bout en bout
Un script Python (stdlib uniquement, zero dependance) interroge l'API de Semaphore apres chaque campagne, nettoie les codes couleur ANSI de la sortie Ansible, parse le PLAY RECAP par serveur et pousse les metriques dans InfluxDB v2 au format line protocol : statut, taches ok/changed/failed, paquets de securite disponibles, reboots, plus un resume global par execution (retention 365 jours). Un dashboard Grafana restitue le tout : statut global de la derniere campagne, serveurs en erreur avec seuils de couleur, detail par serveur, historique temporel.
- 08
Alerting automatique en boucle fermee
Regle d'alerte Grafana sur la metrique « serveurs en echec » : au moindre echec de patching, un email part automatiquement vers la boite de l'equipe exploitation via le relais SMTP de l'organisation, avec resolution automatique quand la metrique revient a zero. Personne n'a besoin d'aller verifier que le patching du lundi s'est bien passe — le systeme ne se manifeste que quand quelque chose ne va pas.
L'architecture
Les resultats
- 21 serveurs (14 Windows, 7 Linux) patches automatiquement chaque semaine, en une fenetre planifiee, sans intervention manuelle
- Controleurs de domaine patches un par un avec replication AD verifiee avant et apres — zero incident d'annuaire
- Contraintes metier respectees par construction : ordre BDD-avant-App, supervision patchee en dernier, exclusions explicites (CA racine hors ligne preservee)
- Une chaine d'observabilite complete : chaque campagne laisse des metriques historisees, un dashboard a jour et une alerte email uniquement en cas d'echec
- Une documentation d'exploitation versionnee, incluant les pieges rencontres et leurs solutions — le processus survit a son auteur
- Un socle reutilisable : ajouter un serveur au perimetre se resume a une entree d'inventaire, un secret dans le vault et un test unitaire
Competences mises en oeuvre
- Ansible (playbooks multi-OS, vault AES256, serial, tags, dry-run)
- WinRM / SSH
- Windows Server & Active Directory (tiering T0/T1, PSO, replication, FSMO)
- Linux/Ubuntu (apt, systemd, virtualenv)
- Azure (NSG, segmentation reseau)
- Semaphore UI (templates, planification cron)
- Python (API REST, parsing, line protocol InfluxDB)
- InfluxDB v2 & Grafana (dashboard, alerting, SMTP)
- Gestion des secrets (vault, comptes de service dedies, Ed25519)
- Methodologie (phases ordonnees, exclusions raisonnees, dry-run systematique, documentation des incidents)
Vos mises a jour meritent mieux qu'un lundi soir manuel
Inventaire, automatisation, tiering et supervision en boucle fermee : parlons de votre contexte.