Sécurité · doc publique

Pour qu’un DPO le lise un vendredi.

Pas une checkbox marketing. Chaque couche est documentée, testée, et conçue en partant du principe qu’un régulateur, un client ou un auditeur va poser la question.

CH
souveraineté par défaut
mode strict vérifiable
10 ans
audit append-only
modification refusée en base · trigger
0
requête sans isolation
RLS PostgreSQL par tenant
4
langues d’interface
FR · DE · IT · EN

06 couches

Chaque maillon documenté. Chaque clé tournée.

On ne vend pas un cadenas. On vend un cockpit auditable bout en bout.

01 · couche

Isolation tenant renforcée par la base.

PostgreSQL Row-Level Security activée sur chaque table. Le code applicatif n’écrit jamais un WHERE tenantId — Prisma pose un GUC de session lu par la policy. Un bug qui oublie de scoper renvoie zéro ligne, jamais les données d’un autre tenant.

  • RLS Postgres forcée · policy par tenant sur chaque table tenantée
  • UUID v7 partout · pas d’incrément séquentiel
  • Rôle applicatif non-superuser — la base refuse le bypass même en cas de bug
  • Tests d’isolation à deux tenants, joués contre une base réelle avec le rôle applicatif
couche 01

illustration du principe

02 · couche

Souveraineté suisse, vérifiable par le code.

Infrastructure principale chez Infomaniak — datacenters en Suisse. Le mode souveraineté suisse stricte désactive toute fonctionnalité nécessitant un traitement hors de Suisse — une règle appliquée côté backend, pas un réglage d’interface. Les flux qui subsistent sont divulgués : facturation Stripe (Irlande), notifications push minimisées. Le registre des sous-traitants est public.

  • Postgres, Redis, S3 (MinIO) · infrastructure principale suisse (Infomaniak)
  • Mode strict : tout traitement hors de Suisse désactivé, vérifié par le backend
  • AI Gateway souverain par défaut (Llama 3.3 via Infomaniak)
  • LLM frontière (Anthropic — inférence possible hors UE/CH, encadrée par les CCT et le Data Privacy Framework), uniquement sur opt-in explicite
couche 02

illustration du principe

03 · couche

Secrets hors du code, jamais dans le dépôt.

Les secrets ne vivent pas dans le code : les clés sont fournies par l’environnement du serveur, accessible au seul administrateur système. Les secrets sensibles stockés en base (TOTP, signature des webhooks) sont chiffrés par enveloppe. La rotation automatisée et le scan de secrets automatisé arrivent avec un gestionnaire de secrets dédié.

  • Secrets en variables d’environnement serveur · hors du dépôt
  • HTTPS partout (Let’s Encrypt, HSTS)
  • Authentification maison · Argon2id, MFA TOTP disponible
  • Stripe webhooks · vérification HMAC sur le raw body
couche 03

illustration du principe

04 · couche

Conformité native : nLPD, RGPD.

Pas une checkbox cosmétique. Chaque décision IA est tracée (modèle, input, output, score, alternatives). Le journal d’audit est append-only — imposé par un trigger PostgreSQL — conservé 10 ans, consultable dans l’application et exportable (JSON) à la demande du DPO ou de l’inspection.

  • Droit à l’oubli RGPD en self-service tenant (DELETE cascadant)
  • Décisions IA journalisées : modèle, entrées, sorties, alternatives
  • Pseudonymisation des PII dans tous les logs Pino
  • CSP strict + helmet headers sur l’API NestJS
couche 04

illustration du principe

05 · couche

Journal d’audit append-only, 10 ans.

Chaque mutation business est journalisée : qui, quoi, quand, depuis quelle IP, avec quel résultat. La base de données refuse toute modification d’une entrée (trigger PostgreSQL). La suppression n’est ouverte que par deux chemins déclarés : la purge de rétention légale et l’effacement complet d’un tenant à sa demande.

  • Modification (UPDATE) toujours refusée par un trigger PostgreSQL
  • Consultable in-app · exportable via API (JSON)
  • Rétention 10 ans · alignée sur la conservation des livres (CO)
  • Schéma versionné — pas de breaking change sur les anciennes lignes
couche 05

illustration du principe

06 · couche

Sauvegardes et reprise, sans sur-promesse.

Les procédures de restauration sont documentées dans des runbooks versionnés avec le code. Le programme de sauvegarde hors-site et les engagements chiffrés (RPO/RTO) sont en cours de mise en place — nous les présentons comme un chantier en cours, pas comme un acquis.

  • Runbooks de restauration versionnés avec le code
  • Données sur infrastructure suisse Infomaniak
  • RPO/RTO contractuels : introduits avec les formules Moyenne et Grande
  • État réel du dispositif communiqué sur demande — sans embellissement
couche 06

illustration du principe

Roadmap conformité

Ce qui est en place. Ce qui arrive.

En production

Pratiques nLPD · RGPD

Objectif Q4 2026

Dossier de sécurité complet, partagé sur demande

Objectif 2027

Sauvegardes chiffrées hors de la machine de production

Objectif 2027

Export du journal d’audit en libre-service

Posez vos questions.

Dossier de sécurité, architecture, registre des sous-traitants, DPIA — partagés sur demande, dès la première discussion.

Sécurité — SwissPlanif · SwissPlanif