Skip to main content

Multi-tenancy & isolatie

Hoe Synapse data isoleert tussen gebruikers en minds — uitleg van beveiligingsgrenzen.


Multi-tenancy & isolatie

Synapse is multi-tenant: meerdere gebruikers, elk met meerdere minds, volledig geïsoleerd van elkaar. Deze pagina legt het isolatiemodel uit.

Tenant-hiërarchie

Synapse Instance
  │
  ├── User Account 1 (email: alice@example.com)
  │   ├── Mind A (Mind Key mk_aaa...)
  │   │   ├── Memories (only accessible via mk_aaa...)
  │   │   ├── Tasks
  │   │   └── Chat
  │   └── Mind B (Mind Key mk_bbb...)
  │       └── ... (isolated from Mind A)
  │
  ├── User Account 2 (email: bob@example.com)
  │   └── Mind C (Mind Key mk_ccc...)
  │       └── ... (isolated from Alice's minds)
  │
  └── ... (more users)

Isolatieniveaus

Niveau 1: Gebruikersisolatie

Elk gebruikersaccount is geïsoleerd. Alice kan niet:

  • Bobs minds zien
  • Bobs herinneringen benaderen (zelfs met haar JWT)
  • Bobs accountinformatie tonen

Afgedwongen door: user_id-kolom op alle tabellen, JWT bevat user_id, alle query's filteren op user_id.

Niveau 2: Mind-isolatie

Binnen een gebruiker is elke mind geïsoleerd. Mind A kan niet:

  • Mind B's herinneringen zien
  • Mind B's taken, chat of scripts benaderen

Afgedwongen door: mind_id-kolom op alle datatabellen, Mind Key bevat mind_id, alle query's filteren op mind_id.

Mind Key-isolatie is de primaire beveiligingsgrens. Een gelekte Mind Key verleent volledige toegang tot die mind's data — maar ALLÉÉN die mind.

Authenticatie-tokens

Token Bereik Wat het kan benaderen
Mind Key Eén mind Alleen die mind's data
JWT Gebruikersaccount Accountbeheer (minds aanmaken/tonen/verwijderen)
Computer Token Eén computer Die computer's commando's

Cross-mind-toegang

Binnen dezelfde gebruiker

Gebruikers kunnen al hun minds benaderen via JWT (bijv. GET /minds toont allemaal). Maar om memory-data te lezen/schrijven, hebben ze de specifieke Mind Key nodig.

Tussen gebruikers

Gebruikers kunnen elkaars data niet benaderen — TENZIJ ze expliciet een mind delen via de Sharing-API:

# Alice shares Mind A with 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"}'

Na het delen kan Bob Mind A benaderen via zijn JWT (alleen-lezen als role=read).

Beveiligingsgrenzen

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

Veelvoorkomende multi-tenant-patronen

Patroon 1: Eén gebruiker, één mind

Meest voorkomend voor individuele LLM-agent-gebruikers.

  • 1 gebruikersaccount
  • 1 mind
  • 1 Mind Key
  • Alle herinneringen in één scope

Patroon 2: Eén gebruiker, meerdere minds

Voor gebruikers met meerdere contexten (werk, persoonlijk, projecten).

  • 1 gebruikersaccount
  • N minds (bijv. "work", "personal", "project-x")
  • N Mind Keys
  • Elke LLM-sessie gebruikt één Mind Key

Patroon 3: Team-gedeelde mind

Voor teams die samenwerken aan een project.

  • 1 gebruiker maakt de mind aan (krijgt Mind Key)
  • Maker deelt met teamleden via JWT
  • Alle teamleden benaderen via JWT (of gedeelde Mind Key)
Het delen van een Mind Key geeft volledige lees/schrijftoegang. Voor teamsamenwerking geeft u de voorkeur aan de Sharing-API (JWT-gebaseerd) boven het direct delen van Mind Keys.

Patroon 4: SaaS-provider

Voor apps die Synapse insluiten als hun memory-laag.

  • Elke klant = 1 gebruikersaccount
  • Elk klantenproject = 1 mind
  • App slaat Mind Keys op per klant/project
  • Volledige isolatie tussen klanten

Isolatieverificatie

Test: Mind Key kan andere minds niet benaderen

# Mind A's key cannot read Mind B's memories
curl -H "Authorization: Bearer mk_aaa..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind A's memories

curl -H "Authorization: Bearer mk_bbb..." \
     "https://synapse.schaefer.zone/memory/search?q=test"
# Returns only Mind B's memories (different results)

Test: JWT kan geen memory-data direct lezen

# JWT can list minds
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/minds
# Returns: list of minds

# JWT CANNOT read memories (need Mind Key)
curl -H "Authorization: Bearer YOUR_JWT" \
     https://synapse.schaefer.zone/memory/recall
# Returns: 401 Unauthorized

Best practices

Volgende stappen