PD-6 — Retour d'expérience¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 [Spécification](PD-6-specification.md) | | | 🛠️ [Plan d'implémentation](PD-6-plan.md) | | | ✅ [Critères d'acceptation](PD-6-acceptability.md) | | | 📝 **Retour d'expérience** | *(ce document)* | [← Retour à storage](../PD-198-epic.md) · [↑ Index User Story](index.md)1. Résumé exécutif¶
La User Story PD-6 visait à activer la Cross-Region Replication (CRR) entre AWS S3 Paris (eu-west-3) et Frankfurt (eu-central-1) pour garantir la résilience géographique des archives probatoires WORM. L'implémentation fournit un sous-module Terraform frankfurt/ avec bucket destination Object Lock COMPLIANCE, rôle IAM CRR dédié, configuration CRR avec RTC (15 min SLA), et monitoring CloudWatch. Cependant, 1 écart MAJEUR est identifié : SSE-S3 au lieu de SSE-KMS avec clés distinctes Paris/Francfort, ainsi que 2 écarts MINEURS : nommage buckets divergent de la spec et metric BytesPendingReplication absente. Verdict : ACCEPTÉ AVEC RÉSERVES.
2. Points fluides¶
- CRR activée : réplication Paris → Frankfurt opérationnelle avec rule ID
crr-paris-to-frankfurt - RTC (Replication Time Control) : SLA 15 minutes garanti avec
replication_time.status = "Enabled" - Object Lock COMPLIANCE répliqué : mode COMPLIANCE identique source/destination
- Delete marker replication désactivée : conformité WORM (pas de suppression répliquée)
- Storage class DEEP_ARCHIVE : coût minimal sur la replica Frankfurt
- IAM role dédié :
pv-crr-replication-roleavec permissions minimales - Permissions Object Lock :
s3:PutObjectRetention,s3:PutObjectLegalHoldincluses - Bucket policies restrictives :
DenyAllDeletes+HTTPSOnlysur Frankfurt - Public access block : toutes options à
truesur destination - Versioning activé : prérequis CRR et Object Lock respecté
- prevent_destroy : protection Terraform contre suppression accidentelle
- Metrics CRR activées :
metrics.status = "Enabled"avec event_threshold 15 min - Tags conformité : NF-Z42-013, RetentionMax, Region, CRR role documentés
- Logging intentionnel : justification documentée (source has logging)
- replica_modifications : réplication des modifications de metadata activée
- Script de test :
test-crr.shdisponible pour validation
3. Points difficiles¶
| Difficulté | Contexte |
|---|---|
| SSE-KMS non implémenté | Spec demande clés KMS distinctes Paris/Francfort, implémentation utilise SSE-S3 |
| Nommage buckets | Spec: pv-archives-paris/frankfurt, code: ${project_name}-archives-frankfurt-${env} |
| BytesPendingReplication absent | Seul OperationsPendingReplication configuré dans CloudWatch |
| KMS cross-region | SSE-KMS CRR nécessite replica_kms_key_id et permissions KMS cross-account |
| Glacier Vault Lock initial | Prévu initialement, supprimé car redondant avec S3 Object Lock |
4. Hypothèses révélées tardivement¶
| Hypothèse initiale | Réalité découverte |
|---|---|
| SSE-KMS requis pour CRR | FAUX — SSE-S3 fonctionne, KMS nécessite configuration additionnelle |
| Nommage standardisé pv-* | FAUX — Terraform utilise pattern ${project_name}-*-${environment} |
| Glacier Vault Lock nécessaire | FAUX — S3 Object Lock COMPLIANCE suffit pour conformité WORM |
| Logging obligatoire destination | FAUX — Source logging suffit car CRR = seul chemin d'écriture |
| Object Lock répliqué automatiquement | VRAI — Avec permissions PutObjectRetention/LegalHold |
5. Invariants complexes à implémenter¶
| Invariant | Complexité |
|---|---|
| Object Lock COMPLIANCE identique | Source et destination doivent avoir même mode et rétention minimale |
| Delete marker replication = Disabled | Obligatoire pour WORM, empêche propagation suppressions logiques |
| Versioning requis des deux côtés | CRR nécessite versioning Enabled sur source ET destination |
| RTC SLA 15 min | Replication Time Control garanti mais implique coûts additionnels |
| Ordre de création | Bucket destination + Object Lock AVANT activation CRR |
| IAM cross-region | Role dans Paris, policy couvre buckets Paris et Frankfurt |
6. Dette technique¶
| Dette | Impact | Priorité |
|---|---|---|
| SSE-S3 au lieu SSE-KMS | Pas de séparation clés Paris/Frankfurt, audit KMS indisponible | MOYENNE |
| Nommage divergent | Documentation/spec à aligner avec code réel | BASSE |
| BytesPendingReplication absent | Visibilité volume réplication limitée | BASSE |
| Documentation CRR | /docs/infra/aws/crr/ partiellement créé | BASSE |
| Plan de reprise | Procédure restore Frankfurt → Paris à compléter | MOYENNE |
7. Risques résiduels¶
| Risque | Probabilité | Impact | Mitigation suggérée |
|---|---|---|---|
| Latence CRR > 15 min | Faible | MOYEN | Alertes configurées, RTC garantit SLA |
| Échec réplication silencieux | Faible | ÉLEVÉ | Metric OperationsFailedReplication surveillée |
| Coûts RTC | Moyenne | FAIBLE | RTC payant mais SLA critique pour conformité |
| Restore depuis Frankfurt | Moyenne | MOYEN | Tester procédure annuellement avec délais Glacier |
| KMS cross-region complexe | N/A | N/A | Non implémenté, SSE-S3 utilisé |
8. Améliorations processus¶
| Amélioration | Bénéfice attendu |
|---|---|
| Aligner nommage spec/code | Éviter confusion documentation vs réalité |
| Documenter choix SSE-S3 vs KMS | ADR justifiant le compromis |
| Ajouter BytesPendingReplication | Visibilité volume en plus du nombre d'opérations |
| Monitoring mensuel métriques CRR | Détection proactive anomalies |
| Test restore annuel Frankfurt | Validation procédure de reprise |
| Suivi budgétaire CRR | Documenter coûts RTC et DEEP_ARCHIVE |
9. Enseignements clés¶
-
S3 Object Lock COMPLIANCE + CRR = solution WORM complète — Glacier Vault Lock initialement prévu s'est révélé redondant. S3 Object Lock COMPLIANCE offre la même garantie d'immutabilité avec une architecture plus simple.
-
Delete marker replication doit être explicitement désactivée pour WORM — Par défaut, la CRR peut répliquer les delete markers, ce qui compromettrait l'immutabilité. Le paramètre
delete_marker_replication.status = "Disabled"est critique pour la conformité. -
RTC (Replication Time Control) est essentiel pour la conformité SLA — Le SLA 15 minutes garantit que les données sont répliquées dans un délai prévisible, critique pour la résilience probatoire. Cette fonctionnalité est payante mais justifiée.
-
Le logging sur le bucket destination CRR est optionnel — Le bucket source capture toutes les écritures. Le bucket destination ne reçoit des objets que via CRR, rendant le logging destination redondant. L'alerte SonarQube S6258 est documentée comme intentionnelle.
-
SSE-KMS CRR nécessite une configuration additionnelle significative — La réplication avec SSE-KMS requiert
replica_kms_key_id, des permissions KMS cross-region, et un blocsse_kms_encrypted_objects. Le choix SSE-S3 simplifie l'implémentation mais ne satisfait pas l'exigence de clés distinctes.