Aller au contenu

PD-5 — Configurer AWS Glacier Deep Archive (Paris)


📚 Navigation User Story | Document | | | ---------- | -- | | 📋 **Spécification** | *(ce document)* | | 🛠️ [Plan d'implémentation](PD-5-plan.md) | | | ✅ [Critères d'acceptation](PD-5-acceptability.md) | | | 📝 [Retour d'expérience](PD-5-rex.md) | | [← Retour à storage](../PD-198-epic.md) · [↑ Index User Story](index.md)

Métadonnées

  • ID : PD-5
  • Epic : PD-198 — STORAGE
  • Type : Infrastructure / Probatoire
  • Priorité : Critique (WORM obligatoire)
  • Sprint : Fondations – Stockage probatoire
  • Région AWS : eu-west-3 (Paris)
  • Dépendances : PD-1, PD-3, PD-4

1. Contexte

ProbatioVault repose sur une architecture probatoire multi-niveaux garantissant l'immutabilité, la résilience et la conformité juridique long terme des archives numériques.

AWS Glacier Deep Archive (région Paris) constitue le Niveau 2 — stockage probatoire WORM, positionné entre :

  • Niveau 1 : OVH Object Storage (actif)
  • Niveau 3 : Cross-Region Replication vers Francfort (PD-6)

Ce niveau assure la conservation légale longue durée et l'immutabilité administrative conforme aux référentiels NF Z42-013, ISO 14641 et eIDAS.


2. Objectif

Mettre en place un stockage AWS Glacier Deep Archive en région Paris permettant :

  • la conservation WORM forte (Object Lock COMPLIANCE) ;
  • la rétention réglementaire longue durée (10 à 50 ans) ;
  • l'immutabilité administrative via Vault Lock ;
  • la résilience multi-décennies ;
  • un déploiement 100 % automatisé via Terraform.

3. Portée

Inclus

  • Création des buckets S3 Glacier Deep Archive (Paris)
  • Activation Object Lock COMPLIANCE
  • Configuration Vault Lock
  • Lifecycle vers Glacier Deep Archive
  • Politiques IAM strictes (least privilege)
  • Journalisation des accès S3 (append-only)
  • Automatisation Terraform
  • Tests d'immutabilité

Hors périmètre

  • Export OVH → AWS (PD-5x)
  • CRR vers Francfort (PD-6)
  • OVH Cold Archive (PD-7)
  • Chiffrement client-side (PD-97)

4. Architecture cible

OVH Object Storage → AWS S3 Paris (Object Lock COMPLIANCE) → Glacier Deep Archive (Vault Lock)

5. Spécifications techniques

5.1 Buckets S3

Environnement Bucket
DEV documents-cold-dev
PROD documents-cold-prod

Paramètres obligatoires :

  • Région : eu-west-3
  • Versioning : ENABLED
  • Object Lock : ENABLED (création uniquement)

5.2 Object Lock — Mode COMPLIANCE

  • Mode : COMPLIANCE
  • Rétention minimale : 1 jour
  • Rétention maximale : 50 ans
  • Suppression, modification, overwrite et bypass interdits

⚠️ Irréversible.


5.3 Vault Lock

  • Verrouillage définitif des politiques de rétention
  • Interdiction de réduction des durées
  • Interdiction de suppression administrative

Preuve attendue : état Vault Lock = In Effect.


5.4 Lifecycle Glacier Deep Archive

Étape Délai
Upload Jour 0
Transition Glacier DA Jour 1
Rétention documents 10 ans
Rétention audit logs 50 ans

5.5 IAM — Least Privilege

Rôle dédié : probatiovault-probatoire-worm

Autorisations :

  • PutObject avec Object Lock headers
  • GetObject / HeadObject

Interdictions :

  • DeleteObject
  • BypassGovernanceRetention
  • Permissions admin

5.6 Journalisation des accès

  • S3 Server Access Logging activé
  • Bucket cible append-only
  • Object Lock COMPLIANCE
  • Rétention : 50 ans

6. Automatisation Terraform

Modules requis :

  • aws_s3_bucket
  • aws_s3_bucket_versioning
  • aws_s3_bucket_object_lock_configuration
  • aws_s3_bucket_lifecycle_configuration
  • aws_glacier_vault_lock

Sorties attendues :

  • ARN du bucket
  • Statut Object Lock
  • Statut Vault Lock

Terraform doit être idempotent, auditable et versionné.


6bis. Diagrammes Mermaid

6bis.1 Diagramme d'états — Cycle de vie d'un objet probatoire

Représente les états successifs d'un objet depuis son upload jusqu'à la conservation longue durée. Les transitions sont irréversibles (INV : Object Lock COMPLIANCE §5.2, Vault Lock §5.3).

stateDiagram-v2
    [*] --> Uploaded : PutObject + Object Lock headers\n(IAM: probatiovault-probatoire-worm §5.5)

    Uploaded --> ObjectLockCompliance : Object Lock COMPLIANCE activé\n(rétention 10-50 ans §5.4)
    note right of ObjectLockCompliance : INV §5.2 — Mode COMPLIANCE\nSuppression, modification,\noverwrite et bypass INTERDITS\n(irréversible)

    ObjectLockCompliance --> GlacierDeepArchive : Lifecycle transition J+1\n(§5.4)
    note right of GlacierDeepArchive : INV §5.3 — Vault Lock In Effect\nRéduction durée INTERDITE\nSuppression admin INTERDITE

    GlacierDeepArchive --> Restitution : RestoreObject\n(délai 12-48h)
    Restitution --> GlacierDeepArchive : Expiration copie temporaire

    GlacierDeepArchive --> Expiration : Fin rétention\n(10 ans docs / 50 ans logs §5.4)
    Expiration --> [*]

    state "S3 Standard\n(eu-west-3)" as Uploaded
    state "Object Lock\nCOMPLIANCE" as ObjectLockCompliance
    state "Glacier Deep Archive\n+ Vault Lock" as GlacierDeepArchive
    state "Restore en cours" as Restitution
    state "Rétention expirée" as Expiration

6bis.2 Diagramme de séquence — Upload probatoire WORM

Représente le flux nominal d'archivage d'un objet vers Glacier Deep Archive avec les vérifications d'immutabilité. Couvre les invariants IAM least privilege (§5.5), Object Lock COMPLIANCE (§5.2), journalisation append-only (§5.6) et lifecycle Glacier DA (§5.4).

sequenceDiagram
    participant OVH as OVH Object Storage<br/>(Niveau 1)
    participant IAM as IAM Role<br/>probatiovault-probatoire-worm
    participant S3 as AWS S3 Paris<br/>(eu-west-3)
    participant OL as Object Lock<br/>COMPLIANCE
    participant LOG as Bucket Logs<br/>(append-only §5.6)
    participant LC as Lifecycle Rule
    participant GDA as Glacier Deep Archive<br/>+ Vault Lock

    Note over OVH,GDA: INV §5.5 — Least Privilege : PutObject + Object Lock headers uniquement

    OVH->>IAM: AssumeRole (probatiovault-probatoire-worm)
    IAM-->>OVH: Credentials temporaires (STS)

    OVH->>S3: PutObject + x-amz-object-lock-mode: COMPLIANCE<br/>+ x-amz-object-lock-retain-until-date
    S3->>OL: Applique rétention COMPLIANCE
    Note right of OL: INV §5.2 — Irréversible<br/>DeleteObject → AccessDenied<br/>BypassGovernanceRetention → INTERDIT

    S3->>LOG: Access log (PUT)
    Note right of LOG: INV §5.6 — Object Lock COMPLIANCE<br/>Rétention 50 ans, append-only

    S3-->>OVH: 200 OK + VersionId

    Note over LC,GDA: INV §5.4 — Transition automatique J+1

    LC->>S3: Évaluation lifecycle (quotidienne)
    LC->>GDA: Transition objet → Glacier Deep Archive
    Note right of GDA: INV §5.3 — Vault Lock In Effect<br/>Réduction durée / suppression admin INTERDITES

    GDA->>LOG: Access log (TRANSITION)

7. Tests & Acceptance Criteria

Tests obligatoires

  • Upload objet WORM → OK
  • Tentative suppression → AccessDenied
  • Vérification Object Lock COMPLIANCE
  • Transition Glacier DA < 48h
  • Impossible de réduire rétention

Acceptance Criteria

  • Bucket existant en eu-west-3
  • Object Lock COMPLIANCE actif
  • Vault Lock actif
  • Lifecycle Glacier DA opérationnel
  • Logs append-only immuables
  • Déploiement Terraform sans action manuelle

8. Livrables

  • Module Terraform modules/worm_glacier/
  • State Terraform versionné
  • Documentation infra/PROBATOIRE_WORM.md
  • Scripts de tests d'immutabilité
  • Preuve Vault Lock In Effect

9. Definition of Done

  • Stockage Glacier Deep Archive opérationnel
  • WORM fort irréversible validé
  • Vault Lock actif et prouvé
  • Terraform idempotent
  • Tests d'immutabilité validés
  • Documentation complète

User Story