Skip to main content

Multi-tenancy & isolation

Comment Synapse isole les données entre utilisateurs et minds — frontières de sécurité expliquées.


Multi-tenancy & isolation

Synapse est multi-tenant : plusieurs utilisateurs, chacun avec plusieurs minds, entièrement isolés les uns des autres. Cette page explique le modèle d'isolation.

Hiérarchie des tenants

Instance Synapse
  │
  ├── Compte utilisateur 1 (email : alice@example.com)
  │   ├── Mind A (Mind Key mk_aaa...)
  │   │   ├── Memories (accessibles uniquement via mk_aaa...)
  │   │   ├── Tasks
  │   │   └── Chat
  │   └── Mind B (Mind Key mk_bbb...)
  │       └── ... (isolé du Mind A)
  │
  ├── Compte utilisateur 2 (email : bob@example.com)
  │   └── Mind C (Mind Key mk_ccc...)
  │       └── ... (isolé des minds d'Alice)
  │
  └── ... (plus d'utilisateurs)

Niveaux d'isolation

Niveau 1 : isolation utilisateur

Chaque compte utilisateur est isolé. Alice ne peut pas :

  • Voir les minds de Bob
  • Accéder aux mémoires de Bob (même avec son JWT)
  • Lister les infos de compte de Bob

Appliqué par : colonne user_id sur toutes les tables, le JWT contient user_id, toutes les requêtes filtrent par user_id.

Niveau 2 : isolation de mind

Au sein d'un utilisateur, chaque mind est isolé. Le Mind A ne peut pas :

  • Voir les mémoires du Mind B
  • Accéder aux tâches, chat, scripts du Mind B

Appliqué par : colonne mind_id sur toutes les tables de données, la Mind Key contient mind_id, toutes les requêtes filtrent par mind_id.

L'isolation par Mind Key est la frontière de sécurité principale. Une Mind Key fuite accordant un accès complet aux données de ce mind — mais UNIQUEMENT ce mind.

Jetons d'authentification

Jeton Portée Ce à quoi il peut accéder
Mind Key Un seul mind Données de ce mind uniquement
JWT Compte utilisateur Gestion de compte (créer/lister/supprimer des minds)
Computer Token Un seul ordinateur Commandes de cet ordinateur

Accès inter-minds

Au sein du même utilisateur

L'utilisateur peut accéder à tous ses minds via JWT (ex. GET /minds les liste tous). Mais pour lire/écrire des données mémoire, il a besoin de la Mind Key spécifique.

Entre utilisateurs

Les utilisateurs ne peuvent pas accéder aux données des autres — SAUF s'ils partagent explicitement un mind via l'API Sharing :

# Alice partage le Mind A avec Bob
curl -X POST https://synapse.schaefer.zone/sharing \
  -H "Authorization: Bearer ALICE_JWT" \
  -d '{"mind_id": "m_aaa", "email": "bob@example.com", "role": "read"}'

Après le partage, Bob peut accéder au Mind A via son JWT (en lecture seule si role=read).

Frontières de sécurité

┌─────────────────────────────────────────────────┐
│              Instance Synapse                    │
│  ┌─────────────────────────────────────────┐    │
│  │         User Account Boundary           │    │
│  │  ┌──────────────┐  ┌──────────────┐    │    │
│  │  │  Mind Bound. │  │  Mind Bound. │    │    │
│  │  │  (Mind Key)  │  │  (Mind Key)  │    │    │
│  │  │              │  │              │    │    │
│  │  │  Memories    │  │  Memories    │    │    │
│  │  │  Tasks       │  │  Tasks       │    │    │
│  │  │  Chat        │  │  Chat        │    │    │
│  │  │  Scripts     │  │  Scripts     │    │    │
│  │  └──────────────┘  └──────────────┘    │    │
│  └─────────────────────────────────────────┘    │
└─────────────────────────────────────────────────┘

Schémas multi-tenant courants

Schéma 1 : utilisateur unique, mind unique

Le plus courant pour les utilisateurs individuels d'agents LLM.

  • 1 compte utilisateur
  • 1 mind
  • 1 Mind Key
  • Toutes les mémoires dans un seul scope

Schéma 2 : utilisateur unique, plusieurs minds

Pour les utilisateurs avec plusieurs contextes (travail, personnel, projets).

  • 1 compte utilisateur
  • N minds (ex. « work », « personal », « project-x »)
  • N Mind Keys
  • Chaque session LLM utilise une Mind Key

Schéma 3 : mind partagé en équipe

Pour les équipes collaborant sur un projet.

  • 1 utilisateur crée le mind (obtient la Mind Key)
  • Le créateur partage avec les membres de l'équipe via JWT
  • Tous les membres y accèdent via JWT (ou Mind Key partagée)
Partager une Mind Key donne un accès complet en lecture/écriture. Pour la collaboration en équipe, préférez l'API Sharing (basée JWT) au partage direct de Mind Keys.

Schéma 4 : fournisseur SaaS

Pour les applications qui intègrent Synapse comme couche mémoire.

  • Chaque client = 1 compte utilisateur
  • Chaque projet client = 1 mind
  • L'application stocke les Mind Keys par client/projet
  • Isolation complète entre clients

Vérification de l'isolation

Test : une Mind Key ne peut pas accéder à d'autres minds

# La clé du Mind A ne peut pas lire les mémoires du Mind B
curl -H "Authorization: Bearer mk_aaa..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Renvoie uniquement les mémoires du Mind A

curl -H "Authorization: Bearer mk_bbb..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Renvoie uniquement les mémoires du Mind B (résultats différents)

Test : un JWT ne peut pas lire directement les données de mémoire

# Le JWT peut lister les minds
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/minds
# Renvoie : liste des minds

# Le JWT NE PEUT PAS lire les mémoires (besoin d'une Mind Key)
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/memory/recall
# Renvoie : 401 Unauthorized

Bonnes pratiques

Prochaines étapes