Aller au contenu

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

  1. FN-44-01 — Vérification périodique de l'activation Object Lock (bucket)
  2. Entrée : liste des buckets du périmètre.
  3. Contrôle : état Object Lock actif.
  4. Sortie : statut conforme/non conforme + preuve horodatée.

  5. FN-44-02 — Vérification périodique du mode de rétention

  6. Entrée : politique attendue par bucket (mode requis).
  7. Contrôle : mode observé vs mode attendu.
  8. Sortie : statut + détection de changement + preuve.

  9. FN-44-03 — Vérification périodique des durées de rétention

  10. Entrée : minima de rétention par classe.
  11. Contrôle : configuration bucket + échantillon/lot d'objets du périmètre (selon règle de couverture définie) avec comparaison au minimum requis.
  12. Sortie : statut + liste des écarts + preuve.

  13. FN-44-04 — Vérification de l'héritage de rétention sur nouveaux objets

  14. Entrée : objets nouvellement créés sur période observée.
  15. Contrôle : chaque objet dispose d'une rétention effective conforme.
  16. Sortie : conformité/écarts + preuve.

  17. FN-44-05 — Vérification de cohérence WORM en réplication

  18. Entrée : couples source/cible d'objets répliqués.
  19. Contrôle : mode/durée cible >= exigences applicables et non affaiblis vs source.
  20. Sortie : conformité/écarts + preuve corrélée source-cible.

  21. FN-44-06 — Production d'un dossier de preuve audit

  22. Entrée : résultats de contrôles sur période.
  23. Contrôle : complétude, horodatage, traçabilité, intégrité des preuves.
  24. 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)

  1. ST-44-01 — Bucket conforme
  2. Given un bucket du périmètre avec Object Lock actif et mode attendu
  3. When un cycle de contrôle est exécuté
  4. Then le bucket est marqué conforme et une preuve horodatée est produite.

  5. ST-44-02 — Absence Object Lock

  6. Given un bucket du périmètre sans Object Lock actif
  7. When un cycle de contrôle est exécuté
  8. Then un écart critique ERR-44-01 est enregistré avec preuve.

  9. ST-44-03 — Mode affaibli

  10. Given un bucket probatoire strict attendu en COMPLIANCE
  11. When le mode observé est GOVERNANCE
  12. Then un écart critique ERR-44-03 est détecté dans le cycle courant.

  13. ST-44-04 — Rétention bucket insuffisante

  14. Given un minimum requis défini pour une classe de données
  15. When la durée observée est inférieure
  16. Then un écart critique ERR-44-04 est consigné avec comparaison attendue/observée.

  17. ST-44-05 — Objet sans rétention

  18. Given un objet du périmètre uploadé via API
  19. When son état de rétention est contrôlé
  20. Then il est classé critique ERR-44-05.

  21. ST-44-06 — Objet avec rétention insuffisante

  22. Given un objet avec rétention effective inférieure au minimum de sa classe
  23. When le contrôle objet est exécuté
  24. Then un écart critique ERR-44-06 est enregistré.

  25. ST-44-07 — Réduction anormale entre deux cycles

  26. Given un objet/bucket observé conforme au cycle N
  27. When le cycle N+1 observe une durée de rétention réduite
  28. Then un écart critique ERR-44-07 est produit.

  29. ST-44-08 — Incohérence de réplication

  30. Given un objet répliqué source/cible
  31. When la cible présente une protection inférieure à la source
  32. Then un écart critique ERR-44-08 est déclaré.

  33. ST-44-09 — Trou de contrôle

  34. Given un intervalle de contrôle défini
  35. When aucun contrôle n'est exécuté au-delà de l'intervalle autorisé
  36. Then un écart ERR-44-09 est déclenché.

  37. 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 :

  1. Conflit purge RGPD : Droit à l'effacement vs immutabilité WORM → Arbitrage juridique requis
  2. Vault Lock vs Object Lock : Vault Lock AWS non utilisé dans le périmètre actuel (OVH non compatible)
  3. 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