All Products
Search
Document Center

E-MapReduce:Gunakan otentikasi LDAP

Last Updated:Aug 21, 2026

Topik ini menjelaskan cara mengaktifkan otentikasi LDAP untuk EMR Kafka dan menyediakan contoh terperinci.

Prasyarat

Anda telah membuat kluster Dataflow dan memilih layanan Kafka serta OpenLDAP. Untuk informasi lebih lanjut, lihat Buat kluster Dataflow Kafka.

Batasan

  • Fitur ini tersedia untuk kluster EMR Kafka yang menjalankan EMR V3.44.0 atau versi lebih baru, atau EMR V5.10.0 atau versi lebih baru.

  • Layanan EMR OpenLDAP atau layanan LDAP eksternal tersedia di kluster.

    Topik ini menggunakan layanan EMR OpenLDAP sebagai contoh.

Peringatan

Jika Anda ingin menggunakan otentikasi berbasis kelompok pengguna, pastikan fitur memberOf overlay diaktifkan untuk layanan LDAP atau atribut memberOf didukung untuk pengguna LDAP.

Aktifkan otentikasi LDAP

  1. Buat superuser.

    Catatan

    Jika Anda telah membuat superuser, Anda dapat melewati langkah ini.

    Superuser Kafka dapat mengakses semua resource Kafka. Superuser menangani komunikasi antara node broker dan komponen lainnya. Contoh ini menggunakan layanan EMR OpenLDAP untuk menunjukkan cara menambahkan superuser Kafka.

    1. Hubungkan ke node master-1-1 kluster melalui SSH. Untuk informasi lebih lanjut, lihat Masuk ke kluster.

    2. Buat file bernama kafka.ldif dengan konten berikut.

      Topik ini menggunakan perintah ldap untuk 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}
      Catatan
      • ${uid}: Nilai parameter admin_dn pada halaman Configure layanan OpenLDAP di Konsol EMR.

      • ${rootDnPW}: Nilai parameter admin_pwd pada halaman Configure layanan OpenLDAP di Konsol EMR.

      • 10389: Port pendengar layanan OpenLDAP.

      Setelah menambahkan pengguna, jalankan perintah berikut untuk melihat informasinya.

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

    1. Masuk ke Konsol EMR on ECS.

    2. Pada bilah navigasi atas, pilih wilayah yang diperlukan dan kelompok sumber daya.

    3. Pada kolom Actions kluster target, klik Services.

    4. Pada halaman Services, klik Configure di bagian layanan Kafka.

  3. Ubah dan simpan konfigurasi.

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

    2. Ubah nilai item konfigurasi kafka.ssl.config.type menjadi CUSTOM.

    3. Ubah nilai item konfigurasi authorizer.class.name menjadi kafka.security.ldap.authorizer.SimpleLdapAuthorizer.

    4. Simpan konfigurasi.

      1. Klik Save.

      2. Pada kotak dialog, masukkan alasan dalam bidang Execution Reason.

  4. Tambahkan dan simpan parameter kustom.

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

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

      Parameter

      Nilai

      Deskripsi

      super.users

      User:kafka

      kafka adalah username yang telah Anda buat. Ganti sesuai kebutuhan.

      Untuk informasi lebih lanjut, lihat Langkah 1.

      listener.name.${listener}.sasl.enabled.mechanisms

      PLAIN

      Ganti ${listener} dengan nama listener tertentu, seperti sasl_ssl.

      listener.name.${listener}.plain.sasl.jaas.config

      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" ;

      Ganti ${listener} dengan nama listener tertentu, seperti sasl_ssl.

      Anda juga harus mengganti nilai konfigurasi terkait LDAP berikut:

      • username: Superuser yang digunakan layanan Kafka untuk komunikasi antar node.

      • emr.kafka.security.ldap.user.name.attribute: Atribut nama pengguna LDAP yang digunakan untuk mendapatkan username.

      • emr.kafka.security.ldap.user.base.dn: Base distinguished name (DN) pengguna LDAP.

      • emr.kafka.security.ldap.group.name.attribute: Atribut untuk nama kelompok pengguna LDAP.

      • emr.kafka.security.ldap.group.base.dn: Base DN kelompok pengguna LDAP.

      • emr.kafka.security.ldap.admin.name.attribute: Atribut pengguna admin LDAP.

      • emr.kafka.security.ldap.admin.base.dn: Base DN pengguna admin LDAP.

      • emr.kafka.security.ldap.url: URL LDAP.

      • emr.kafka.security.ldap.bind.user: Username administrator LDAP yang digunakan untuk otentikasi kelompok pengguna.

      • emr.kafka.security.ldap.bind.user.password: Password administrator LDAP.

      • emr.kafka.security.ldap.user.member.of.attribute: Atribut yang menunjukkan kelompok-kelompok tempat pengguna tergabung.

      • emr.kafka.security.ldap.group.authorization.support: Menentukan apakah otorisasi berbasis kelompok diaktifkan. Jika parameter ini diatur ke true, pengguna mewarisi izin dari kelompok pengguna yang ditugaskan.

      listener.name.${listener}.plain.sasl.server.callback.handler.class

      kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler

      Ganti ${listener} dengan nama listener tertentu, seperti sasl_ssl.

      sasl.mechanism.inter.broker.protocol

      PLAIN

      Tidak ada

      sasl.enabled.mechanisms

      PLAIN

      Tidak ada

    3. Ubah parameter lainnya.

      Ubah konfigurasi berikut sesuai kebutuhan Anda.

      Catatan

      Anda harus mengganti username dan password dalam nilai parameter kafka.client.jaas.content sesuai kebutuhan. Kami menyarankan agar Anda menggunakan superuser.

      File konfigurasi

      Parameter

      Nilai

      Deskripsi

      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 parameter ini sudah memiliki nilai, tambahkan konten baru tersebut.

      kafka-rest.properties

      kafkarest_opts

      -Djava.security.auth.login.config=/etc/taihao-apps/kafka-conf/kafka-conf/kafka_client_jaas.conf

      Jika parameter ini sudah memiliki nilai, tambahkan konten baru tersebut.

  5. Restart layanan Kafka.

    1. Pada halaman Configure layanan Kafka, pilih More > Restart.

    2. Pada kotak dialog yang muncul, masukkan alasan tindakan tersebut dan klik OK.

    3. Pada kotak dialog Confirm, klik OK.

