Aller au contenu

PD-5 — Plan d'implémentation


📚 Navigation User Story | Document | | | ---------- | -- | | 📋 [Spécification](PD-5-specification.md) | | | 🛠️ **Plan d'implémentation** | *(ce document)* | | ✅ [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)

Objectif

Configurer AWS S3 Glacier Deep Archive à Paris (eu-west-3) pour l'archivage long terme des documents WORM.

Choix techniques retenus

  • Région : eu-west-3 (Paris)
  • Classe : Glacier Deep Archive
  • Vault Lock : Policy WORM irréversible
  • Rétention : 10 ans minimum

Architecture ciblée

terraform/modules/worm_glacier/
├── paris/
│   ├── s3.tf           # Bucket configuration
│   ├── lifecycle.tf    # Transitions
│   ├── iam.tf          # Roles et policies
│   ├── variables.tf
│   └── outputs.tf
├── main.tf             # Module principal
└── versions.tf

Découpage technique

Phase 1 : Bucket Glacier

  1. Créer bucket AWS :
resource "aws_s3_bucket" "documents_cold" {
  bucket = "probatiovault-cold-${var.environment}"

  tags = {
    Environment = var.environment
    Purpose     = "cold-archive"
    Compliance  = "NF-Z42-013"
  }
}

Phase 2 : Object Lock

  1. Configurer Object Lock COMPLIANCE :
resource "aws_s3_bucket_object_lock_configuration" "documents_cold" {
  bucket = aws_s3_bucket.documents_cold.id

  rule {
    default_retention {
      mode  = "COMPLIANCE"
      years = 10
    }
  }
}

Phase 3 : Vault Lock

  1. Configurer S3 Glacier Vault Lock :
resource "aws_glacier_vault_lock" "compliance" {
  complete_lock = true
  vault_name    = aws_glacier_vault.documents.name

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [{
      Effect    = "Deny"
      Principal = "*"
      Action    = ["glacier:DeleteArchive"]
      Resource  = aws_glacier_vault.documents.arn
    }]
  })
}

Phase 4 : Lifecycle transitions

  1. Configurer transition automatique :
resource "aws_s3_bucket_lifecycle_configuration" "cold_archive" {
  bucket = aws_s3_bucket.documents_cold.id

  rule {
    id     = "transition-to-deep-archive"
    status = "Enabled"

    transition {
      days          = 0
      storage_class = "DEEP_ARCHIVE"
    }
  }
}

Phase 5 : IAM

  1. Créer rôle pour réplication :
  2. GetObject depuis OVH/source
  3. PutObject vers Glacier
  4. Pas de DeleteObject

  5. Créer policy restrictive

Phase 6 : Monitoring

  1. CloudWatch metrics :
  2. NumberOfObjects
  3. BucketSizeBytes
  4. ReplicationLatency

  5. Alertes :

  6. Échec réplication
  7. Quota approché

Phase 7 : Tests

  1. Test upload → transition
  2. Test restoration (12-48h)
  3. Test Object Lock (suppression impossible)

Points de vigilance

  • Restoration time : 12-48h pour Deep Archive
  • Vault Lock : IRRÉVERSIBLE une fois complete
  • Coûts : Retrieval fees élevés
  • Région : Paris pour souveraineté

Hors périmètre

  • Réplication Frankfurt (→ PD-6)
  • Upload initial (→ migration depuis OVH)