Episode ini membahas autentikasi NATS mulai dari user dan password, token, nkeys, hingga JWT, lalu TLS untuk enkripsi koneksi dan authorization per user, ditutup dengan best practice keamanan di production.

Episode 12 membangun struktur multi-tenant. Episode 13 ini mengunci pintunya: keamanan. Semua fitur messaging tidak ada artinya jika siapa pun bisa terhubung, mendengar semua subject, atau mengirim pesan atas nama service lain.
Kita akan menaiki tangga autentikasi NATS dari yang paling sederhana hingga paling aman — user dan password, token, nkeys, JWT — lalu TLS untuk enkripsi dan authorization untuk kontrol akses. Ini bekal wajib sebelum masuk produksi.
Cara paling sederhana mendefinisikan kredensial adalah blok authorization di file konfigurasi:
authorization {
users = [
{ user: admin, password: "sup3r-rahasia" }
{ user: worker, password: "rahasia-kerja" }
]
}Blok authorization di atas mendefinisikan dua user dengan password masing-masing. Client terhubung dengan mengirim user dan password pada URL koneksi. Metode ini mudah tapi password tersimpan di file — hanya cocok untuk pengembangan.
Level berikutnya adalah token: satu kredensial bersama untuk semua client. Cocok untuk lingkungan sederhana atau internal service:
authorization {
token: "s3cr3t-token-bersama"
}Konfigurasi token: "s3cr3t-token-bersama" memakai satu token. Semua client yang tahu token bisa terhubung. Sederhana, tapi pencabutan token berarti mengganti untuk semua client sekaligus.
NKeys adalah pasangan kunci publik-privat untuk identitas tanpa password. Seed key (privat) disimpan rahasia, public key dipakai server untuk verifikasi.
nsc add user --account ORDERS --name worker-nkeyUser yang dibuat via nsc add user otomatis memiliki nkey. Saat client connect, server mengirim challenge acak, client menandatanganinya dengan seed key, dan server memverifikasi dengan public key. Tidak ada password yang melewati jaringan.
JWT adalah token yang membawa identitas dan permission user di dalamnya:
nsc generate creds --account ORDERS --user api-worker -o api-worker.credsnsc generate creds menghasilkan file .creds berisi JWT dan seed key. Client memakai file ini untuk koneksi:
nats sub orders.> --creds api-worker.credsFlag --creds api-worker.creds membuat CLI otomatis memakai JWT untuk autentikasi. Keunggulan JWT: user baru bisa dibuat dan dicabut tanpa restart server, dan setiap user hanya membawa permission miliknya.
Autentikasi hanya setengah dari keamanan. TLS mengenkripsi seluruh lalu lintas agar tidak bisa disadap:
tls {
cert_file: "/etc/nats/certs/server-cert.pem"
key_file: "/etc/nats/certs/server-key.pem"
ca_file: "/etc/nats/certs/ca.pem"
verify: true
}Blok tls mengaktifkan TLS dengan sertifikat server. verify: true meminta client juga menghadirkan sertifikat — mutual TLS. Client koneksi pun harus memakai tls://:
nats sub orders.> --server tls://nats.internal:4222 --tlsURL tls://nats.internal:4222 mengarahkan client ke koneksi terenkripsi. Di production, gabungkan TLS dengan JWT atau nkeys untuk autentikasi dan enkripsi sekaligus.
Warning
Jangan pernah menjalankan NATS production tanpa TLS di jaringan yang tidak sepenuhnya dipercaya. Otentikasi membuktikan siapa kalian, tapi hanya TLS yang memastikan data tidak bisa dibaca saat transit.
Best practice production menggabungkan semua lapisan:
autentikasi -> JWT atau nkeys (siapa kalian)
authorization -> permission per user (apa yang boleh)
enkripsi -> TLS mutual (tidak bisa disadap)
isolasi -> accounts dan ekspor-impor (batas antar tenant)Pola enkripsi -> TLS mutual menutup celah terakhir: bahkan setelah terautentikasi, data tetap tidak terbaca pihak ketiga. Kombinasikan dengan rotation kredensial rutin dan audit log untuk postur keamanan yang matang.
Episode 13 mengamankan NATS kalian: mulai dari user dan password serta token untuk lingkungan sederhana, nkeys untuk identitas kriptografis, JWT untuk kredensial decentralized yang bisa dicabut kapan saja, TLS untuk enkripsi koneksi, hingga kombinasi authorization dan isolasi account di production.
Inti yang harus dibawa pulang:
verify: true mengaktifkan mutual TLS.Di episode 14 selanjutnya kita akan membahas clustering & leaf nodes — membangun cluster multi-server dengan Raft consensus untuk JetStream, gateway antar cluster, toleransi kehilangan node, lalu menghubungkan server edge ke hub lewat leaf nodes untuk skenario IoT dan federasi multi-region. Skala NATS kalian mulai merambah multi-mesin.