Belajar NATS - Accounts & Multi-Tenancy
Series/Belajar NATS/Episode 12
Episode 12 of 23

Belajar NATS - Accounts & Multi-Tenancy

Episode ini membahas accounts untuk isolasi logika antar tim dan service, users beserta permission subscribe, publish, dan response, lalu nsc dan JWT untuk membuat accounts dan users, serta ekspor dan impor subject antar account.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Semua contoh sejauh ini memakai akun default tunggal. Episode 12 ini membuka dunia multi-tenancy: memisahkan service, tim, dan lingkungan ke dalam accounts sehingga satu server NATS bisa melayani banyak tenant secara aman dan terisolasi.

Kita akan membahas konsep accounts, users dan permission, lalu perangkat nsc yang mengelola semuanya lewat JWT. Ini fondasi keamanan yang akan dilanjutkan di episode 13.

Konsep Accounts

Isolasi Logika antar Service

Account adalah unit isolasi di NATS: subject, stream, consumer, dan permission dalam satu account tidak bisa dilihat account lain tanpa izin eksplisit. Bayangkan account sebagai namespace terpisah di server yang sama.

Accounts dalam satu server
account PAYMENTS   -> subject payments.>, stream PAY_ORDERS
account ORDERS     -> subject orders.>, stream ORDERS
account ADMINS     -> subject admin.>, akses semua

Struktur account PAYMENTS menunjukkan setiap account punya dunianya sendiri. Dua account boleh memakai nama subject yang sama — misalnya orders.created — tanpa saling mengganggu.

Kapan Membuat Account

Beberapa pola umum:

  • Satu account per tim atau departemen.
  • Satu account per service untuk isolasi ketat.
  • Satu account khusus admin untuk monitoring.
Melihat info akun
nats account info

nats account info menampilkan akun yang sedang dipakai beserta kuota JetStream. Dengan accounts, kuota stream dan resource bisa dialokasikan per account secara adil.

Users dan Permission

User dalam Account

Setiap account berisi satu atau lebih user. Setiap user punya identitas dan permission sendiri:

User dengan permission
nats add user --account ORDERS --name api-worker

Perintah nats add user --account ORDERS --name api-worker (dalam lingkungan nsc) membuat user api-worker di account ORDERS. Permission menentukan apa yang boleh dilakukan user itu.

Permission Subscribe, Publish, dan Response

NATS membedakan tiga tipe permission:

  • Subscribe: subject yang boleh didengarkan.
  • Publish: subject yang boleh dipublish.
  • Response: subject reply yang boleh dipakai untuk request-reply.
Permission per user
authorization {
  users = [
    { user: worker, permissions: {
      subscribe: { allow: ["jobs.>"] }
      publish: { allow: ["jobs.done"] }
      response: { allow: ["_INBOX.>"] }
    }}
  ]
}

Blok permissions di atas memberi user worker hak subscribe semua subject jobs, publish hanya ke jobs.done, dan membalas request apa pun. Model response ini yang menjaga request-reply tetap aman.

nsc dan JWT

Apa itu nsc

nsc (NATS Tooling) adalah toolkit untuk mengelola operator, accounts, dan users berbasis JWT. JWT tidak disimpan di file konfigurasi server — setiap client membawa kredensialnya sendiri.

Menyiapkan nsc
nsc add operator --generate-signing-key
nsc add account ORDERS
nsc add user --account ORDERS api-worker
nsc generate creds --account ORDERS --user api-worker

Rangkaian nsc add account ORDERS membuat account, nsc add user membuat user, dan nsc generate creds menghasilkan file kredensial .creds untuk dipakai client. Alur ini jauh lebih aman daripada menyebarkan password plaintext.

JWT dan Sistem Decentralized

JWT memindahkan kepercayaan dari server ke tanda tangan kriptografis:

Menjalankan server dengan resolvers JWT
nats-server --js --auth config.json

Dengan JWT, server tidak perlu menyimpan daftar user. Client menghadirkan token yang ditandatangani operator, dan server memverifikasi tanda tangannya. Ini memungkinkan akun dan user dibuat dan dicabut tanpa merestart server.

Ekspor dan Impor Subject

Berbagi Subject antar Account

Untuk komunikasi lintas account, gunakan ekspor dan impor:

Ekspor subject dari account
exports: [
  { stream: { subject: "orders.created" } }
]

Blok exports di account ORDERS mengizinkan subject orders.created dibagikan. Account lain lalu mengimpornya:

Impor subject di account lain
imports: [
  { stream: { subject: "orders.created" }, to: "orders.imported" }
]

Blok imports menerima subject tersebut dan memetakannya ke orders.imported di account penerima. Ekspor-impor ini memungkinkan arsitektur multi-account yang bersih — setiap account memilih apa yang dipublikasi dan apa yang dikonsumsi.

Tip

Gunakan pola ekspor-impor dengan prefix to untuk menghindari tabrakan subject antar account. Dengan begini, source account bebas menamai subjectnya sendiri dan account konsumen tetap punya namespace yang terkendali.

Penutup

Episode 12 memperkenalkan multi-tenancy NATS: accounts sebagai unit isolasi logika antar tim dan service, users dengan permission subscribe, publish, dan response, perangkat nsc yang mengelola semuanya lewat JWT, serta ekspor-impor subject untuk komunikasi lintas account yang terkontrol.

Inti yang harus dibawa pulang:

  • Account mengisolasi subject, stream, dan permission antar tenant.
  • Setiap account bisa punya banyak user dengan permission berbeda.
  • Permission dibedakan menjadi subscribe, publish, dan response.
  • nsc membuat operator, account, dan user berbasis JWT.
  • JWT memindahkan otentikasi ke tanda tangan kriptografis.
  • Ekspor dan impor subject menghubungkan account dengan kendali penuh.

Di episode 13 selanjutnya kita akan membahas security & authentication — autentikasi user dan password, token, nkeys dengan pasangan kunci publik-privat, serta JWT, dilanjutkan TLS untuk enkripsi koneksi dan authorization per user, lengkap dengan best practice di production. Keamanan NATS mulai diuji di medan sesungguhnya.