4. Communication client (si plateforme exposée publiquement au moment de l’incident)
Avant de commencer, envoyer à tous les clients actifs :
Objet : SnakySec — Maintenance d'urgence en coursUne opération de restauration de la base de données est en cours pourrésoudre un incident technique survenu à HH:MM UTC.La plateforme sera indisponible pendant maximum 2 heures. Aucune perte dedonnées significative attendue (RPO 5 minutes maximum).Nous publierons un rapport post-incident sous 7 jours conformément à votrecontrat. Vos données d'audits, configurations et rapports sont intègres etseront restaurées dans leur état au plus proche du moment précédant l'incident.Pour toute question urgente : contact@snakysec.com
5.1 Si l’incident a une heure connue (cas le plus fréquent)
Le target-time doit être juste avant l’événement déclencheur. Exemple :
si la suppression accidentelle a eu lieu à 2026-04-26 14:32:15 UTC, choisir
2026-04-26 14:32:00 UTC (15 secondes plus tôt).
# Format attendu : YYYY-MM-DD HH:MM:SS+00 (UTC obligatoire pour cohérence)TARGET_TIME="2026-04-26 14:32:00+00"
Le restore se fait depuis le repo OVH par défaut. Si OVH inaccessible,
ajouter --repo=2 pour basculer sur Scaleway.
make db-upsleep 5 # postgres démarre en mode "no PGDATA, will initdb"# Wait — non. PGDATA vide va déclencher initdb. Stopper postgres et restorer# AVANT que postgres tente d'initdb.
Procédure correcte : restore via container temporaire, PAS via le service postgres normal.
# Le service postgres ne doit PAS être démarré pendant le restoremake db-down# Container temporaire qui partage le volume + a pgbackrestdocker run --rm -it \ --network platform_mssp-net \ -v platform_postgres-data:/var/lib/postgresql/data \ -v platform_pgbackrest-log:/var/log/pgbackrest \ -v platform_pgbackrest-spool:/var/spool/pgbackrest \ -v platform_mssp-approle-dr:/vault/approle-dr:ro \ -v $(pwd)/../../scripts/dr:/dr:ro \ -v $(pwd)/../docker/postgres/pgbackrest.conf:/etc/pgbackrest/pgbackrest.conf:ro \ -e VAULT_ADDR=http://mssp-vault:8200 \ -e VAULT_DR_APPROLE_FILE=/vault/approle-dr/dr.env \ --user postgres \ registry.gitlab.com/snakysec/mssp-snakysec-multi-tenants/postgres:16-pgbackrest \ bash /dr/restore/postgres-pitr.sh "${TARGET_TIME}"
Postgres va rejouer les WAL jusqu’au target-time, puis pause (recovery_target_action=pause).À ce stade, postgres accepte les connexions en lecture seule. Vérifier :
docker exec mssp-postgres psql -U mssp -d mssp_platform -c "SELECT pg_is_in_recovery();"# attendu : t (true, en recovery)docker exec mssp-postgres psql -U mssp -d mssp_platform -c \ "SELECT MAX(seq) AS tip_seq, MAX(\"createdAt\") AS tip_time FROM platform_audit_log;"# vérifier que tip_time est juste avant target-time
Objet : SnakySec — Incident résolu, plateforme à nouveau disponibleL'opération de restauration s'est achevée à HH:MM UTC.Synthèse :- Incident : <type>- Détection : YYYY-MM-DD HH:MM UTC- Reprise : YYYY-MM-DD HH:MM UTC- RPO réel constaté : N minutes- Données impactées : aucune perte significativeVos audits, rapports et configurations sont intègres. Un rapportpost-incident détaillé vous sera transmis sous 7 jours.Si vous constatez une anomalie sur vos données : contact@snakysec.com