All Products
Search
Document Center

E-MapReduce:Gunakan otentikasi pengguna LDAP

Last Updated:Mar 27, 2026

Topik ini menjelaskan cara mengonfigurasi otentikasi berbasis LDAP untuk Kafka E-MapReduce (EMR) dan memandu Anda melalui contoh lengkap end-to-end menggunakan Kafka open source versi 2.4.1.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Membuat kluster Dataflow dengan layanan Kafka dan OpenLDAP yang dipilih. Lihat Buat kluster Dataflow Kafka.

  • Menggunakan kluster Kafka yang menjalankan versi minor lebih baru dari EMR V3.44.0 atau EMR V5.10.0.

  • Men-deploy layanan EMR OpenLDAP (atau layanan LDAP eksternal) di dalam kluster. Topik ini menggunakan layanan EMR OpenLDAP.

Catatan penggunaan

Untuk mengonfigurasi otentikasi berbasis kelompok pengguna, fitur memberOf overlay harus diaktifkan untuk layanan LDAP, atau atribut memberOf harus dapat dikonfigurasi untuk masing-masing pengguna LDAP.

Konfigurasikan pengguna LDAP untuk otentikasi

Langkah 1: Buat superuser

Lewati langkah ini jika Anda sudah memiliki superuser Kafka.

Superuser Kafka memiliki akses ke semua resource Kafka. Dalam konfigurasi ini, superuser digunakan untuk mengakses node broker dan komponen Kafka. Langkah ini menambahkan superuser Kafka ke layanan EMR OpenLDAP.

  1. Sambungkan ke node master-1-1 kluster melalui SSH. Lihat Masuk ke kluster.

  2. Buat file bernama kafka.ldif dengan konten berikut. Ini akan menambahkan pengguna LDAP dengan UID kafka dan password kafka-secret.

    dn: uid=kafka,ou=people,o=emr
    cn: kafka
    sn: kafka
    objectClass: inetOrgPerson
    userPassword: kafka-secret
    uid: kafka
  3. Jalankan perintah berikut untuk menambahkan pengguna LDAP:

    ldapadd -H ldap://master-1-1:10389 -f kafka.ldif -D ${uid} -w ${rootDnPW}

    Ganti placeholder sebagai berikut:

    Placeholder Deskripsi Cara menemukannya
    ${uid} Nilai parameter admin_dn Configure pada halaman layanan OpenLDAP di Konsol EMR
    ${rootDnPW} Nilai parameter admin_pwd Configure pada halaman layanan OpenLDAP di Konsol EMR

    10389 adalah port listening default layanan OpenLDAP.

    Untuk memverifikasi bahwa pengguna telah ditambahkan, jalankan:

    ldapsearch -w ${rootDnPW} -D ${uid} -H ldap://master-1-1:10389 -b uid=kafka,ou=people,o=emr

Langkah 2: Buka halaman konfigurasi layanan Kafka

  1. Masuk ke Konsol EMR on ECS.

  2. Pada bilah navigasi atas, pilih wilayah tempat kluster Anda berada dan pilih kelompok sumber daya.

  3. Pada halaman EMR on ECS, temukan kluster Anda lalu klik Services di kolom Actions.

  4. Pada tab Services, temukan Kafka lalu klik Configure.

Langkah 3: Perbarui item konfigurasi yang ada

  1. Pada tab Configure, klik tab server.properties.

  2. Atur kafka.ssl.config.type menjadi CUSTOM.

  3. Atur authorizer.class.name menjadi kafka.security.ldap.authorizer.SimpleLdapAuthorizer.

  4. Klik Save. Pada kotak dialog, isi Execution Reason dan aktifkan Automatically Update Configurations.

