Skip to main content

Multi-Tenancy & Isolasi

Bagaimana Synapse mengisolasi data antar pengguna dan mind — batasan keamanan dijelaskan.


Multi-Tenancy & Isolasi

Synapse bersifat multi-tenant: beberapa pengguna, masing-masing dengan beberapa mind, sepenuhnya terisolasi satu sama lain. Halaman ini menjelaskan model isolasi.

Hierarki Tenant

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)

Level Isolasi

Level 1: Isolasi Pengguna

Setiap akun pengguna terisolasi. Alice tidak dapat:

  • Melihat mind Bob
  • Mengakses memori Bob (bahkan dengan JWT miliknya)
  • Mendaftar info akun Bob

Diterapkan oleh: kolom user_id di semua tabel, JWT berisi user_id, semua kueri memfilter berdasarkan user_id.

Level 2: Isolasi Mind

Dalam satu pengguna, setiap mind terisolasi. Mind A tidak dapat:

  • Melihat memori Mind B
  • Mengakses tugas, chat, skrip Mind B

Diterapkan oleh: kolom mind_id di semua tabel data, Mind Key berisi mind_id, semua kueri memfilter berdasarkan mind_id.

Isolasi Mind Key adalah batasan keamanan utama. Mind Key yang bocor memberikan akses penuh ke data mind tersebut — tetapi HANYA mind itu.

Token Autentikasi

Token Cakupan Apa yang dapat diakses
Mind Key Satu mind Hanya data mind tersebut
JWT Akun pengguna Manajemen akun (buat/daftar/hapus mind)
Computer Token Satu komputer Perintah komputer tersebut

Akses Lintas-Mind

Dalam pengguna yang sama

Pengguna dapat mengakses semua mind mereka melalui JWT (mis. GET /minds mendaftar semua). Tetapi untuk membaca/menulis data memori, mereka memerlukan Mind Key spesifik.

Antar pengguna

Pengguna tidak dapat mengakses data satu sama lain — KECUALI mereka secara eksplisit berbagi mind melalui 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"}'

Setelah dibagikan, Bob dapat mengakses Mind A melalui JWT miliknya (read-only jika role=read).

Batasan Keamanan

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

Pola Multi-Tenancy Umum

Pola 1: Satu Pengguna, Satu Mind

Paling umum untuk pengguna agen LLM individu.

  • 1 akun pengguna
  • 1 mind
  • 1 Mind Key
  • Semua memori dalam satu cakupan

Pola 2: Satu Pengguna, Beberapa Mind

Untuk pengguna dengan beberapa konteks (kerja, pribadi, proyek).

  • 1 akun pengguna
  • N mind (mis. "kerja", "pribadi", "proyek-x")
  • N Mind Key
  • Setiap sesi LLM menggunakan satu Mind Key

Pola 3: Mind Tim Bersama

Untuk tim yang berkolaborasi dalam suatu proyek.

  • 1 pengguna membuat mind (mendapatkan Mind Key)
  • Pembuat berbagi dengan anggota tim melalui JWT
  • Semua anggota tim mengakses melalui JWT (atau Mind Key bersama)
Berbagi Mind Key memberikan akses baca/tulis penuh. Untuk kolaborasi tim, lebih baik gunakan Sharing API (berbasis JWT) daripada berbagi Mind Key secara langsung.

Pola 4: Penyedia SaaS

Untuk aplikasi yang menyematkan Synapse sebagai lapisan memori mereka.

  • Setiap pelanggan = 1 akun pengguna
  • Setiap proyek pelanggan = 1 mind
  • Aplikasi menyimpan Mind Key per pelanggan/proyek
  • Isolasi penuh antar pelanggan

Verifikasi Isolasi

Tes: Mind Key tidak dapat mengakses mind lain

# 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)

Tes: JWT tidak dapat membaca data memori langsung

# 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

Praktik Terbaik

Langkah Berikutnya