PD-44 — Implémenter validation Object Lock WORM¶
1. Objectif¶
Cette User Story définit les exigences contractuelles pour prouver en continu que le stockage probatoire est effectivement en mode WORM et reste conforme dans le temps.
Le système doit permettre, de manière testable et auditables : - de vérifier l'activation effective d'Object Lock sur les buckets du périmètre ; - de vérifier le mode de rétention appliqué (COMPLIANCE vs GOVERNANCE) selon l'exigence probatoire ; - de vérifier la durée de rétention configurée et la rétention effective des objets ; - de détecter tout écart (absence, baisse, changement de mode, objet non protégé, modification administrative suspecte) ; - de produire des preuves formelles intégrables à la chaîne probatoire (Preuve Composite).
Aucune exigence d'implémentation n'est définie ici (interfaces, techno, orchestration, outils).
2. Périmètre / Hors périmètre¶
Inclus¶
- Validation de l'état Object Lock des buckets primaires OVH (S3-compatible).
- Validation de l'état WORM des buckets AWS Glacier/Deep Archive concernés par l'EPIC.
- Validation de la politique de rétention par défaut au niveau bucket (si supportée).
- Validation de la rétention effective au niveau objet (objets uploadés via API).
- Validation sur flux asynchrones de réplication (contrôle de cohérence WORM source/cible).
- Détection et traçabilité des écarts.
- Production de preuves auditables horodatées.
- Contrôle périodique automatisé (fréquence paramétrable).
Exclu¶
- Conception de l'architecture blockchain.
- Signature HSM.
- Gestion des clés utilisateurs.
- Définition de la politique RGPD de droit à l'effacement (conflit juridique à traiter au niveau gouvernance).
- Définition des mécanismes de purge post-rétention (hors périmètre PD-44, à clarifier avec EPIC/invariants globaux).
- Paramétrage détaillé des fournisseurs cloud (hors spécification fonctionnelle).
3. Définitions¶
- WORM : Write Once Read Many, impossibilité de modifier/supprimer avant échéance de rétention.
- Object Lock : mécanisme S3 empêchant suppression/modification selon règles de rétention.
- Mode COMPLIANCE : rétention non contournable, y compris administrativement, avant échéance.
- Mode GOVERNANCE : rétention potentiellement contournable avec privilèges spécifiques.
- Rétention : durée légale/contractuelle durant laquelle l'objet est immuable.
- Bucket : conteneur d'objets S3-compatible.
- Rétention par défaut bucket : règle appliquée aux nouveaux objets si aucune rétention explicite n'est fournie.
- Rétention objet : date/paramètre de verrouillage attaché à un objet/version.
- Écart : toute divergence entre état observé et politique attendue.
- Preuve formelle WORM : artefact horodaté, traçable, vérifiable, démontrant l'état WORM.
- Modification administrative suspecte : changement d'état/règle WORM sans justification autorisée traçable.
- Chaîne probatoire / Preuve Composite : ensemble de preuves corrélées permettant l'opposabilité juridique.
4. Invariants (non négociables)¶
| ID | Règle | Justification |
|---|---|---|
| INV-44-01 | Tout bucket du périmètre probatoire doit avoir Object Lock activé. | Sans Object Lock, l'immutabilité n'est pas garantie. |
| INV-44-02 | Le mode requis par bucket doit être explicitement défini et vérifiable (COMPLIANCE/GOVERNANCE). | Évite les implicites et les écarts de niveau de protection. |
| INV-44-03 | Si le bucket est classé "probatoire strict", le mode exigé est COMPLIANCE. | Exigence d'opposabilité forte (NF Z42-013/ISO 14641/eIDAS). |
| INV-44-04 | Toute durée de rétention minimale légale/contractuelle doit être explicitement définie par classe de données et vérifiable. | Empêche les durées arbitraires ou réductions silencieuses. |
| INV-44-05 | Tout objet du périmètre doit disposer d'une rétention effective >= minimum requis pour sa classe. | Garantit l'immutabilité au niveau objet, pas seulement bucket. |
| INV-44-06 | Toute réduction de durée de rétention configurée ou effective est un écart critique. | Protège la valeur probatoire. |
| INV-44-07 | Toute bascule COMPLIANCE -> GOVERNANCE (ou vers absence de mode requis) est un écart critique. | Interdit l'affaiblissement silencieux de protection. |
| INV-44-08 | La validation WORM doit être exécutée automatiquement à intervalle défini et tracée. | "Vérifiable à tout moment" sans dépendance humaine. |
| INV-44-09 | Chaque contrôle doit produire une preuve formelle horodatée, intègre et corrélable à la chaîne probatoire. | Auditabilité externe obligatoire. |
| INV-44-10 | Les contrôles ne doivent ni modifier ni fragiliser la protection WORM des objets existants. | Contrainte explicite de non-altération/non-régression conformité. |
| INV-44-11 | Les vérifications doivent couvrir OVH et AWS dans les mêmes termes contractuels (équivalence de contrôle). | Évite dépendance implicite à un fournisseur unique. |
| INV-44-12 | En réplication asynchrone, l'état WORM cible ne peut pas être inférieur à l'état source pour un objet répliqué. | Préserve la chaîne probatoire multi-cloud. |
5. Flux nominaux¶
- FN-44-01 — Vérification périodique de l'activation Object Lock (bucket)
- Entrée : liste des buckets du périmètre.
- Contrôle : état Object Lock actif.
-
Sortie : statut conforme/non conforme + preuve horodatée.
-
FN-44-02 — Vérification périodique du mode de rétention
- Entrée : politique attendue par bucket (mode requis).
- Contrôle : mode observé vs mode attendu.
-
Sortie : statut + détection de changement + preuve.
-
FN-44-03 — Vérification périodique des durées de rétention
- Entrée : minima de rétention par classe.
- Contrôle : configuration bucket + échantillon/lot d'objets du périmètre (selon règle de couverture définie) avec comparaison au minimum requis.
-
Sortie : statut + liste des écarts + preuve.
-
FN-44-04 — Vérification de l'héritage de rétention sur nouveaux objets
- Entrée : objets nouvellement créés sur période observée.
- Contrôle : chaque objet dispose d'une rétention effective conforme.
-
Sortie : conformité/écarts + preuve.
-
FN-44-05 — Vérification de cohérence WORM en réplication
- Entrée : couples source/cible d'objets répliqués.
- Contrôle : mode/durée cible >= exigences applicables et non affaiblis vs source.
-
Sortie : conformité/écarts + preuve corrélée source-cible.
-
FN-44-06 — Production d'un dossier de preuve audit
- Entrée : résultats de contrôles sur période.
- Contrôle : complétude, horodatage, traçabilité, intégrité des preuves.
- Sortie : paquet de preuve formelle exploitable en audit externe.
5bis. Diagrammes¶
5bis.1 Diagramme d'états — Cycle de validation WORM¶
Le résultat de chaque cycle de contrôle suit une machine d'états à 3 verdicts possibles (INV-44-08, INV-44-09).
stateDiagram-v2
[*] --> PENDING : Cycle planifié (FN-44-01)
PENDING --> COMPLIANT : Tous buckets + objets conformes\n(INV-44-01, INV-44-02, INV-44-05)
PENDING --> NON_COMPLIANT : Écart critique détecté\n(INV-44-03, INV-44-06, INV-44-07)
PENDING --> PARTIAL : Écarts mineurs ou couverture incomplète
COMPLIANT --> [*] : Preuve formelle produite (INV-44-09)
NON_COMPLIANT --> [*] : Preuve + alerte immédiate < 5 min
PARTIAL --> [*] : Preuve + signalement
note right of COMPLIANT
status: COMPLIANT
Tous les buckets Object Lock actif
Mode conforme (COMPLIANCE/GOVERNANCE)
Rétention >= minimum requis
end note
note right of NON_COMPLIANT
Déclenché par :
- ERR-44-01 (Object Lock absent)
- ERR-44-03 (COMPLIANCE→GOVERNANCE)
- ERR-44-06 (rétention insuffisante)
- ERR-44-07 (réduction détectée)
- ERR-44-08 (incohérence réplication)
end note 5bis.2 Diagramme d'états — Mode de protection bucket¶
Transitions de mode surveillées par le contrôle périodique (INV-44-02, INV-44-03, INV-44-07).
stateDiagram-v2
[*] --> NO_LOCK : Bucket créé sans Object Lock
NO_LOCK --> GOVERNANCE : Activation Object Lock\nmode GOVERNANCE
NO_LOCK --> COMPLIANCE : Activation Object Lock\nmode COMPLIANCE (INV-44-03)
GOVERNANCE --> COMPLIANCE : Renforcement autorisé
COMPLIANCE --> GOVERNANCE : INTERDIT — écart critique\nERR-44-03 (INV-44-07)
GOVERNANCE --> NO_LOCK : INTERDIT — écart critique\nERR-44-01
COMPLIANCE --> NO_LOCK : INTERDIT — écart critique\nERR-44-01
note right of COMPLIANCE
Mode requis pour buckets
tagués NF-Z42-013,
ISO-14641, eIDAS
(§10.3)
end note
note left of NO_LOCK
Tout bucket périmètre
dans cet état déclenche
ERR-44-01 (INV-44-01)
end note 5bis.3 Diagramme de séquence — Cycle de contrôle périodique (FN-44-01 à FN-44-06)¶
Interactions multi-services entre le validateur WORM, les providers cloud (OVH/AWS) et la chaîne probatoire (INV-44-08, INV-44-09, INV-44-11).
sequenceDiagram
participant Scheduler as EventBridge<br/>(60 min)
participant Validator as WORM Validator
participant OVH as OVH S3
participant AWS as AWS Glacier
participant Proof as Proof Engine<br/>(SHA3-256)
participant Alert as Alert System
Scheduler->>Validator: Déclenche cycle (cycle_id: uuid-v7)
rect rgb(230, 245, 255)
Note over Validator, AWS: FN-44-01 — Vérification Object Lock buckets (INV-44-01)
Validator->>OVH: GetObjectLockConfiguration (buckets périmètre)
OVH-->>Validator: ObjectLockEnabled, mode, rétention
Validator->>AWS: GetObjectLockConfiguration (buckets périmètre)
AWS-->>Validator: ObjectLockEnabled, mode, rétention
end
rect rgb(230, 255, 230)
Note over Validator, AWS: FN-44-02/03 — Vérification mode + durées (INV-44-02, INV-44-04)
Validator->>Validator: Compare mode observé vs politique attendue (§10.3)
Validator->>Validator: Compare durées vs minima par classe (§10.7)
end
rect rgb(255, 245, 230)
Note over Validator, AWS: FN-44-04 — Objets récents 100% + échantillon 5% (§10.2)
Validator->>OVH: ListObjectsV2 + GetObjectRetention (échantillon)
OVH-->>Validator: Rétention effective par objet
Validator->>AWS: ListObjectsV2 + GetObjectRetention (hors DEEP_ARCHIVE §10.4)
AWS-->>Validator: Rétention effective par objet
end
rect rgb(245, 230, 255)
Note over Validator, AWS: FN-44-05 — Cohérence réplication (INV-44-12)
Validator->>Validator: Corrèle source/cible, vérifie mode/durée cible >= source
Validator->>Validator: Vérifie DeleteMarkerReplication = Disabled (§10.5)
end
alt Écart critique détecté
Validator->>Alert: Alerte immédiate < 5 min (§10.1)
Validator->>Proof: Génère preuve NON_COMPLIANT (§10.6)
else Tous contrôles conformes
Validator->>Proof: Génère preuve COMPLIANT (§10.6)
end
rect rgb(255, 255, 230)
Note over Proof: FN-44-06 — Production preuve formelle (INV-44-09)
Proof->>Proof: Canonicalise JSON (clés triées)
Proof->>Proof: Hash SHA3-256 (INV-44-09)
Proof->>Proof: Chaîne previous_cycle_id + sequence
end
Proof-->>Validator: Preuve horodatée corrélée
Validator->>Validator: Persiste preuve audit (CA-44-12)
Note over Scheduler, Alert: Contrôle non-altération :<br/>aucune modification WORM par le validateur (INV-44-10) 6. Cas d'erreur¶
| ID | Condition d'erreur | Réponse attendue |
|---|---|---|
| ERR-44-01 | Bucket du périmètre sans Object Lock actif | Écart critique, statut non conforme, preuve de détection, alerte immédiate. |
| ERR-44-02 | Mode observé différent du mode requis | Écart critique si affaiblissement, alerte immédiate, traçabilité complète. |
| ERR-44-03 | Bucket probatoire strict observé en GOVERNANCE | Écart critique bloquant. |
| ERR-44-04 | Durée de rétention configurée < minimum requis | Écart critique + preuve comparative attendue/observée. |
| ERR-44-05 | Objet sans rétention effective | Écart critique au niveau objet. |
| ERR-44-06 | Objet avec rétention < minimum requis | Écart critique au niveau objet. |
| ERR-44-07 | Réduction de rétention détectée entre deux contrôles | Écart critique + journalisation de l'événement de dérive. |
| ERR-44-08 | Incohérence source/cible en réplication (cible moins protectrice) | Écart critique multi-cloud. |
| ERR-44-09 | Contrôle non exécuté à l'intervalle défini | Écart opérationnel majeur (perte de continuité de preuve). |
| ERR-44-10 | Preuve de contrôle absente, incomplète ou non corrélable | Écart d'auditabilité. |
| ERR-44-11 | Modification administrative non justifiée d'un paramètre WORM | Écart critique de sécurité/conformité. |
7. Critères d'acceptation (testables)¶
| ID | Critère | Observable |
|---|---|---|
| CA-44-01 | Pour 100% des buckets du périmètre, l'état Object Lock est collecté et restitué à chaque cycle de contrôle. | Rapport de cycle contenant tous les buckets attendus + statut par bucket. |
| CA-44-02 | Le mode de rétention attendu est défini explicitement pour chaque bucket du périmètre. | Matrice de politique bucket->mode sans valeur manquante. |
| CA-44-03 | Toute divergence mode observé vs mode attendu est signalée dans le cycle où elle est observée. | Entrée d'écart horodatée reliée au cycle de contrôle. |
| CA-44-04 | Pour chaque classe de données du périmètre, la durée minimale requise est définie explicitement. | Référentiel de minima versionné sans classe "non définie". |
| CA-44-05 | Tout objet contrôlé est évalué contre son minimum requis, avec résultat traçable. | Preuves objet incluant identifiant objet, rétention observée, seuil attendu, verdict. |
| CA-44-06 | Tout objet sans rétention ou avec rétention insuffisante est classé "critique". | Registre d'écarts montrant sévérité critique pour ces cas. |
| CA-44-07 | Les contrôles périodiques sont exécutés sans trou de couverture > intervalle défini + tolérance. | Historique horodaté des cycles, vérifiable automatiquement. |
| CA-44-08 | Chaque cycle génère une preuve formelle intègre et corrélable à la chaîne probatoire. | Artefact de preuve par cycle avec identifiant unique, horodatage, empreinte d'intégrité. |
| CA-44-09 | La vérification couvre OVH et AWS avec mêmes règles de verdict (conforme/non conforme/critique). | Rapports multi-cloud appliquant une grille de contrôle unique. |
| CA-44-10 | Pour les objets répliqués, un affaiblissement WORM cible par rapport à la source est détecté et signalé. | Enregistrement d'écart source-cible avec comparaison explicite mode/durée. |
| CA-44-11 | Les contrôles n'altèrent pas les objets existants ni leur protection WORM. | Absence d'événement de modification de rétention imputable aux contrôles. |
| CA-44-12 | Un dossier d'audit sur période donnée peut être produit à la demande avec traçabilité complète des contrôles. | Export d'un paquet de preuve contenant contrôles, écarts, horodatages, liens de corrélation. |
8. Scénarios de test (Given / When / Then)¶
- ST-44-01 — Bucket conforme
- Given un bucket du périmètre avec Object Lock actif et mode attendu
- When un cycle de contrôle est exécuté
-
Then le bucket est marqué conforme et une preuve horodatée est produite.
-
ST-44-02 — Absence Object Lock
- Given un bucket du périmètre sans Object Lock actif
- When un cycle de contrôle est exécuté
-
Then un écart critique ERR-44-01 est enregistré avec preuve.
-
ST-44-03 — Mode affaibli
- Given un bucket probatoire strict attendu en COMPLIANCE
- When le mode observé est GOVERNANCE
-
Then un écart critique ERR-44-03 est détecté dans le cycle courant.
-
ST-44-04 — Rétention bucket insuffisante
- Given un minimum requis défini pour une classe de données
- When la durée observée est inférieure
-
Then un écart critique ERR-44-04 est consigné avec comparaison attendue/observée.
-
ST-44-05 — Objet sans rétention
- Given un objet du périmètre uploadé via API
- When son état de rétention est contrôlé
-
Then il est classé critique ERR-44-05.
-
ST-44-06 — Objet avec rétention insuffisante
- Given un objet avec rétention effective inférieure au minimum de sa classe
- When le contrôle objet est exécuté
-
Then un écart critique ERR-44-06 est enregistré.
-
ST-44-07 — Réduction anormale entre deux cycles
- Given un objet/bucket observé conforme au cycle N
- When le cycle N+1 observe une durée de rétention réduite
-
Then un écart critique ERR-44-07 est produit.
-
ST-44-08 — Incohérence de réplication
- Given un objet répliqué source/cible
- When la cible présente une protection inférieure à la source
-
Then un écart critique ERR-44-08 est déclaré.
-
ST-44-09 — Trou de contrôle
- Given un intervalle de contrôle défini
- When aucun contrôle n'est exécuté au-delà de l'intervalle autorisé
-
Then un écart ERR-44-09 est déclenché.
-
ST-44-10 — Preuve audit
- Given une période d'audit demandée
- When le dossier de preuve est généré
- Then il contient tous les cycles, écarts et corrélations requis (CA-44-12).
9. Hypothèses explicites¶
| ID | Hypothèse | Impact si faux |
|---|---|---|
| H-44-01 | Une politique explicite bucket -> mode requis est disponible et maintenue. | Impossible de qualifier une divergence de mode. |
| H-44-02 | Une politique explicite classe de données -> durée minimale est disponible et maintenue. | Impossible de qualifier une rétention comme conforme/non conforme. |
| H-44-03 | Les fournisseurs OVH/AWS exposent des métadonnées suffisantes pour lire Object Lock/mode/rétention sans altération d'objet. | Contrôle incomplet ou non prouvable. |
| H-44-04 | L'intervalle de contrôle maximal autorisé (et tolérance) est défini contractuellement hors de cette US. | "Détection immédiate" non mesurable objectivement. |
| H-44-05 | Le périmètre exact des buckets probatoires (OVH + AWS) est inventorié de façon exhaustive. | Risque de faux négatifs (bucket non contrôlé). |
| H-44-06 | Les objets répliqués sont corrélables source/cible de manière fiable. | Impossible de tester INV-44-12 de façon exhaustive. |
| H-44-07 | Les événements d'administration liés au stockage sont journalisés de manière consultable. | Détection de modification suspecte dégradée. |
| H-44-08 | Les contraintes réglementaires (NF Z42-013/ISO 14641/eIDAS) sont traduites en règles internes opérationnelles versionnées. | Auditabilité juridique partielle ou contestable. |
10. Clarifications contractuelles¶
Les points suivants sont désormais figés contractuellement :
10.1 Intervalle de contrôle (ex-R-44-01)¶
| Paramètre | Valeur | Justification |
|---|---|---|
| Intervalle nominal | 60 minutes | Équilibre détection/coût Lambda |
| Tolérance | 15 minutes | Marge pour latence EventBridge |
| SLA alerte | < 5 minutes | Après détection d'écart critique |
Règle : Un cycle dépassant intervalle + tolérance (75 min) déclenche ERR-44-09.
10.2 Couverture objet (ex-R-44-02)¶
| Type d'objet | Couverture | Méthode |
|---|---|---|
| Objets récents (< 24h) | 100% | Exhaustif via ListObjectsV2 |
| Objets existants | 5% | Échantillonnage aléatoire |
| Buckets | 100% | Toujours exhaustif |
Règle : L'échantillonnage 5% garantit une couverture statistique suffisante pour détecter une dérive systémique.
10.3 Classification "probatoire strict" (ex-R-44-03)¶
La classification est déterminée par le tag S3 Compliance :
| Valeur du tag | Classification | Mode requis |
|---|---|---|
NF-Z42-013 | Probatoire strict | COMPLIANCE |
ISO-14641 | Probatoire strict | COMPLIANCE |
eIDAS | Probatoire strict | COMPLIANCE |
| Autre/absent | Standard | GOVERNANCE accepté |
Règle : INV-44-03 s'applique uniquement aux buckets tagués avec l'une des 3 valeurs ci-dessus.
10.4 Contraintes Deep Archive (ex-R-44-04)¶
| Storage Class | Validation niveau | Raison |
|---|---|---|
| STANDARD, INTELLIGENT_TIERING | Bucket + Objet | Accès immédiat |
| GLACIER, GLACIER_IR | Bucket + Objet | Restauration < 12h |
| DEEP_ARCHIVE | Bucket uniquement | Restauration 12-48h non compatible SLA 1h |
Règle : Les objets en DEEP_ARCHIVE sont exclus de l'échantillonnage objet. Leur conformité est présumée par la configuration bucket (rétention par défaut).
10.5 Delete-marker en réplication (ex-R-44-05)¶
Règle contractuelle (learning PD-6) :
La réplication des delete-markers DOIT être désactivée (
DeleteMarkerReplication.Status = Disabled) sur toutes les règles CRR du périmètre WORM.
| Paramètre | Valeur attendue | Écart si non conforme |
|---|---|---|
DeleteMarkerReplication.Status | Disabled | ERR-44-08 (critique multi-cloud) |
10.6 Format canonique de preuve (ex-R-44-06)¶
Schéma YAML obligatoire :
proof:
version: "1.0" # Fixe
type: "WORM_VALIDATION" # Fixe
cycle_id: "<uuid-v7>" # Identifiant unique du cycle
timestamp_iso: "<ISO8601>" # Ex: 2026-02-16T14:30:00Z
timestamp_epoch: <int> # Ex: 1771163400
scope:
buckets_total: <int> # Nombre de buckets du périmètre
buckets_checked: <int> # Nombre effectivement contrôlés
objects_sampled: <int> # Nombre d'objets échantillonnés
results:
status: "COMPLIANT|NON_COMPLIANT|PARTIAL"
buckets: [...] # Détail par bucket
gaps: [...] # Liste des écarts détectés
integrity:
hash_algorithm: "SHA3-256" # Fixe, jamais SHA-256
hash_value: "<hex lowercase>" # Empreinte de la preuve
correlation:
previous_cycle_id: "<uuid|null>" # Chaînage avec cycle précédent
chain_sequence: <int> # Numéro de séquence dans la chaîne
Règle d'intégrité : Le hash est calculé sur le contenu canonicalisé (JSON compact, clés triées) avant ajout du champ integrity.hash_value.
10.7 Durées minimales de rétention¶
| Classe de données | Durée minimale | Référence légale |
|---|---|---|
| Documents probatoires (contrats, actes) | 10 ans | Code civil art. 2224 |
| Documents comptables | 10 ans | Code commerce L123-22 |
| Documents RH (bulletins, contrats) | 50 ans | Code travail L3243-4 |
| Journaux d'audit sécurité | 5 ans | ISO 27001 |
10.8 Critère "modification administrative suspecte"¶
Une modification est classée suspecte (ERR-44-11) si : 1. Elle affecte un paramètre WORM (mode, rétention, Object Lock) 2. ET elle n'est pas accompagnée d'un ticket Jira référencé dans les logs CloudTrail 3. OU elle est effectuée par un compte non listé dans le groupe IAM worm-administrators
Règle : Les modifications autorisées doivent être tracées via le champ requestParameters.comment contenant un ID Jira (ex: PD-XXX).
11. Points hors périmètre (arbitrages externes)¶
Les points suivants restent hors périmètre PD-44 et nécessitent un arbitrage au niveau EPIC/gouvernance :
- Conflit purge RGPD : Droit à l'effacement vs immutabilité WORM → Arbitrage juridique requis
- Vault Lock vs Object Lock : Vault Lock AWS non utilisé dans le périmètre actuel (OVH non compatible)
- Purge post-rétention : Manuelle selon learning PD-4, automatisation hors scope PD-44
Références¶
- Epic : PD-198 — Storage
- JIRA : PD-44
- Repos concernés : infra
- Documents associés : Expression de besoin PD-44, référentiels NF Z42-013 / ISO 14641 / eIDAS, architecture technique ProbatioVault, learnings PD-4/PD-5/PD-6/PD-43/PD-46