Langkah 4: Tambahkan item konfigurasi baru

  1. Pada tab server.properties, klik Add Configuration Item.

  2. Pada dialog Add Configuration Item, tambahkan item berikut:

    Item konfigurasi Nilai Deskripsi
    super.users User:kafka Nama superuser yang Anda buat di Langkah 1. Ganti kafka dengan nama superuser Anda.
    listener.name.${listener}.sasl.enabled.mechanisms PLAIN Ganti ${listener} dengan nama listener Anda, misalnya sasl_ssl.
    listener.name.${listener}.plain.sasl.jaas.config Lihat di bawah Ganti ${listener} dengan nama listener Anda. Perbarui nilai terkait LDAP sesuai konfigurasi Anda.
    listener.name.${listener}.plain.sasl.server.callback.handler.class kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler Ganti ${listener} dengan nama listener Anda.
    sasl.mechanism.inter.broker.protocol PLAIN
    sasl.enabled.mechanisms PLAIN

    Untuk item listener.name.${listener}.plain.sasl.jaas.config, gunakan nilai berikut dan ganti setiap opsi sesuai konfigurasi LDAP Anda:

    org.apache.kafka.common.security.plain.PlainLoginModule required
      username="kafka"
      password="kafka-secret"
      emr.kafka.security.ldap.user.name.attribute="uid"
      emr.kafka.security.ldap.user.base.dn="ou=people,o=emr"
      emr.kafka.security.ldap.group.name.attribute="cn"
      emr.kafka.security.ldap.group.base.dn="ou=groups,o=emr"
      emr.kafka.security.ldap.admin.name.attribute="uid"
      emr.kafka.security.ldap.admin.base.dn="o=emr"
      emr.kafka.security.ldap.url="ldaps://master-1-1:10636"
      emr.kafka.security.ldap.bind.user="admin"
      emr.kafka.security.ldap.bind.user.password="WMMuhh3P**********"
      emr.kafka.security.ldap.user.member.of.attribute="memberOf"
      emr.kafka.security.ldap.group.authorization.support="true" ;

    Tabel berikut menjelaskan opsi terkait LDAP:

    Opsi Deskripsi
    username Nama superuser. Kafka menggunakan akun ini untuk mengakses node broker.
    emr.kafka.security.ldap.user.name.attribute Atribut LDAP yang digunakan untuk mengidentifikasi nama pengguna (digunakan untuk mencari username).
    emr.kafka.security.ldap.user.base.dn Base distinguished name (DN) untuk pengguna LDAP.
    emr.kafka.security.ldap.group.name.attribute Atribut LDAP yang digunakan untuk mengidentifikasi nama kelompok.
    emr.kafka.security.ldap.group.base.dn Base DN untuk kelompok pengguna LDAP.
    emr.kafka.security.ldap.admin.name.attribute Atribut LDAP yang digunakan untuk mengidentifikasi nama pengguna admin.
    emr.kafka.security.ldap.admin.base.dn Base DN untuk pengguna admin LDAP.
    emr.kafka.security.ldap.url URL layanan OpenLDAP.
    emr.kafka.security.ldap.bind.user Username administrator LDAP, digunakan untuk otentikasi kelompok pengguna.
    emr.kafka.security.ldap.bind.user.password Password untuk administrator LDAP.
    emr.kafka.security.ldap.user.member.of.attribute Atribut LDAP yang mencatat kelompok mana saja yang diikuti oleh pengguna.
    emr.kafka.security.ldap.group.authorization.support Atur ke true untuk mengaktifkan otorisasi berbasis kelompok. Saat diaktifkan, pengguna mewarisi izin dari kelompok yang mereka ikuti.
  3. Perbarui file konfigurasi berikut sesuai kebutuhan Anda:

    Ganti username dan password dalam kafka.client.jaas.content dengan kredensial aktual Anda. Gunakan kredensial superuser untuk akses tingkat broker.
    File konfigurasi Parameter Nilai Catatan
    kafka_client_jaas.conf kafka.client.jaas.content KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-secret"; }; Nilai harus diakhiri dengan titik koma (;).
    schema-registry.properties schema_registry_opts -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf Jika nilai sudah ada, tambahkan ini di akhir.
    kafka-rest.properties kafkarest_opts -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf Jika nilai sudah ada, tambahkan ini di akhir.

Langkah 5: Restart layanan Kafka

  1. Pada tab Configure, pilih More > Restart.

  2. Pada kotak dialog, isi Execution Reason lalu klik OK.

  3. Pada dialog Confirm, klik OK.

Pertimbangan keamanan untuk lingkungan produksi

Contoh pada bagian berikutnya menggunakan SASL_PLAINTEXT, yang mengirimkan kredensial dalam teks biasa. Di lingkungan produksi:

  • Gunakan SASL_SSL alih-alih SASL_PLAINTEXT untuk mengenkripsi kredensial saat transit.

  • Hindari menyimpan password dalam file konfigurasi teks biasa jika memungkinkan. Password bind LDAP dalam sasl.jaas.config perlu dilindungi.

