Aller au contenu

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 :
  • pgcrypto
  • uuid-ossp
  • pg_stat_statements
  • Paramètres PostgreSQL adaptés :
  • wal_level = logical
  • max_connections dimensionné
  • maintenance_work_mem optimisé
  • autovacuum ajusté 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_statements fonctionnels

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