Séance 2 : Documentation technique, runbooks et CMDB
Introduction (10 min)
La documentation réseau d'InnovatTech n'a pas été mise à jour depuis trois ans : lors d'une panne à 3h du matin, le technicien remplaçant a passé quatre heures à retrouver l'adresse IP du serveur critique, retardant la résolution et augmentant l'impact métier. Les runbooks, la CMDB et une documentation claire au format Markdown rendent les interventions plus rapides et moins anxiogènes. Cette séance explique comment rédiger des runbooks actionnables, structurer la documentation en Markdown, versionner avec git et maintenir une CMDB exploitable.
À l'issue de cette séance, vous serez capable de :
- Rédiger un runbook opérationnel et vérifiable pour une tâche courante (ajout d'utilisateur AD).
- Utiliser Markdown (titres, tableaux, blocs de code, mermaid) et organiser un dépôt de documentation versionné avec git.
- Alimenter et maintenir une CMDB basique et rédiger un post-mortem structuré.
1. Runbooks — structure et exemple complet (80 min)
Un runbook doit permettre à un technicien formé (N1/N2) d'exécuter une opération de bout en bout sans interprétation supplémentaire. Structure standard :
- Titre & service concerné
- RTO / RPO (si applicable)
- Prérequis : accès / outils / droits
- Procédure numérotée avec commandes exactes
- Vérifications attendues (sorties et états attendus)
- Procédure de rollback
- Contacts
Runbook complet : « Ajout utilisateur AD InnovatTech »
| Service concerné | Annuaire Active Directory — win-srv01 |
|---|---|
| RTO | 30 minutes (temps attendu pour création et vérifications) |
| RPO | 0 (pas de perte de données acceptable) |
Prérequis
- Compte avec droits de délégation création utilisateurs (ou Domain Admin si nécessaire).
- Module PowerShell ActiveDirectory disponible (Windows Server 2022 ou workstation RSAT).
- Accès réseau au DC
win-srv01(192.168.10.5). - Liste des groupes d'appartenance attendus (ex : « VPN Users », « Employees »).
- Mot de passe initial conforme à la politique (ex :
InitP@ssw0rd!— changer à la première connexion).
# Vérifier que le module AD est disponible
Import-Module ActiveDirectory
Get-Module ActiveDirectory -ListAvailable
Procédure pas-à-pas (15 étapes)
- Se connecter au poste d'administration avec les droits requis :
# Ouvrir une session distante (si WinRM configuré) Enter-PSSession -ComputerName win-srv01 -Credential INNOVATTECH\admin - Vérifier la connectivité avec le contrôleur AD :
Attendu : réponses ICMP sans perte.Test-Connection -ComputerName win-srv01 -Count 2 - Vérifier qu'un compte identique n'existe pas déjà :
Si la commande retourne un objet, interrompre et contacter le demandeur.Get-ADUser -Filter "SamAccountName -eq 'jdoe'" -ErrorAction SilentlyContinue - Créer la variable SecureString pour le mot de passe :
$password = ConvertTo-SecureString 'InitP@ssw0rd!' -AsPlainText -Force - Créer l'utilisateur AD avec les attributs principaux :
Remplacer les valeurs par celles du formulaire de création.New-ADUser -Name "John Doe" ` -GivenName "John" -Surname "Doe" ` -SamAccountName "jdoe" ` -UserPrincipalName "jdoe@innovattech.local" ` -Path "OU=Users,DC=innovattech,DC=local" ` -AccountPassword $password ` -Enabled $true -ChangePasswordAtLogon $true -PassThru - Compléter les attributs secondaires :
Set-ADUser -Identity "jdoe" ` -DisplayName "John Doe" ` -Office "Nice" ` -EmailAddress "john.doe@innovattech.local" - Ajouter l'utilisateur aux groupes nécessaires :
Add-ADGroupMember -Identity "VPN Users" -Members "jdoe" Add-ADGroupMember -Identity "Employees" -Members "jdoe" - Créer le dossier personnel et appliquer les permissions :
New-Item -Path "\\fileserver\home\jdoe" -ItemType Directory -Force icacls "\\fileserver\home\jdoe" /grant "INNOVATTECH\jdoe:(OI)(CI)M" - Vérifier l'existence et les propriétés du compte :
Attendu : compte Enabled, DisplayName correct, groupe VPN Users présent.Get-ADUser -Identity "jdoe" -Properties DisplayName,Enabled,MemberOf | Format-List Get-ADPrincipalGroupMembership -Identity "jdoe" | Select-Object Name - Documenter la création dans GLPI : ajouter une note dans le ticket initial et lier le runbook.
- Envoyer une notification sécurisée au nouvel utilisateur :
Send-MailMessage -To "john.doe@innovattech.local" ` -From "it@innovattech.local" ` -Subject "Compte AD créé" ` -Body "Votre compte jdoe a été créé. Changez le mot de passe au premier login." ` -SmtpServer "smtp.innovattech.local" - Vérifier la réplication AD (si multi-DC) :
Get-ADReplicationPartnerMetadata -Target "win-srv01" | Format-Table - Effectuer un test de première connexion (vérification fonctionnelle avec l'utilisateur ou manager).
- Clore la tâche dans GLPI avec les étapes réalisées et le temps passé.
- Si un problème survient, exécuter la procédure de rollback ci-dessous.
Vérifications attendues
- L'utilisateur apparaît dans AD :
Get-ADUserretourne l'objet. - Compte activé,
ChangePasswordAtLogon = True. - Groupes d'appartenance conformes à la demande.
- Dossier personnel existant avec permissions correctes.
- Ticket GLPI contient la trace complète de l'intervention.
Procédure de rollback
# 1. Désactiver le compte immédiatement
Disable-ADAccount -Identity "jdoe"
# 2. Retirer des groupes sensibles
Remove-ADGroupMember -Identity "VPN Users" -Members "jdoe" -Confirm:$false
# 3. Supprimer l'objet si demandé et validé par le manager
Remove-ADUser -Identity "jdoe" -Confirm:$false
# 4. Si la corbeille AD est activée, restaurer via Restore-ADObject si nécessaire
$deleted = Get-ADObject -Filter 'samAccountName -eq "jdoe"' -IncludeDeletedObjects
Restore-ADObject -Identity $deleted.ObjectGUID
Recommandation : préférer la désactivation à la suppression pour conserver l'historique.
Contacts
- Responsable IT : Alice Martin —
alice.martin@innovattech.local— +33 6 12 34 56 01 - Technicien N2 référent : Bob Durand —
bob.durand@innovattech.local— +33 6 12 34 56 02 - Support back-end AD : David Leroy —
david.leroy@innovattech.local
2. Documentation technique en Markdown (20 min)
Markdown est un format idéal pour la documentation technique : lisible en texte brut, facilement versionné et rendu (README, wiki, pages statiques).
Rappels syntaxiques essentiels
| Élément | Syntaxe Markdown |
|---|---|
| Titres | # H1, ## H2, ### H3 |
| Listes | - item ou 1. item |
| Code inline | `commande` |
| Bloc de code | Triple backticks + langage |
| Tableau | | Col1 | Col2 | + ligne de séparation |
| Lien | [texte](url) ou chemin relatif |
| Gras | **texte** |
Diagramme Mermaid (flowchart)
```mermaid
flowchart LR
A[Demande] --> B[Validation]
B --> C[Provisioning]
C --> D[Vérification]
D --> E[Clôture]
```
Conseil de rédaction : chaque procédure opérationnelle doit contenir des commandes testées et les sorties attendues pour permettre la vérification de l'état.
3. Git pour la documentation (15 min)
Versionner la documentation garantit traçabilité, revue et rollback. Workflow recommandé :
mkdir -p ~/doc-repo && cd ~/doc-repo
git init
# Créer une branche feature dédiée
git checkout -b feature/add-runbook-ad
# Créer le runbook et le README
mkdir -p runbooks
# ... éditer runbooks/ad-ajout-utilisateur.md et README.md ...
# Committer
git add runbooks/ad-ajout-utilisateur.md README.md
git commit -m "feat(docs): add runbook 'Ajout utilisateur AD'
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
# Merger sur main
git checkout main || git checkout -b main
git merge --no-ff feature/add-runbook-ad \
-m "chore(docs): merge runbook AD"
Bonnes pratiques Git pour la documentation
- Commits atomiques : un commit = une modification logique.
- Messages clairs au format
type(scope): description(ex :docs(runbook): fix AD steps). - Branches feature et pull requests pour la relecture.
- Toujours inclure le trailer
Co-authored-bysur les commits collaboratifs.
4. CMDB : inventaire et maintenance (10 min)
La CMDB doit contenir au minimum : UUID, hostname, IP, OS, rôle, localisation, responsable, date de fin de support. Exemple CSV pour importer dans GLPI :
uuid,hostname,ip,os,role,location,responsible,eol
550e84...,win-srv01,192.168.10.5,Windows Server 2022,DC/AD,Datacenter,Alice Martin,2026-12-31
550e85...,debian-srv01,192.168.10.10,Debian 12,OpenVPN/Bastion,Datacenter,Bob Durand,2027-06-30
550e86...,debian-srv02,192.168.30.5,Debian 12,Web/Reverse proxy,DMZ,Claire Petit,2025-11-30
550e87...,proxmox01,192.168.10.20,Proxmox VE 8.0,Hyperviseur,Datacenter,David Leroy,2028-01-31
550e88...,nas01,192.168.10.15,NAS Synology,Stockage/Backup,Datacenter,Elise Martin,2026-05-31
Règles d'hygiène CMDB
- Audits trimestriels pour valider la conformité (équipements disparus, remplacés).
- Validation automatique lors d'un changement d'état (checkout poste, mise en service).
- Lier chaque ticket à l'actif concerné dans GLPI pour la traçabilité des incidents.
5. Post-mortem structuré — template (10 min)
Un post-mortem doit être factuel et orienté actions. Template :
# Post-mortem — Incident [Titre]
**Date :** YYYY-MM-DD | **Durée :** X h Y min
**Auteur :** [Nom] | **Révisé par :** [Nom]
## Résumé exécutif
(1 paragraphe — impact, durée, services affectés)
## Timeline
| HH:MM | Action |
|-------|--------|
| 08:12 | Alerte monitoring — win-srv01 ne répond plus |
| 08:20 | Ticket P1 ouvert — assigné Bob Durand |
| 09:45 | Cause identifiée : disque plein /var/log |
| 10:30 | Service AD restauré, ticket fermé |
## Impact business
- 40 utilisateurs non authentifiés pendant 2h20
- Perte estimée : 40 × 2.33h × [coût/h]
## Root Cause (5 Whys)
1. AD inaccessible → disque plein → logs applicatifs non purgés
2. Logs non purgés → rotation logrotate non configurée
3. Logrotate non configuré → absent du runbook d'installation
4. Absent du runbook → pas de checklist post-déploiement
5. Pas de checklist → processus de mise en service non formalisé
**Root Cause :** Absence de checklist de mise en service serveur.
## Actions correctives (SMART)
| Action | Owner | Deadline | Mesure de succès |
|--------|-------|----------|-----------------|
| Ajouter logrotate au runbook install AD | Alice Martin | 2025-02-10 | Runbook revu et committé |
| Alerting espace disque <20% | Bob Durand | 2025-01-31 | Alerte active en monitoring |
| Créer checklist post-déploiement | Alice Martin | 2025-02-15 | Checklist fusionnée sur main |
## Leçons apprises
- La surveillance disque doit être standard sur tous les serveurs.
- Les runbooks d'installation doivent inclure la configuration des services de maintenance (logrotate, cron).
6. Indicateurs ITSM clés (10 min)
| Indicateur | Définition | Formule |
|---|---|---|
| MTTR | Temps moyen de résolution d'un incident | Σ(durée résolution) / N incidents |
| MTBF | Temps moyen entre deux pannes successives | Σ(uptime) / N pannes |
| Taux résolution N1 | % tickets clos par N1 sans escalade | (tickets N1 clos / total tickets) × 100 |
| CSAT | Satisfaction utilisateur post-résolution | Score questionnaire (0–5 étoiles) |
Exemple MTTR :
Incident 1 : 1h | Incident 2 : 2h | Incident 3 : 5h
MTTR = (1 + 2 + 5) / 3 = 2.67 h
Travaux Pratiques — TP S2 (90 min)
Objectif : Rédiger et versionner un runbook « Ajout utilisateur AD InnovatTech » et fournir un README avec schéma réseau ASCII.
Prérequis techniques
- Poste Windows Server 2022 ou workstation RSAT pour tests PowerShell (ou simulation hors production).
- Git installé localement.
- Accès en lecture à la CMDB et au ticket GLPI.
Étapes
- Créer l'arborescence du dépôt :
mkdir -p ~/doc-repo/runbooks && cd ~/doc-repo git init - Créer
runbooks/ad-ajout-utilisateur.mden respectant la structure vue en cours (≥ 15 étapes avec commandes PowerShell exactes + section rollback). - Créer
README.mdavec la description du dépôt et un schéma réseau en ASCII art :Internet | [pfSense] / | \ DMZ --- LAN WAN | |\ debian-srv02 sw-core-01 --- proxmox01 | win-srv01 (AD) | nas01 - Committer sur une branche feature et merger vers main :
git checkout -b feature/runbook-ad git add runbooks/ad-ajout-utilisateur.md README.md git commit -m "docs(runbook): add AD user provisioning runbook Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>" git checkout main || git checkout -b main git merge --no-ff feature/runbook-ad -m "chore(docs): merge runbook AD" - Créer un
CHANGELOG.mdavec la version initiale v1.0.0 et archiver en ZIP.
Livrable attendu
- Dépôt
doc-repo(zippé) contenant :runbooks/ad-ajout-utilisateur.md,README.md(avec ASCII art),CHANGELOG.md, historique git (git log --oneline).
Critères de réussite
- Runbook complet (≥ 15 étapes) avec commandes PowerShell exactes et section rollback.
- README.md avec schéma ASCII intégré.
- Historique git montrant commit sur feature et merge avec message clair.
Synthèse (10 min)
La documentation opérationnelle transforme des interventions hasardeuses en procédures reproductibles : un runbook clair et testé, versionné dans git, réduit les erreurs et les temps de diagnostic. Une CMDB fiable et des post-mortems structurés permettent d'améliorer en continu et de réduire les incidents récurrents.
Question de vérification : En une phrase, décrivez l'objet principal d'un runbook et la principale différence entre une « verification step » et une procédure de rollback.
🎮 Quiz — Testez vos connaissances
-
Q1 (QCM) — Dans le runbook « Ajout utilisateur AD », quelle commande PowerShell permet de vérifier qu'un compte n'existe pas avant de le créer ?
-
Q2 (QCM) — Quelle est la bonne pratique Git pour versionner de la documentation technique en équipe ?
-
Q3 (QCM) — Une action corrective SMART dans un post-mortem doit obligatoirement inclure…
-
Q4 (Vrai/Faux) — « Lors d'un rollback AD, il est préférable de supprimer immédiatement le compte créé par erreur plutôt que de le désactiver. »
Correction : FAUX — Il est préférable de désactiver le compte pour conserver l'historique et permettre une restauration via AD Recycle Bin. La suppression est irréversible sans corbeille AD activée.
-
Q5 (Libre) — En une phrase, expliquez la différence entre une verification step (étape de vérification) et une procédure de rollback dans un runbook opérationnel.
Le plugin de quiz enregistre vos points pour le leaderboard.
