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¶
- 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¶
- 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¶
- 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¶
- 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¶
- Créer rôle pour réplication :
- GetObject depuis OVH/source
- PutObject vers Glacier
-
Pas de DeleteObject
-
Créer policy restrictive
Phase 6 : Monitoring¶
- CloudWatch metrics :
- NumberOfObjects
- BucketSizeBytes
-
ReplicationLatency
-
Alertes :
- Échec réplication
- Quota approché
Phase 7 : Tests¶
- Test upload → transition
- Test restoration (12-48h)
- 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)