BIP Vigilance
- Intégrité
- Signature
- SaaS
- Résilience
- Architecture
- Architecture hexagonale stricte (Ports & Adapters). Vérification multi-registres parallélisée (SIRENE, BODACC, VIES). Scellement AWS KMS (RSA-PSS SHA-256) avec vérification publique par QR code.
- Stack & Delivery
- FastAPI · Next.js 15 · PostgreSQL · Redis. Auth OAuth2 / JWT (ES256). Billing Stripe. Déployé sur Railway + Vercel.
Concevoir une plateforme KYS produisant des rapports scellés et vérifiables publiquement
Décisions structurantes
- Signature asymétrique des rapports via AWS KMS (RSA-PSS SHA-256)
- Vérification publique sans authentification par token
- Idempotency systématique sur opérations coûteuses
- Résilience externe via retry worker + circuit breaker Redis
- Architecture hexagonale stricte (domain pur, ports Protocol Python)
1. Contexte
Vigilance est une plateforme SaaS de conformité fournisseur (Know Your Supplier).
Elle :
- interroge des sources publiques (INSEE/SIRENE, BODACC, VIES)
- agrège les signaux de conformité
- produit un verdict (VERT / ROUGE / GRIS)
- génère un rapport PDF scellé cryptographiquement
- permet une vérification publique d’authenticité sans authentification
L’objectif n’est pas la gestion documentaire. C’est la production de preuves techniques de conformité réglementaire.
2. Contraintes et problèmes d’architecture
Intégrité et non-répudiation
- Hash SHA-256 du contenu PDF
- Payload canonique déterministe
- Signature asymétrique RSA-PSS SHA-256 via AWS KMS
- Clé privée non exportable
- Token public de vérification (QR code embarqué)
Objectif : détecter toute altération et garantir l’identité du signataire.
Confidentialité
- Chiffrement au repos S3 SSE-AES256
- Accès via URL présignée (15 minutes)
Choix assumé : pas de chiffrement end-to-end. Les documents sont générés côté serveur. Confidentialité et intégrité sont traitées séparément.
Traçabilité critique
- Audit log append-only
- actor, IP, user-agent
- correlation ID
- before/after state JSONB
Couvre aujourd’hui : création d’assessment et scellement de rapport.
APIs publiques instables
Sources externes sujettes à timeouts, erreurs 5xx et indisponibilités temporaires.
Retry contrôlé — Backoff exponentiel jusqu’à 48h.
Circuit breaker Redis — CLOSED / OPEN / HALF_OPEN déclenché par seuils d’erreur.
Idempotency — Clé d’idempotence sur création d’assessment.
Évolution temporelle légale
Modélisation bitemporale :
valid_from/valid_to— réalité métiersys_from/sys_to— réalité système
Permet de reconstituer l’état légal à une date donnée et d’auditer ce que le système savait au moment du rapport.
Multi-tenant SaaS
- Isolation applicative CustomerAccount + Membership
- 3 modes : INDIVIDUAL / SELF / ON_BEHALF
- Pas d’isolation DB — arbitrage de simplicité opérationnelle contre isolation physique
3. Décisions d’architecture clés
Signature via AWS KMS
KMS utilisé pour la signature asymétrique — pas pour le chiffrement.
Pipeline :
- Génération PDF Playwright
- Hash SHA-256
- Payload canonique
- Signature KMS
- Persistence atomique (S3 + DB + token + audit)
La clé privée ne quitte jamais KMS.
Architecture hexagonale stricte
- Domaine pur immuable
- Ports via Protocol Python
- Adapters pour infra et sécurité
La sécurité s’injecte sans polluer le métier.
Idempotency comme garde critique
Protège contre :
- double scellement
- double coût réseau
- incohérences métier
Circuit breaker positionné sur la récupération
L’échec initial est accepté. La résilience est assurée par le flux de retry contrôlé.
Vérification publique
Token sans authentification permettant à un tiers de vérifier l’authenticité d’un rapport.
4. Sécurité et accès
Authentification
- OAuth2 PKCE multi-provider
- DPoP pour machine-to-machine
- Cookies httpOnly
- CSRF double submit cookie
Pipeline middleware contractuel
logging → rate limiting → CORS → session → trusted host → CSRF → security headers → correlation ID → locale
Pipeline explicite de sécurité et d’observabilité.
5. Frontend comme composant d’architecture
- Vérification publique sans auth
- Propagation correlation ID
- CSRF auto-refresh
- CSP stricte
- UI multi-tenant alignée backend
6. Mécanismes SaaS
Quotas
AVAILABLE → WARNING_80 → EXHAUSTED_PAYABLE → EXHAUSTED_BLOCKED
Contrôlés avant création, déduits après succès.
Base de données
Support des garanties précédentes :
- PostgreSQL partitionné mensuellement
- Registre global d’unicité
- JSONB pour signaux
- Async everywhere
7. Garanties et limites
Garanties techniques
- Intégrité publiquement vérifiable
- Traçabilité critique
- Résilience externe
- Idempotency
- Isolation applicative
Limites assumées
- Pas de cadre juridique formel
- Pas de benchmarks de charge
- Audit partiel des flux
8. Leçons d’architecture
- Confidentialité ≠ intégrité
- Déléguer la crypto réduit le risque
- Idempotency est non négociable
- Circuit breaker indispensable
- Bitemporal essentiel pour données légales
- Ports Protocol = sécurité injectable proprement