Documentation Index
Fetch the complete documentation index at: https://snakysec.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Object Lock — runbook anti-ransomware sur les buckets DR
Quoi et pourquoi
Les bucketsmssp-backup-ovh (OVH Gravelines) et mssp-backup-scw (Scaleway Paris) qui hébergent les backups Postgres + Vault + artifacts sont configurés en Object Lock COMPLIANCE mode, rétention 90 jours (cf. scripts/dr/setup/bootstrap-buckets.sh).
Conséquence concrète :
Un attaquant qui obtient les credentials DR Vault ou les access keys S3 OVH/Scaleway ne peut pas supprimer ou overwriter les backups écrits dans les 90 derniers jours. Pas même le détenteur du compte root du provider. Pas de bypass.C’est la dernière ligne de défense contre un ransomware qui aurait passé tous les autres remparts (compromise de Vault, exfiltration des creds, accès SSH).
Modes Object Lock
| Mode | Quoi | Choix SnakySec |
|---|---|---|
| COMPLIANCE | Personne ne peut désactiver/raccourcir le lock pendant la rétention. Attendre l’expiration ou détruire le bucket. | ✅ Activé |
| GOVERNANCE | Un user avec le permission spécifique s3:BypassGovernanceRetention peut overrider. | ❌ Trop laxiste pour un cas anti-ransomware |
| OFF | Pas de lock. | ❌ Risque ransomware non couvert |
Implications opérationnelles
Le storage va grossir au-delà des cibles théoriques
pgbackrest.conf configure repo-retention-full=4 (= ~30 jours d’historique) ; restic --keep-daily 14 --keep-weekly 8 --keep-monthly 3 (= ~90 jours).
Avec Object Lock 90j actif :
- pgbackrest tentera de DELETE les fulls > 4 → DELETE bloqué, fichiers non supprimés
- restic
forget --prunetentera de purger les snapshots forgottens → DELETE bloqué
- Postgres : ~200 MB par full × 12 fulls (90j) + ~50 MB/jour de WAL × 90j = 6.7 GB par bucket
- Vault : ~2 MB par snapshot × 90 = 180 MB par bucket
- Artifacts : croît avec le nombre de clients, ~100 MB/mois × 3 mois = 300 MB par bucket
Les warnings DELETE dans les logs sont normaux
postgres-pgbackrest.sh, vault-snapshot.sh, artifacts-restic.sh tagguent ces warnings comme informatifs.
Tu peux confirmer la santé via la métrique storage utilisée dans la console provider — si elle plafonne ~J+90 c’est que les locks expirent comme prévu.
Cas d’urgence : besoin réel de purger un objet
Réponse courte : tu ne peux pas, c’est le point. Si vraiment vital (genre fuite légale RGPD d’un objet contenant des données personnelles client qui aurait dû être anonymisé) :- Attendre l’expiration naturelle du lock (max 90 jours)
- OU recréer le bucket : créer un nouveau bucket sans Object Lock (ou avec rétention plus courte), drainer ce qu’on veut garder, supprimer l’ancien bucket. Côté OVH/Scaleway il faut généralement contacter le support pour forcer la suppression d’un bucket Object-Locked. Procédure semaine + paperasse.
Migration d’un bucket legacy (sans Object Lock)
Sibootstrap-buckets.sh détecte un bucket existant SANS Object Lock, il refuse l’opération avec un message clair. La migration manuelle :
Vérifier que le lock est actif (sanity check post-bootstrap)
Audit régulier
À ajouter au scriptscripts/dr/verify/dr-verify.sh ou comme job Ofelia distinct (cf. plan Volet 3) :
- Hebdomadaire : appeler
get-object-lock-configurationsur les 2 buckets, vérifier queMode=COMPLIANCEetDays=90. Si l’un des deux a divergé (downgrade vers GOVERNANCE ou OFF), Sentry alert tagdr.object-lock.drift.
Décisions historiques
| Date | Décision | Raison |
|---|---|---|
| 2026-04-XX | Object Lock listé comme “V2 manual follow-up” dans bootstrap-buckets.sh | Setup initial DR, focus first on backup pipeline correctness |
| 2026-05-02 | Object Lock COMPLIANCE 90d activé via bootstrap-buckets.sh (Volet 1 du plan backup hardening) | Anti-ransomware, dernière ligne de défense |