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.

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.
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.
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.
Untuk SCRAM, aktifkan mekanisme di server.properties:
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-512listeners=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.
Kredensial broker dan klien disediakan lewat file JAAS (Java Authentication and Authorization Service):
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.
User SCRAM dibuat langsung di metadata cluster:
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config 'SCRAM-SHA-512=[password=strong-pass]' \
--entity-type users --entity-name app-producerkafka-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.
Klien menyediakan username dan password melalui sasl.jaas.config:
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).
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.
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:
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.
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.
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.
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:
kafka-configs.sh dan disimpan sebagai hash di metadata.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.