Contoh penggunaan

Operasi dalam contoh ini berlaku untuk Kafka open source 2.4.1. Untuk versi Kafka lainnya, lihat Apache Kafka.

  1. Buat pengguna uji coba dan kelompok pengguna.

    1. Jika fitur memberOf overlay tidak diaktifkan untuk OpenLDAP, ikuti langkah-langkah berikut untuk mengaktifkannya.

      Catatan
      • Metode konfigurasi berikut hanya sebagai referensi. Metode untuk mengaktifkan memberOf overlay bervariasi tergantung layanan LDAP.

      • Terapkan konfigurasi ini ke semua node OpenLDAP.

      • Ubah parameter dalam semua file konfigurasi berikut sesuai kebutuhan. Misalnya:

        • olcModulepath: Untuk sistem operasi 32-bit, path-nya adalah /usr/lib/openldap.

        • dn: cn=module{0},cn=config: Jika direktori /etc/openldap/slapd.d/cn=config sudah berisi file cn=module{0}.ldif, ubah angka setelah module menjadi 1. Jika berisi file cn=module{1}.ldif, ubah angka menjadi 2, dan seterusnya.

        • dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config: Konfigurasikan nilai ini berdasarkan nilai olcDatabase di direktori /etc/openldap/slapd.d/cn=config. Misalnya, jika file olcDatabase={2}hdb.ldif ada, atur nilainya menjadi hdb.

      1. Jalankan perintah vim memberof_config.ldif untuk membuat file konfigurasi baru memberof_config.ldif. Konten file tersebut adalah sebagai 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. Jalankan perintah vim refint1.ldif untuk membuat file konfigurasi refint1.ldif. Konten file tersebut adalah sebagai berikut.

        dn: cn=module{0},cn=config
        add: olcmoduleload
        olcmoduleload: refint
      3. Jalankan perintah vim refint2.ldif untuk membuat file konfigurasi baru 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. Jalankan perintah berikut untuk memuat file konfigurasi.

        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
    2. Buat pengguna uji coba.

      Buat file bernama kafka-users.ldif dengan konten berikut, lalu gunakan perintah ldapadd untuk menambahkan pengguna uji coba.

      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
    3. Buat kelompok pengguna uji coba.

      Buat file bernama kafka-groups.ldif dengan konten berikut, lalu gunakan perintah ldapadd untuk menambahkan kelompok pengguna uji coba.

      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
    4. Di server tempat LDAP berjalan, jalankan perintah berikut untuk memeriksa atribut memberOf pengguna uji coba.

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

      Output menunjukkan bahwa atribut memberOf milik kafka-user1 mencakup kafka-group1 dan kafka-group2, sedangkan atribut memberOf milik kafka-user2 mencakup kafka-group1.

  2. Buat file konfigurasi klien.

    1. Buat file konfigurasi klien bernama client.properties dengan konten berikut.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Ganti username dan password berdasarkan identitas klien.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret";
    2. Buat file konfigurasi klien bernama kafka-user1.properties dengan konten berikut.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Ganti username dan password berdasarkan identitas klien.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user1" password="kafka-secret";
    3. Buat file konfigurasi klien bernama kafka-user2.properties dengan konten berikut.

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      #Ganti username dan password berdasarkan identitas klien.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user2" password="kafka-secret";
  3. Buat topik uji coba bernama test.

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

    Untuk informasi lebih lanjut tentang perintah otorisasi, lihat Authorization and ACLs.

    #Izin untuk kafka-group2
    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
    #Izin untuk kafka-group1
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-group1 --deny-host "*" --operation All --topic test
    #Izin untuk kafka-user1
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-user1 --deny-host "*" --operation Read --topic test
    #Izin untuk kafka-user2
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --allow-principal User:kafka-user2 --allow-host "*" --operation Read --topic test

    Anda dapat menjalankan perintah berikut untuk melihat hasil otorisasi.

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

    Informasi berikut dikembalikan:

    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: *
  5. Verifikasi izin.

    • Pengguna kafka-user1 dapat menulis ke topik test melalui kafka-group2.

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

      Masukkan pesan uji coba pada prompt. Operasi penulisan berhasil.

      #Masukkan pesan uji coba setelah prompt.
      >a
      >b
      >c
      >d
    • Pengguna kafka-user1 tidak dapat membaca dari topik test.

      #Berikan izin ke kelompok konsumen.
      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

      Otentikasi gagal, dan pengguna tidak dapat mengakses topik test.

    • Pengguna kafka-user2 tidak dapat menulis ke topik test.

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user2.properties  --topic test
      #Masukkan pesan uji coba setelah prompt.
      >a
      #Otentikasi gagal.

      Otentikasi gagal.

    • Pengguna kafka-user2 dapat membaca dari topik test.

      #Berikan izin ke kelompok konsumen.
      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 dikonsumsi sesuai harapan.