Tiga Lapis yang Terpisah
| Lapis | Pertanyaan yang dijawab | Mekanisme |
|---|---|---|
| Enkripsi | Bisakah orang lain menguping? | TLS |
| Autentikasi | Siapa Anda? | SASL atau sertifikat klien mTLS |
| Otorisasi | Apa yang boleh Anda lakukan? | ACL |
Konfigurasi bawaan menerima koneksi anonim tanpa enkripsi. Siapa pun yang bisa menjangkau broker dapat membaca seluruh topik, menulis pesan palsu, dan menghapus topik. Konfigurasi pengembangan yang tidak sengaja terbawa ke jaringan yang lebih luas adalah salah satu penyebab kebocoran data yang paling sering terjadi.
Pilihan SASL
| Mekanisme | Cocok untuk | Catatan |
|---|---|---|
SASL/PLAIN | Sederhana, di atas TLS | Kata sandi terkirim polos — wajib dibungkus TLS |
SASL/SCRAM-SHA-512 | Pilihan default yang baik | Kredensial disimpan di dalam Kafka, tidak pernah dikirim polos |
SASL/GSSAPI | Lingkungan Kerberos | Kompleks; hanya bila memang sudah ada Kerberos |
SASL/OAUTHBEARER | Integrasi OIDC modern | Token berumur pendek, cocok untuk lingkungan cloud |
mTLS | Komunikasi antar layanan | Identitas dari sertifikat; perlu pengelolaan rotasi |
listeners=SASL_SSL://:9093 security.inter.broker.protocol=SASL_SSL sasl.enabled.mechanisms=SCRAM-SHA-512 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512 ssl.keystore.location=/etc/kafka/secrets/broker.keystore.jks ssl.truststore.location=/etc/kafka/secrets/broker.truststore.jks authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer allow.everyone.if.no.acl.found=false
Setelan ini sering dinyalakan "sementara" saat migrasi agar layanan lama tidak rusak, lalu tidak pernah dimatikan. Efeknya: setiap sumber daya yang belum punya ACL terbuka untuk semua pihak yang terautentikasi. Selesaikan migrasi dengan menambahkan ACL, lalu kembalikan nilainya ke false.
ACL: Beri Hak Sekecil Mungkin
# Produser hanya boleh menulis ke satu topik kafka-acls.sh --bootstrap-server localhost:9093 --command-config admin.properties \ --add --allow-principal User:layanan-pesanan \ --operation Write --operation Describe --topic pesanan # Konsumen: baca topik + pakai satu group id kafka-acls.sh --bootstrap-server localhost:9093 --command-config admin.properties \ --add --allow-principal User:layanan-notifikasi \ --operation Read --operation Describe --topic pesanan \ --group layanan-notifikasi
Kesalahan paling umum saat menerapkan ACL: memberi izin Read pada topik tetapi lupa izin pada --group. Konsumen gagal bergabung ke grup dengan galat otorisasi yang menunjuk grup, bukan topik — dan pesan itu mudah disalahtafsirkan.
auto.create.topics.enable=true membuat salah ketik nama topik menghasilkan topik baru dengan konfigurasi default — biasanya satu partisi tanpa replikasi. Setel false di produksi dan kelola topik lewat kode infrastruktur.
Kuota: Mencegah Satu Klien Menjatuhkan Klaster
# Batasi produser tertentu ke 10 MB/detik kafka-configs.sh --bootstrap-server localhost:9093 --alter \ --add-config 'producer_byte_rate=10485760,consumer_byte_rate=20971520' \ --entity-type clients --entity-name layanan-impor
Klien yang melampaui kuota tidak mendapat galat; broker menahan responsnya sehingga klien melambat dengan sendirinya. Ini membuat pekerjaan impor massal tidak dapat menenggelamkan lalu lintas transaksional, tanpa perlu perubahan kode di sisi klien.