Aller au contenu

Journal d'exécution des exercices DR

Utilisez ce formulaire après chaque exercice DR trimestriel (Exercices 1–3 dans dr-playbook.fr.md). Le journal signé est la preuve auditeur que les procédures de récupération ont été testées et que les RTO/RPO mesurés correspondent aux cibles. Sans ce journal, le playbook est du théâtre.

Workflow :

  1. L'opérateur copie ce template dans un nouveau fichier dr-drill-AAAA-T[1-4].md dans akko-confidential/dr-drills/ (repo privé — les sorties d'exercice peuvent contenir des détails opérationnels).
  2. Opérateur + témoin d'astreinte exécutent chaque exercice et remplissent le journal.
  3. Le responsable conformité co-signe en bas.
  4. Le PDF signé est attaché au trail d'audit (stockage à froid dans le bucket akko-audit-cold avec rétention object-lock ≥ 7 ans).

En-tête

Champ Valeur
Date d'exercice AAAA-MM-JJ HH:MM TZ
Trimestre T1 / T2 / T3 / T4 — AAAA
Cluster netcup-prod / aks-prod / eks-prod / scratch
Version AKKO (depuis helm list -n akko)
Opérateur nom + rôle
Témoin nom + rôle (doit être une personne différente)
Responsable conformité nom + rôle
Révision du playbook SHA git de docs/docs/admin/dr-playbook.md

Exercice 1 — PITR base unique

Voir playbook §4.1. Restaurer une DB PostgreSQL à un point dans le temps 5 min avant « maintenant ». DB de référence : superset_metadata.

Étape Cible Mesuré Réussite Notes
Localiser le dernier backup de base < 5 min __ min ☐ ☐
Restaurer sur PVC scratch < 15 min __ min ☐ ☐
Rejouer WAL jusqu'à T-5 < 5 min __ min ☐ ☐
Vérifier nombre de lignes attendu < 1 min __ s ☐ ☐
Bascule du Service vers la DB restaurée < 5 min __ min ☐ ☐
RTO total 20 min __ min ☐ ☐
RPO mesuré 5 min __ s ☐ ☐

Problèmes rencontrés (le cas échéant) :

(vide)

Actions à mener (lien vers tickets backlog) :

(vide)

Exercice 2 — restauration cluster complet sur matériel scratch

Voir playbook §4.2. À partir d'un cluster k8s neuf, restaurer tout le namespace AKKO depuis Velero + ObjectStorage. RTO cible : 4 h.

Étape Cible Mesuré Réussite Notes
Provisionner cluster scratch (k3s sur matériel cold-spare) < 30 min __ min ☐ ☐
Installer cert-manager + Traefik + Velero < 15 min __ min ☐ ☐
velero restore create depuis le dernier backup < 90 min __ min ☐ ☐
Restaurer les volumes SeaweedFS depuis snapshot < 60 min __ min ☐ ☐
helm upgrade akko pour réconcilier l'état < 15 min __ min ☐ ☐
Vérifier cockpit + Trino + ADEN répondent < 5 min __ min ☐ ☐
Lancer le smoke banking-end-to-end (chemin lecture seule) < 10 min __ min ☐ ☐
RTO total 4 h __ h __ min ☐ ☐
RPO mesuré 24 h (dernier nightly) __ h ☐ ☐

Composants n'ayant pas restauré proprement (le cas échéant) :

(vide)

Le trail d'audit (decision_logs, query_log, admin_events) a-t-il restauré intact et tamper-free ? ☐ Oui ☐ Non — explique :

(vide)

Exercice 3 — réponse à incident sur table

Voir playbook §4.3. Pas de changement d'infra — c'est un exercice papier où l'équipe d'astreinte parcourt la réponse à un incident nommé. Le témoin note la clarté + vitesse de chaque participant.

Scénario choisi (un parmi) :

  • ☐ A1 : DB active perdue (corruption stockage)
  • ☐ A2 : Ransomware chiffre les volumes SeaweedFS
  • ☐ A3 : Realm Keycloak effacé (erreur admin)
  • ☐ A4 : Panne cloud niveau région (provider down)
  • ☐ A5 : Menace interne — un admin exfiltre le log d'audit
  • ☐ A6 : Personnalisé — décrire :
(vide)
Phase Propriétaire Time-to-action Observé
Détection (alerte / signalement utilisateur) Monitoring < 5 min __
Triage (sévérité + périmètre) Astreinte < 10 min __
Communication (Slack #incidents) Astreinte < 2 min __
Décision de containment Lead sécurité < 15 min __
Démarrage de la récupération (quel exercice déclenché) Opérateur < 30 min __
Cadence des status updates All-hands toutes les 30 min __
Déclaration all-clear Conformité fin de MTTR __
Post-mortem dans les 7 j Auteur TBD sous 7 j __

Manques ou hésitations observés (transparence — le post-mortem est la sortie de l'exercice, pas le verdict sur l'équipe) :

(vide)

Évolutions de processus relevées :

(vide)

Spot-checks système de backup (à lancer AVANT l'exercice 1)

# PostgreSQL — dernier basebackup doit avoir < 4 h
kubectl -n akko exec svc/akko-postgresql -- ls -lt /backups/ | head

# Velero — dernier backup réussi
velero backup get --selector akko.scope=full | head -5

# Snapshot volume SeaweedFS — dernier snapshot
kubectl -n akko exec deploy/akko-seaweedfs-master -- \
  weed shell <<< 'volume.list' | grep -E 'snapshot.*[0-9]+'

# Stockage à froid d'audit — object-lock toujours actif
aws s3api get-object-lock-configuration \
  --bucket akko-audit-cold | jq '.ObjectLockConfiguration.Rule.DefaultRetention'

# cert-manager — cert wildcard pas expirant < 30 j
kubectl -n cert-manager get certificate -o json | \
  jq '.items[] | {name: .metadata.name, expiry: .status.notAfter}'

Reportez toute anomalie ci-dessus avant la section exercice — un état de backup dégradé doit être capturé même si les exercices eux-mêmes réussissent.


Signatures

Rôle Nom Signature (initiales) Date
Opérateur
Témoin
Responsable conformité

Conservation — stocker le PDF signé en stockage à froid avec rétention object-lock ≥ 7 ans (DORA Art. 11 + RGPD Art. 30 registre des traitements). La révision git du playbook utilisé pour cet exercice (enregistrée dans l'En-tête) permet aux auditeurs futurs de prouver que les procédures effectivement exécutées correspondent aux procédures documentées à l'époque.