Modèles de documentation d'exploitation¶
Ces modèles accompagnent le cours Knowledge Management : runbooks, postmortems, ADR & docs-as-code. Copiez-les dans le dépôt de la plateforme et adaptez-les : un modèle est un point de départ, pas un formulaire à remplir mécaniquement.
| Modèle | Emplacement conseillé | Type Diátaxis |
|---|---|---|
| Runbook | docs/runbooks/<alerte>.md | Guide pratique |
| Postmortem | docs/postmortems/AAAA-MM-JJ-<incident>.md | Explication |
| ADR | docs/adr/NNNN-<decision>.md | Explication |
| Rapport d'audit croisé | docs/audit/audit-<equipe-auditrice>.md | Référence |
| Index du dossier de preuves | docs/preuves/README.md | Référence |
| Registre des risques | docs/risques.md | Référence |
| Matrice de conformité | docs/conformite.md | Référence |
Conventions communes
- Horodatages en UTC, au format
AAAA-MM-JJ HH:MM - Un propriétaire et une date de dernière revue en tête de chaque document
- Aucun secret : indiquez où et comment l'obtenir, jamais sa valeur
Runbook¶
# Runbook : <NomDeLAlerte>
Propriétaire : <équipe> · Dernière revue : <AAAA-MM-JJ>
Alerte : `<NomDeLAlerte>` · Sévérité : <critical | warning> · Composant : <component>
## Symptôme et impact
- Ce que signifie l'alerte : <une phrase>
- Impact utilisateur : <qui est touché, comment>
- SLO concerné : <SLO et consommation d'error budget attendue>
## Diagnostic
1. Confirmer le symptôme : <lien dashboard, panneau>
2. Identifier le composant et la cause :
```bash
kubectl -n <namespace> get pods
kubectl -n <namespace> describe pod <pod> | grep -A5 "Last State"
kubectl -n <namespace> get events --sort-by=.lastTimestamp | tail -20
```
3. Vérifier les changements récents : <historique ArgoCD, dernière MR fusionnée>
## Remédiation
| Cause identifiée | Action | Risque |
| :--- | :--- | :--- |
| <cause 1> | <action, idéalement par Git> | <faible / moyen / élevé> |
| <cause 2> | <action> | <risque> |
## Retour à la normale
- <critère mesurable, ex : aucun redémarrage depuis 15 min>
- <critère mesurable, ex : SLI de disponibilité au-dessus de l'objectif>
## Escalade
- Après <durée> sans amélioration : <rôle ou équipe, canal>
- Informations à transmettre : <alerte, heure de début, actions déjà tentées>
## Références
- Dashboard : <lien>
- ADR et postmortems liés : <liens>
Postmortem¶
# Postmortem : <titre factuel de l'incident>
Statut : <brouillon | revu | publié> · Rédacteurs : <noms ou rôles> · Date : <AAAA-MM-JJ>
## Résumé
<3 à 5 lignes : ce qui s'est passé, durée, impact, résolution>
## Impact
- Durée de l'impact : <début> → <fin> (UTC), soit <durée>
- Utilisateurs ou requêtes touchés : <chiffre>
- Error budget consommé : <pourcentage du budget de la fenêtre>
## Chronologie (UTC)
| Heure | Événement | Source |
| :--- | :--- | :--- |
| HH:MM | Début de l'impact | <métrique, log> |
| HH:MM | Détection : <alerte ou signalement> | <Alertmanager> |
| HH:MM | Prise en charge par <rôle> | <canal> |
| HH:MM | Atténuation : <action> | <commit, commande> |
| HH:MM | Résolution confirmée | <dashboard> |
Temps de détection : <durée> · Temps d'atténuation : <durée> · Temps de rétablissement : <durée>
## Cause racine et facteurs contributifs
- Déclencheur : <ce qui a déclenché l'incident>
- Facteurs techniques : <...>
- Facteurs de processus ou d'outillage : <...>
- Pourquoi la détection a pris ce temps : <...>
## Ce qui a bien fonctionné
- <...>
## Ce qui a mal fonctionné
- <...>
## Où nous avons eu de la chance
- <...>
## Actions
| Action | Type | Responsable | Échéance | Ticket |
| :--- | :--- | :--- | :--- | :--- |
| <action> | <prévenir / détecter / atténuer> | <rôle> | <AAAA-MM-JJ> | <lien> |
Ce postmortem est sans reproche : il décrit des systèmes et des décisions, pas des fautes individuelles.
ADR¶
# ADR NNNN : <décision formulée comme un choix>
Statut : <proposé | accepté | déprécié | remplacé par ADR NNNN> · Date : <AAAA-MM-JJ>
Décideurs : <rôles>
## Contexte
<Les forces en présence : besoin, contraintes techniques, sécurité, coût, compétences de l'équipe>
## Options envisagées
1. <Option A> : <avantages, inconvénients>
2. <Option B> : <avantages, inconvénients>
3. <Option C> : <avantages, inconvénients>
## Décision
Nous retenons <option>, parce que <raison principale>.
## Conséquences
- Positives : <...>
- Négatives ou acceptées : <ce que l'on perd, la dette assumée>
- Actions induites : <supervision, documentation, formation>
Rapport d'audit croisé¶
# Rapport d'audit croisé : <plateforme auditée>
Équipe auditrice : <noms ou rôles> · Équipe auditée : <noms ou rôles>
Date : <AAAA-MM-JJ> · Version auditée : <tag ou commit>
## Périmètre et règles d'engagement
- Cibles autorisées : <namespaces, dépôts, machine>
- Actions interdites : <destruction de données, de VM ou de dépôt, déni de service>
- Référentiel : <registre des risques, matrice de conformité, grille d'audit>
## Synthèse
| Sévérité | Nombre de constats |
| :--- | :---: |
| Critique | <n> |
| Majeure | <n> |
| Mineure | <n> |
## Constats
### AUD-01 : <titre factuel>
- Sévérité : <critique | majeure | mineure>
- Contrôle visé : <exigence ou contrôle du référentiel>
- Preuve : <fichier de preuve> et commande rejouable :
```bash
<commande exacte>
```
- Résultat observé : <sortie significative>
- Impact : <conséquence concrète en cas d'exploitation>
- Recommandation : <action corrective>
- Statut : <ouvert | corrigé et contre-vérifié | dérogation argumentée>
## Points forts constatés
- <contrôles efficaces, bonnes pratiques à souligner>
Index du dossier de preuves¶
# Dossier de preuves
Nommage : `AAAA-MM-JJ_HHMM_<scenario>.<ext>` (UTC). Empreintes calculées avec `sha256sum`.
| Exigence | Scénario | Preuve | Résultat | SHA-256 (8 premiers caractères) |
| :--- | :--- | :--- | :--- | :--- |
| <ex : SLO tenu en charge nominale> | <load-nominal> | [2026-11-04_1015_load-nominal.png](2026-11-04_1015_load-nominal.png) | <validé : 99,9 %, p95 180 ms> | <a1b2c3d4> |
| <ex : image non signée refusée> | <admission-unsigned> | [2026-11-03_1432_admission-unsigned.png](2026-11-03_1432_admission-unsigned.png) | <validé : refus Kyverno> | <e5f6a7b8> |
Registre des risques¶
# Registre des risques
Méthode : STRIDE · Échelles : vraisemblance et impact de 1 (faible) à 4 (critique)
| ID | Catégorie STRIDE | Scénario de menace | Actif | V | I | Contrôle prévu | Preuve attendue | Statut |
| :--- | :--- | :--- | :--- | :---: | :---: | :--- | :--- | :--- |
| R-01 | Information disclosure | Secret committé dans le dépôt | Clé de passerelle de paiement | 3 | 4 | Détection de secrets bloquante en CI | Pipeline bloquée sur un faux secret | <à faire / en place / vérifié> |
| R-02 | Tampering | Image modifiée entre build et déploiement | Image de l'API | 2 | 4 | Signature Cosign vérifiée à l'admission | Refus d'une image non signée | <statut> |
| R-03 | Denial of service | Pic de charge non absorbé | API de paiement | 3 | 3 | HPA, PDB, tests de stress | Point de rupture mesuré | <statut> |
Matrice de conformité¶
# Matrice de conformité
Référentiels : <PSSI interne, CIS Benchmark Ubuntu 24.04 niveau 1, CIS Kubernetes, OWASP>
| Exigence | Référence | Contrôle mis en place | Outil | Preuve | Statut |
| :--- | :--- | :--- | :--- | :--- | :--- |
| Pas de connexion SSH root | <CIS 5.x / PSSI §x> | `PermitRootLogin no` (rôle Ansible ssh) | Ansible, Lynis | <fichier de preuve> | <conforme> |
| Conteneurs non-root | <PSSI §x> | PSA `restricted` et politique Kyverno | Kyverno | <fichier de preuve> | <conforme> |
| IP forwarding désactivé | <CIS 3.x> | Non appliqué : requis par Docker et Kubernetes | — | ADR NNNN | <dérogation> |
Toute dérogation renvoie vers un ADR qui la justifie et décrit sa mesure compensatoire.