Séance 2 : Documentation technique, runbooks et CMDB

Bloc 2 3h30 C2.4.4

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
RTO30 minutes (temps attendu pour création et vérifications)
RPO0 (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)

  1. 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
  2. Vérifier la connectivité avec le contrôleur AD :
    Test-Connection -ComputerName win-srv01 -Count 2
    Attendu : réponses ICMP sans perte.
  3. Vérifier qu'un compte identique n'existe pas déjà :
    Get-ADUser -Filter "SamAccountName -eq 'jdoe'" -ErrorAction SilentlyContinue
    Si la commande retourne un objet, interrompre et contacter le demandeur.
  4. Créer la variable SecureString pour le mot de passe :
    $password = ConvertTo-SecureString 'InitP@ssw0rd!' -AsPlainText -Force
  5. Créer l'utilisateur AD avec les attributs principaux :
    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
    Remplacer les valeurs par celles du formulaire de création.
  6. Compléter les attributs secondaires :
    Set-ADUser -Identity "jdoe" `
      -DisplayName "John Doe" `
      -Office "Nice" `
      -EmailAddress "john.doe@innovattech.local"
  7. Ajouter l'utilisateur aux groupes nécessaires :
    Add-ADGroupMember -Identity "VPN Users" -Members "jdoe"
    Add-ADGroupMember -Identity "Employees" -Members "jdoe"
  8. 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"
  9. Vérifier l'existence et les propriétés du compte :
    Get-ADUser -Identity "jdoe" -Properties DisplayName,Enabled,MemberOf | Format-List
    Get-ADPrincipalGroupMembership -Identity "jdoe" | Select-Object Name
    Attendu : compte Enabled, DisplayName correct, groupe VPN Users présent.
  10. Documenter la création dans GLPI : ajouter une note dans le ticket initial et lier le runbook.
  11. 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"
  12. Vérifier la réplication AD (si multi-DC) :
    Get-ADReplicationPartnerMetadata -Target "win-srv01" | Format-Table
  13. Effectuer un test de première connexion (vérification fonctionnelle avec l'utilisateur ou manager).
  14. Clore la tâche dans GLPI avec les étapes réalisées et le temps passé.
  15. Si un problème survient, exécuter la procédure de rollback ci-dessous.

Vérifications attendues

  • L'utilisateur apparaît dans AD : Get-ADUser retourne 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émentSyntaxe Markdown
Titres# H1, ## H2, ### H3
Listes- item ou 1. item
Code inline`commande`
Bloc de codeTriple 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-by sur 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)

IndicateurDéfinitionFormule
MTTRTemps moyen de résolution d'un incidentΣ(durée résolution) / N incidents
MTBFTemps moyen entre deux pannes successivesΣ(uptime) / N pannes
Taux résolution N1% tickets clos par N1 sans escalade(tickets N1 clos / total tickets) × 100
CSATSatisfaction utilisateur post-résolutionScore 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

  1. Créer l'arborescence du dépôt :
    mkdir -p ~/doc-repo/runbooks && cd ~/doc-repo
    git init
  2. Créer runbooks/ad-ajout-utilisateur.md en respectant la structure vue en cours (≥ 15 étapes avec commandes PowerShell exactes + section rollback).
  3. Créer README.md avec 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
  4. 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"
  5. Créer un CHANGELOG.md avec 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

  1. 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 ?

  2. Q2 (QCM) — Quelle est la bonne pratique Git pour versionner de la documentation technique en équipe ?

  3. Q3 (QCM) — Une action corrective SMART dans un post-mortem doit obligatoirement inclure…

  4. 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.

  5. 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.

← C2.4.4 Séance 1 — ITSM et tickets ✓ Dernière séance du module B2 M2.4