PD-2 — Configurer PostgreSQL RDS sur OVH¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 **Spécification** | *(ce document)* | | 🛠️ [Plan d'implémentation](PD-2-plan.md) | | | ✅ [Critères d'acceptation](PD-2-acceptability.md) | | | 📝 Retour d'expérience | *(à venir)* | [← Retour à infrastructure-souveraine](../PD-193-epic.md) · [↑ Index User Story](index.md)Métadonnées¶
- ID : PD-2
- Epic : PD-193 — INFRASTRUCTURE-SOUVERAINE
- Type : Infrastructure / Base de données
- Priorité : Critique
1. Résumé¶
Déployer et configurer une base de données PostgreSQL 15+ managée sur OVH Cloud, conforme aux exigences de souveraineté, sécurité, haute disponibilité et probatoire de l'architecture ProbatioVault.
2. Objectifs¶
Objectif principal¶
Disposer d'une instance PostgreSQL opérationnelle, sécurisée et monitorée, constituant le socle de stockage souverain des métadonnées ProbatioVault.
Sous-objectifs¶
- Activer la haute disponibilité (Multi-AZ OVH).
- Mettre en place des sauvegardes automatiques quotidiennes (rétention 7 à 30 jours).
- Garantir le chiffrement au repos (encryption at rest OVH).
- Restreindre l'accès via Private Network OVH + Security Groups.
- Activer le monitoring et les alertes.
- Préparer PostgreSQL aux usages ProbatioVault (RLS, audit, extensions).
3. Contexte¶
ProbatioVault repose sur :
- OVH Cloud comme socle souverain principal,
- PostgreSQL managé pour les métadonnées structurées et les journaux probatoires,
- Row-Level Security (RLS) pour l'isolation stricte multi-tenant,
- Le stockage objet WORM (OVH / AWS Glacier) pour les fichiers chiffrés (hors périmètre ici).
Cette US est une fondation critique pour :
- Authentification,
- Journaux probatoires,
- PRE,
- API B2B/B2C,
- Supervision et audit.
4. Livrables¶
Infrastructure¶
- Instance PostgreSQL 15+ OVH Cloud Database
- Mode High Availability (Multi-AZ) activé
- Sauvegardes automatiques quotidiennes
- Monitoring natif OVH Cloud
Réseau¶
- Accès exclusivement via Private Network OVH
- Aucune IP publique exposée
- Security Group restreint aux composants :
- API ProbatioVault
- Workers BullMQ
Paramétrage PostgreSQL¶
- Extensions activées :
pgcryptouuid-ossppg_stat_statements- Paramètres PostgreSQL adaptés :
wal_level = logicalmax_connectionsdimensionnémaintenance_work_memoptimiséautovacuumajusté pour tables append-only- RLS activé par défaut sur les schémas applicatifs
Documentation¶
- Guide d'accès (connection string, VPC)
- Politique de sauvegarde
- Diagramme de flux réseau
- Règles RLS globales
5. Spécifications techniques¶
5.1 Déploiement OVH Cloud Database¶
- Version PostgreSQL : >= 15
- Mode : High Availability
- Chiffrement disque : activé par OVH (AES-256)
- TLS obligatoire pour toutes les connexions
5.2 Sauvegardes¶
- Sauvegardes automatiques quotidiennes
- Rétention configurable : 7 à 30 jours
- Tests de restauration réguliers (hebdomadaires)
5.3 Réseau & Sécurité¶
- Connexion via Private Network OVH uniquement
- Aucune exposition Internet
- Filtrage IP strict (API + workers uniquement)
5.4 Monitoring & alertes¶
- Métriques suivies :
- CPU
- RAM
- I/O disque
- Connexions actives
- Locks
- Autovacuum
- Alertes :
- CPU > 80 %
- Connexions > 80 % du maximum
- Stockage > 90 %
- Autovacuum bloqué
5bis. Diagrammes¶
5bis.1 Diagramme d'etats — Cycle de vie de l'instance PostgreSQL¶
Les etats couvrent le provisionnement Terraform, le fonctionnement nominal HA, la degradation (alertes AC5), le failover Multi-AZ (AC1) et la restauration de sauvegarde (AC4).
stateDiagram-v2
[*] --> Provisioning : terraform apply
Provisioning --> Configuring : Instance creee (AC1 HA active)
Configuring --> Running : Extensions + RLS + TLS actifs (AC3, AC6, AC7)
Running --> Degraded : Alerte seuil depasse (AC5 — CPU>80%, conn>80%, disk>90%)
Degraded --> Running : Seuils retablis (monitoring OK)
Degraded --> Failover : Noeud primaire indisponible
Running --> Failover : Noeud primaire indisponible (Multi-AZ AC1)
Failover --> Running : Promotion replica, service retabli
Running --> BackupRestore : Restauration declenchee (AC4 — retention 7-30j)
BackupRestore --> Running : Restauration validee
Running --> Maintenance : Mise a jour PostgreSQL / vacuum
Maintenance --> Running : Maintenance terminee
Degraded --> [*] : Instance detruite (terraform destroy)
Running --> [*] : Instance detruite (terraform destroy) 5bis.2 Diagramme de sequence — Flux de connexion securisee¶
Ce flux illustre l'etablissement d'une connexion depuis l'API ProbatioVault vers PostgreSQL, a travers les couches reseau (AC2), chiffrement (AC3) et isolation tenant (AC7).
sequenceDiagram
participant API as API ProbatioVault
participant VPC as Private Network OVH
participant SG as Security Group
participant PG as PostgreSQL 15+ (HA)
participant RLS as Row-Level Security
API->>VPC : Connexion interne (pas d'IP publique — AC2)
VPC->>SG : Verification IP source (whitelist API + Workers)
SG-->>VPC : IP autorisee
VPC->>PG : Handshake TLS obligatoire (AC3 — encryption in transit)
PG-->>VPC : Certificat serveur OVH
VPC-->>API : Canal TLS etabli
API->>PG : Authentification utilisateur applicatif (probatio_app)
PG-->>API : Session ouverte
API->>PG : SELECT ... FROM vault_secure.documents WHERE ...
PG->>RLS : Evaluation politique RLS (user_id courant — AC7)
RLS-->>PG : Lignes filtrees par tenant
PG-->>API : Resultats isoles (zero fuite inter-tenant) 5bis.3 Diagramme de sequence — Sauvegarde et restauration¶
Ce flux couvre le cycle de sauvegarde automatique quotidien et la restauration a la demande, conformement aux exigences de retention (AC4) et de test hebdomadaire.
sequenceDiagram
participant CRON as Planificateur OVH
participant PG as PostgreSQL 15+ (HA)
participant STORE as Stockage Sauvegardes OVH
participant OPS as Operateur / Test hebdo
Note over CRON,STORE : Sauvegarde automatique quotidienne (AC4)
CRON->>PG : Declenchement snapshot quotidien
PG->>STORE : Dump chiffre (AES-256 at rest — AC3)
STORE-->>CRON : Sauvegarde enregistree (retention 7-30j)
Note over OPS,STORE : Test de restauration hebdomadaire (AC4)
OPS->>STORE : Demande restauration point-in-time
STORE->>PG : Restauration vers instance de test
PG-->>OPS : Integrite verifiee (checksum OK)
OPS-->>OPS : Validation donnees + extensions (AC6) 6. Sécurité & conformité¶
- Chiffrement at rest (OVH)
- Chiffrement in transit (TLS)
- Isolation stricte via RLS PostgreSQL
- Aucune donnée sensible stockée en clair
- Conforme aux exigences :
- NF Z42-013
- ISO 14641
- Architecture Zero-Knowledge ProbatioVault
7. Critères d'acceptation¶
AC1 — Déploiement¶
- PostgreSQL 15+ déployé
- Haute disponibilité active
AC2 — Réseau¶
- Aucun accès public
- Accès limité au VPC OVH
AC3 — Données¶
- Encryption at rest activée
- TLS obligatoire
AC4 — Sauvegardes¶
- Sauvegardes quotidiennes actives
- Rétention >= 7 jours
AC5 — Monitoring¶
- Dashboards OVH disponibles
- Alertes configurées
AC6 — Extensions¶
pgcrypto,uuid-ossp,pg_stat_statementsfonctionnels
AC7 — Préparation ProbatioVault¶
- RLS activé
- Tables audit append-only supportées
- Index prêts pour
user_id,doc_id, timestamps
AC8 — Documentation¶
- Procédure Terraform
- Paramétrage réseau
- Politique RLS
- Guide de connexion dev/prod
- Diagramme réseau PostgreSQL
8. Hors-périmètre¶
- Schémas applicatifs détaillés
- Réplication hors OVH
- Migration de données existantes
9. Dépendances¶
Prérequis¶
- PD-1 — Provisionnement VPC OVH
Dépendants¶
- PD-3 — API NestJS
- PD-5 — Journaux probatoires
10. Risques & mitigations¶
| Risque | Impact | Mitigation |
|---|---|---|
| Exposition publique | Critique | Private Network + SG strict |
| Autovacuum mal réglé | Perf | Profil dédié append-only |
| RLS incorrect | Fuite | Tests RLS PostgreSQL |
| Backups non testés | Perte | Tests restauration hebdo |
11. Definition of Done¶
- PostgreSQL 15+ opérationnel sur OVH Cloud
- Haute disponibilité active
- Sauvegardes quotidiennes validées
- Monitoring et alertes configurés
- Extensions activées
- RLS prêt pour les schémas applicatifs
- Documentation complète
Cette User Story établit la fondation souveraine, sécurisée et hautement disponible des métadonnées ProbatioVault.
User Story¶
- Implementation Plan
- Critères d'acceptabilité
Retour d'expérience (à venir)