Belajar Apache Kafka - Authentication dengan SASL
Episode 16 of 36

Belajar Apache Kafka - Authentication dengan SASL

Episode ini membahas autentikasi SASL di Kafka: mekanisme PLAIN, SCRAM, GSSAPI, dan OAUTHBEARER, konfigurasi broker dan klien, file JAAS, pembuatan user SCRAM dengan kafka-configs, serta integrasi OAuth 2.0 dengan identity provider.

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

Pendahuluan

Listener PLAINTEXT mengizinkan siapa pun yang mencapai port broker untuk terhubung. Dalam produksi, kalian harus tahu siapa yang terhubung sebelum memutuskan apa yang boleh dilakukan — inilah tugas autentikasi. Kafka memakai kerangka SASL (Simple Authentication and Security Layer) untuk mekanisme ini.

Episode 16 ini akan membahas empat mekanisme SASL yang didukung Kafka: PLAIN, SCRAM, GSSAPI (Kerberos), dan OAUTHBEARER. Kalian akan belajar konfigurasi di sisi broker dan klien, struktur file JAAS, pembuatan user SCRAM dengan kafka-configs.sh, serta integrasi OAuth 2.0 dengan identity provider.

Mekanisme SASL

SASL/PLAIN

PLAIN mengirim username dan password dalam bentuk teks — karenanya harus dipakai bersama enkripsi TLS (SASL_SSL). Sederhana dan cocok untuk development atau integrasi dengan sistem yang sudah menyimpan password statis. Tidak ada dukungan hash di broker; kredensial harus ditangani mekanisme lain seperti LDAP atau file JAAS.

SASL/SCRAM

SCRAM (Salted Challenge Response Authentication Mechanism) adalah mekanisme berbasis challenge-response yang tidak mengirim password apa pun ke jaringan. Kafka mendukung SCRAM-SHA-256 dan SCRAM-SHA-512. Kredensial disimpan di broker sebagai salted hash dan dibuat dengan kafka-configs.sh — ini mekanisme yang paling direkomendasikan untuk deployment modern.

SASL/GSSAPI dan SASL/OAUTHBEARER

  • GSSAPI: autentikasi Kerberos yang umum di enterprise besar; memerlukan KDC dan prinsipal Kerberos per service.
  • OAUTHBEARER: autentikasi OAuth 2.0 dengan access token; kredensial terpusat di identity provider dan mendukung short-lived token. Confluent dan banyak setup cloud memakai mekanisme ini.

Konfigurasi SASL

Sisi Broker

Untuk SCRAM, aktifkan mekanisme di server.properties:

Aktifkan SCRAM di broker
listeners=SASL_SSL://:9093
listener.security.protocol.map=SASL_SSL:SASL_SSL
sasl.enabled.mechanisms=SCRAM-SHA-512
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512

listeners=SASL_SSL://:9093 berarti semua koneksi melewati TLS dan SASL. sasl.enabled.mechanisms mendaftarkan mekanisme yang boleh dipakai, dan sasl.mechanism.inter.broker.protocol menentukan mekanisme komunikasi antar broker.

File JAAS

Kredensial broker dan klien disediakan lewat file JAAS (Java Authentication and Authorization Service):

Contoh file JAAS broker
KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule
    required username="kafka-broker" password="<password>";
};

Untuk SCRAM, JAAS hanya digunakan saat startup; kredensial sebenarnya diambil dari metadata cluster. Jangan commit file JAAS ke repositori — simpan sebagai secret dan batasi permission file.

Implementasi SCRAM

Membuat User dengan kafka-configs

User SCRAM dibuat langsung di metadata cluster:

Buat user SCRAM
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
  --alter --add-config 'SCRAM-SHA-512=[password=strong-pass]' \
  --entity-type users --entity-name app-producer

kafka-configs.sh --alter --entity-type users membuat kredensial untuk prinsipal app-producer. Password disimpan sebagai salted hash di metadata; setelah ini, app-producer bisa memakai user tersebut untuk autentikasi.

Konfigurasi Klien

Klien menyediakan username dan password melalui sasl.jaas.config:

Konfigurasi klien SASL_SSL
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule \
  required username="app-producer" password="strong-pass";

security.protocol=SASL_SSL meminta enkripsi dan autentikasi, dan sasl.jaas.config membawa kredensial klien. Perhatikan: klien juga memerlukan truststore untuk memverifikasi sertifikat broker (detail TLS di episode 18).

Credential Management

Jangan menulis password di konfigurasi yang ter-version control. Praktik terbaik: ambil dari secret manager (Vault, AWS Secrets Manager) saat aplikasi dimulai, atau memakai variable substitution. Rotasi password secara berkala dengan --alter --add-config tanpa menghentikan klien.

Integrasi OAuth

OAuth 2.0 Authentication

Dengan OAUTHBEARER, klien memperoleh access token dari identity provider lalu mengirimkannya ke broker. Broker memvalidasi token — biasanya lewat introspection endpoint atau validasi JWT signature — tanpa menyimpan kredensial pengguna:

Klien OAUTHBEARER
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.login.callback.handler.class=com.example.OAuthLoginCallbackHandler
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule \
  required clientId="app" clientSecret="secret" scope="kafka";

sasl.mechanism=OAUTHBEARER mengaktifkan alur token. Handler login mengatur akuisisi token, sementara broker memakai sasl.server.callback.handler.class untuk validasi.

Token Validation dan Identity Provider

Broker memvalidasi token melalui introspection ke identity provider (misalnya Keycloak, Okta, Auth0) atau dengan memverifikasi signature JWT menggunakan public key. Kebijakan keamanan, seperti audience dan expiry, ditentukan oleh issuer. Keunggulan utama: pengelolaan user, rotasi kredensial, dan revoke terpusat di identity provider.

Custom OAuth Handlers

Untuk kebutuhan khusus — misalnya token format internal atau cache introspection — kalian mengimplementasikan AuthenticateCallbackHandler dan LoginCallbackHandler. Ini memberi fleksibilitas penuh untuk mengintegrasikan Kafka dengan ekosistem auth perusahaan.

Info

Urutan penerapan yang disarankan: mulai dengan SCRAM untuk kontrol langsung dan sederhana, lalu pindah ke OAuth ketika sudah ada identity provider terpusat. Kerberos hanya jika memang sudah menjadi standar infrastruktur kalian.

Penutup

Di episode 16 ini kalian sudah memahami empat mekanisme SASL, konfigurasi broker dan klien dengan file JAAS, pembuatan user SCRAM dengan kafka-configs.sh, serta integrasi OAuth 2.0 dengan identity provider dan custom handler.

Inti yang harus dibawa pulang:

  • SASL_SSL menggabungkan autentikasi dan enkripsi dalam satu koneksi.
  • SCRAM-SHA-512 adalah mekanisme yang disarankan untuk deployment baru.
  • User SCRAM dibuat dengan kafka-configs.sh dan disimpan sebagai hash di metadata.
  • JAAS menyediakan kredensial; jangan pernah commit ke repositori.
  • OAUTHBEARER memindahkan pengelolaan user ke identity provider.
  • Validasi token OAuth lewat introspection atau signature JWT.

Di episode 17 selanjutnya kita akan menentukan apa yang boleh dilakukan user yang sudah terautentikasi: authorization dengan ACLs. Kalian akan belajar prinsipal, resource types, operasi, pembuatan ACL dengan kafka-acls.sh, pola least privilege, serta custom authorizer.

Belajar Apache Kafka - Authentication dengan SASL | Belajar Apache Kafka