Contoh

Contoh berikut menggunakan Kafka open source versi 2.4.1. Untuk versi Kafka lainnya, lihat dokumentasi keamanan Apache Kafka.

Contoh ini menunjukkan otorisasi berbasis kelompok menggunakan kelompok pengguna LDAP dan ACL.

Langkah 1: Buat pengguna uji coba dan kelompok pengguna

1.1 Aktifkan overlay memberOf (jika belum diaktifkan)

Jika fitur memberOf overlay dinonaktifkan untuk layanan OpenLDAP, aktifkan terlebih dahulu sebelum membuat kelompok pengguna.

Langkah untuk mengaktifkan overlay memberOf berbeda-beda tergantung layanan LDAP. Langkah berikut berlaku untuk layanan EMR OpenLDAP.
Aktifkan fitur ini di semua node tempat layanan OpenLDAP dideploy.
Sesuaikan parameter berikut berdasarkan lingkungan Anda:
olcModulepath: Untuk sistem operasi 32-bit, atur nilai ini menjadi /usr/lib/openldap.
dn: cn=module{0},cn=config: Jika cn=module{0}.ldif sudah ada di /etc/openldap/slapd.d/cn=config, ubah 0 menjadi 1. Jika cn=module{1}.ldif sudah ada, ubah 1 menjadi 2, dan seterusnya.
dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config: Atur olcDatabase berdasarkan nilai di /etc/openldap/slapd.d/cn=config. Misalnya, jika filenya adalah {2}hdb.ldif, atur olcDatabase menjadi hdb.
  1. Buat memberof_config.ldif dengan konten berikut:

    dn: cn=module{0},cn=config
    cn: module{0}
    objectClass: olcModuleList
    objectclass: top
    olcModuleload: memberof.la
    olcModulePath: /usr/lib64/openldap
    
    dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config
    objectClass: olcConfig
    objectClass: olcMemberOf
    objectClass: olcOverlayConfig
    objectClass: top
    olcOverlay: memberof
    olcMemberOfDangling: ignore
    olcMemberOfRefInt: TRUE
    olcMemberOfGroupOC: groupOfNames
    olcMemberOfMemberAD: member
    olcMemberOfMemberOfAD: memberOf
  2. Buat refint1.ldif dengan konten berikut:

    dn: cn=module{0},cn=config
    add: olcmoduleload
    olcmoduleload: refint
  3. Buat refint2.ldif dengan konten berikut:

    dn: olcOverlay=refint,olcDatabase={2}hdb,cn=config
    objectClass: olcConfig
    objectClass: olcOverlayConfig
    objectClass: olcRefintConfig
    objectClass: top
    olcOverlay: refint
    olcRefintAttribute: memberof member manager owner
  4. Muat ketiga file konfigurasi tersebut:

    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
    ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
    ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif

1.2 Buat pengguna uji coba

Buat kafka-users.ldif dengan konten berikut lalu jalankan ldapadd untuk menambahkan pengguna:

dn: uid=kafka-user1,ou=people,o=emr
cn: kafka-user1
sn: kafka-user1
uid: kafka-user1
objectClass: inetOrgPerson
userPassword: kafka-secret

dn: uid=kafka-user2,ou=people,o=emr
cn: kafka-user2
sn: kafka-user2
uid: kafka-user2
objectClass: inetOrgPerson
userPassword: kafka-secret

1.3 Buat kelompok pengguna uji coba

Buat kafka-groups.ldif dengan konten berikut lalu jalankan ldapadd untuk menambahkan kelompok:

dn: cn=kafka-group1,ou=groups,o=emr
cn: kafka-group1
objectClass: groupOfNames
member: uid=kafka-user1,ou=people,o=emr
member: uid=kafka-user2,ou=people,o=emr

dn: cn=kafka-group2,ou=groups,o=emr
cn: kafka-group2
objectClass: groupOfNames
member: uid=kafka-user1,ou=people,o=emr

Ringkasan keanggotaan kelompok:

  • kafka-group1: kafka-user1, kafka-user2

  • kafka-group2: kafka-user1

1.4 Verifikasi atribut memberOf

Jalankan perintah berikut di server OpenLDAP untuk memastikan atribut memberOf telah terisi:

ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b ou=people,o=emr memberOf

Hasil yang diharapkan:

  • kafka-user1 termasuk dalam kafka-group1 dan kafka-group2.

  • kafka-user2 termasuk dalam kafka-group2.

Langkah 2: Buat file konfigurasi klien

Setiap file konfigurasi klien menentukan kredensial untuk pengguna tertentu. Semua contoh menggunakan SASL_PLAINTEXT sebagai protokol keamanan.

Di lingkungan produksi, gunakan SASL_SSL alih-alih SASL_PLAINTEXT untuk mencegah kredensial dikirim dalam teks biasa. Lihat dokumentasi keamanan Apache Kafka untuk detail selengkapnya.

Buat tiga file konfigurasi berikut. Ganti username dan password di setiap file sesuai klien yang bersangkutan.

client.properties (superuser):

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka" password="kafka-secret";

kafka-user1.properties:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user1" password="kafka-secret";

kafka-user2.properties:

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="kafka-user2" password="kafka-secret";

Langkah 3: Buat topik uji coba

kafka-topics.sh --bootstrap-server core-1-1:9092 --command-config client.properties --create --topic test --replication-factor 3 --partitions 2

Langkah 4: Berikan izin

Daftar kontrol akses (ACL) Kafka mengikuti format: "Principal P [Diizinkan|Ditolak] Operasi O dari Host H pada Resource R." Untuk dokumentasi lengkap tentang ACL, lihat Otorisasi dan ACL Apache Kafka.

Jika suatu resource tidak memiliki ACL, Kafka secara default membatasi akses ke resource tersebut. Hanya superuser yang dapat mengaksesnya.

Jalankan perintah berikut untuk mengatur izin:

# Izinkan kafka-group2 melakukan semua operasi pada kluster dan topik test.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --cluster kafka-cluster
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-group2 --allow-host "*" --operation All --topic test
# Tolak kafka-group1 semua operasi pada topik test.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-group1 --deny-host "*" --operation All --topic test
# Tolak kafka-user1 akses baca pada topik test.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-user1 --deny-host "*" --operation Read --topic test
# Izinkan kafka-user2 akses baca pada topik test.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation Read --topic test

Untuk melihat ACL saat ini untuk topik test:

kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --list --topic test

Output yang diharapkan:

Current ACLs for resource `Topic:LITERAL:test`:
        User:kafka-group2 has Allow permission for operations: All from hosts: *
        User:kafka-user2 has Allow permission for operations: Read from hosts: *
        User:kafka-user1 has Deny permission for operations: Read from hosts: *
        User:kafka-group1 has Deny permission for operations: All from hosts: *

Langkah 5: Verifikasi izin

Pengujian berikut memastikan bahwa izin berbasis kelompok diterapkan dengan benar. Izin efektif pengguna merupakan gabungan dari ACL individu mereka dan ACL semua kelompok yang mereka ikuti.

kafka-user1 dapat menulis ke topik test (mewarisi Allow All dari kafka-group2):

kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user1.properties --topic test

Tulis beberapa pesan untuk verifikasi:

>a
>b
>c
>d

kafka-user1 tidak dapat membaca dari topik test (memiliki Deny Read eksplisit):

# Berikan izin kelompok konsumen terlebih dahulu.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user1 --allow-host "*" --operation All --group kka-user1-consumer
kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user1.properties --topic test --group kafka-user1-consumer

Operasi baca gagal, yang mengonfirmasi bahwa Deny Read eksplisit tetap berlaku meskipun kafka-user1 termasuk dalam kafka-group2.

kafka-user2 tidak dapat menulis ke topik test (tidak diberikan izin menulis):

kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user2.properties --topic test

Operasi menulis gagal.

kafka-user2 dapat membaca dari topik test (memiliki Allow Read):

# Berikan izin kelompok konsumen terlebih dahulu.
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation All --group kafka-user2-consumer
kafka-console-consumer.sh --bootstrap-server core-1-1:9092 --consumer.config ./kafka-user2.properties --topic test --group kafka-user2-consumer --from-beginning

Data berhasil dikonsumsi.