全部产品
Search
文档中心

E-MapReduce:Konfigurasikan pengguna LDAP untuk autentikasi

更新时间:Jul 02, 2025

Topik ini menjelaskan cara mengonfigurasi pengguna LDAP untuk autentikasi di E-MapReduce (EMR) Kafka dan memberikan contoh.

Prasyarat

Sebuah klaster Dataflow telah dibuat, dengan layanan Kafka dan OpenLDAP dipilih untuk klaster tersebut. Untuk informasi lebih lanjut tentang cara membuat klaster, lihat Buat Klaster Dataflow Kafka.

Batasan

  • Topik ini berlaku untuk klaster Kafka dengan versi minor yang lebih baru dari EMR V3.44.0 atau EMR V5.10.0.

  • Anda harus memastikan bahwa layanan EMR OpenLDAP atau layanan LDAP eksternal telah diterapkan di klaster Anda.

    Dalam topik ini, layanan EMR OpenLDAP digunakan.

Peringatan

Jika Anda ingin mengonfigurasi grup pengguna untuk autentikasi, pastikan fitur overlay memberOf diaktifkan untuk layanan LDAP atau properti memberOf dapat dikonfigurasi untuk pengguna LDAP.

Konfigurasikan pengguna LDAP untuk autentikasi

  1. Buat superuser.

    Catatan

    Jika Anda sudah membuat superuser, lewati langkah ini.

    Superuser Kafka dapat mengakses semua sumber daya Kafka. Dalam contoh ini, superuser digunakan untuk mengakses node broker dan komponen Kafka. Seorang superuser Kafka ditambahkan ke layanan EMR OpenLDAP.

    1. Hubungkan ke node master-1-1 klaster dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Klaster.

    2. Buat file bernama kafka.ldif dan tambahkan informasi berikut ke file tersebut.

      Dalam contoh ini, perintah ldap dijalankan untuk menambahkan pengguna LDAP dengan UID kafka dan kata sandi 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}: Ganti ${uid} dengan nilai parameter admin_dn. Anda bisa mendapatkan nilai parameter admin_dn pada tab Configure halaman layanan OpenLDAP di konsol EMR.

      • ${rootDnPW}: Ganti ${rootDnPW} dengan nilai parameter admin_pwd. Anda bisa mendapatkan nilai parameter admin_pwd pada tab Configure halaman layanan OpenLDAP di konsol EMR.

      • 10389: port mendengarkan layanan OpenLDAP.

      Setelah pengguna LDAP ditambahkan, Anda dapat menjalankan perintah berikut untuk melihat informasi tentang pengguna:

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

    1. Di bilah navigasi atas, pilih wilayah tempat klaster Anda berada dan pilih grup sumber daya berdasarkan kebutuhan bisnis Anda.

    2. Di halaman EMR pada ECS, temukan klaster yang diinginkan dan klik Services di kolom Tindakan.

    3. Di tab Services, temukan layanan Kafka dan klik Configure.

  3. Ubah item konfigurasi dan simpan konfigurasi.

    1. Di tab Configure halaman layanan Kafka, 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. Di tab Konfigurasi halaman layanan Kafka, klik Save.

      2. Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan aktifkan Automatically Update Configurations.

  4. Tambahkan item konfigurasi dan simpan konfigurasi.

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

    2. Di kotak dialog Tambah Item Konfigurasi, tambahkan item konfigurasi yang dijelaskan dalam tabel berikut.

      Item konfigurasi

      Nilai

      Deskripsi

      super.users

      User:kafka

      kafka adalah nama superuser yang Anda buat. Ganti nama pengguna sesuai dengan kebutuhan bisnis Anda.

      Untuk informasi lebih lanjut tentang cara membuat pengguna, lihat Langkah 1.

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

      PLAIN

      Ganti ${listener} dengan nama listener. Contoh: 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. Contoh: sasl_ssl.

      Ganti nilai opsi berikut dalam item konfigurasi ini berdasarkan konfigurasi aktual pengguna LDAP:

      • username: nama superuser yang Anda buat. Layanan Kafka menggunakan superuser untuk mengakses node.

      • mr.kafka.security.ldap.user.name.attribute: properti nama pengguna LDAP. Anda dapat menggunakan properti ini untuk mendapatkan nama pengguna.

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

      • emr.kafka.security.ldap.group.name.attribute: properti nama grup pengguna LDAP. Anda dapat menggunakan properti ini untuk mendapatkan nama grup pengguna.

      • emr.kafka.security.ldap.group.base.dn: DN dasar grup pengguna LDAP.

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

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

      • emr.kafka.security.ldap.url: URL layanan OpenLDAP.

      • emr.kafka.security.ldap.bind.use: nama pengguna administrator LDAP yang dapat Anda gunakan untuk otentikasi grup pengguna.

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

      • emr.kafka.security.ldap.user.member.of.attribute: properti grup tempat pengguna tersebut termasuk. Anda dapat menggunakan properti ini untuk mendapatkan grup tempat pengguna tersebut termasuk.

      • emr.kafka.security.ldap.group.authorization.support: menentukan apakah akan mendukung otentikasi grup. Jika Anda mengatur parameter ini ke true dan grup tempat pengguna tersebut termasuk memiliki izin, pengguna tersebut mewarisi izin grup tersebut.

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

      kafka.security.ldap.authenticator.LdapAuthenticateCallbackHandler

      Anda harus mengganti ${listener} dengan nama listener. Contoh: sasl_ssl.

      sasl.mechanism.inter.broker.protocol

      PLAIN

      Tidak ada.

      sasl.enabled.mechanisms

      PLAIN

      Tidak ada.

    3. Ubah item konfigurasi lainnya.

      Ubah item konfigurasi berikut berdasarkan kebutuhan bisnis Anda.

      Catatan

      Anda harus mengganti nama pengguna dan kata sandi dalam nilai parameter kafka.client.jaas.content berdasarkan kebutuhan bisnis Anda. Kami merekomendasikan 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 parameter ini 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 informasi yang diperlukan ke akhir nilai yang ada.

      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 informasi yang diperlukan ke akhir nilai yang ada.

  5. Mulai ulang layanan Kafka.

    1. Di tab Configure halaman layanan Kafka, pilih More > Restart.

    2. Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan klik OK.

    3. Di pesan Confirm, klik OK.

Contoh

Operasi dalam contoh ini berlaku untuk Kafka open source 2.4.1. Untuk informasi lebih lanjut tentang cara mengonfigurasi pengguna LDAP untuk autentikasi di versi Kafka lainnya, lihat Apache Kafka.

  1. Buat pengguna uji dan grup pengguna uji.

    1. Jika fitur overlay memberOf dinonaktifkan untuk layanan OpenLDAP, lakukan operasi berikut untuk mengaktifkan fitur tersebut.

      Catatan
      • Metode yang digunakan untuk mengaktifkan fitur overlay memberOf bervariasi berdasarkan layanan LDAP yang Anda gunakan. Operasi berikut hanya untuk referensi.

      • Anda harus mengaktifkan fitur overlay memberOf untuk semua node tempat layanan OpenLDAP diterapkan.

      • Anda harus mengubah parameter berikut dalam file konfigurasi yang diperlukan berdasarkan kebutuhan bisnis Anda. Contoh:

        • olcModulepath: Untuk sistem operasi 32-bit, atur parameter ini ke /usr/lib/openldap.

        • dn: cn=module{0},cn=config: Jika file cn=module{0}.ldif sudah ada di direktori /etc/openldap/slapd.d/cn=config, Anda harus mengubah 0 di cn=module{0}.ldif menjadi 1. Jika file cn=module{1}.ldif sudah ada, Anda harus mengubah 1 di cn=module{1}.ldif menjadi 2. Semua digit dalam nama file mengikuti aturan yang sama.

        • dn: olcOverlay={0}memberof,olcDatabase={2}hdb,cn=config: Anda dapat mengonfigurasi parameter olcDatabase berdasarkan nilai parameter olcDatabase di direktori /etc/openldap/slapd.d/cn=config. Misalnya, jika nilai parameter olcDatabase adalah {2}hdb.ldif, Anda harus mengatur parameter olcDatabase ke hdb.

      1. Jalankan perintah vim memberof_config.ldif untuk membuka file memberof_config.ldif dan tambahkan informasi berikut ke file tersebut:

        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 membuka file refint1.ldif dan tambahkan informasi berikut ke file tersebut:

        dn: cn=module{0},cn=config
        add: olcmoduleload
        olcmoduleload: refint
      3. Jalankan perintah vim refint2.ldif untuk membuka file refint2.ldif dan tambahkan informasi berikut ke file tersebut:

        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.

      Jalankan perintah ldapadd untuk membuat pengguna uji. Tentukan kafka-users.ldif sebagai nama file dan tambahkan informasi berikut ke file tersebut:

      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 grup pengguna uji.

      Jalankan perintah ldapadd untuk membuat grup pengguna uji. Tentukan kafka-groups.ldif sebagai nama file dan tambahkan informasi berikut ke file tersebut:

      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. Jalankan perintah berikut di server OpenLDAP untuk melihat properti memberOf dari pengguna uji:

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

      Dalam informasi yang dikembalikan, properti memberOf dari kafka-user1 berisi kafka-group1 dan kafka-group2, dan properti memberOf dari kafka-user2 berisi kafka-group2.

  2. Buat file konfigurasi klien.

    1. Buat file konfigurasi bernama client.properties dan tambahkan informasi berikut ke file tersebut:

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # Ganti nama pengguna dan kata sandi berdasarkan klien yang berbeda. 
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka" password="kafka-secret";
    2. Buat file konfigurasi bernama kafka-user1.properties dan tambahkan informasi berikut ke file tersebut:

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # Ganti nama pengguna dan kata sandi berdasarkan klien yang berbeda.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user1" password="kafka-secret";
    3. Buat file konfigurasi bernama kafka-user2.properties dan tambahkan informasi berikut ke file tersebut:

      security.protocol=SASL_PLAINTEXT
      sasl.mechanism=PLAIN
      # Ganti nama pengguna dan kata sandi berdasarkan klien yang berbeda.
      sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule  required username="kafka-user2" password="kafka-secret";
  3. Buat topik uji 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 yang diperlukan kepada pengguna uji dan grup pengguna uji.

    Untuk informasi lebih lanjut tentang perintah yang digunakan untuk memberikan izin, lihat Otorisasi dan ACL.

    # Berikan izin kepada grup pengguna 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
    # Berikan izin kepada grup pengguna kafka-group1.
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-group1 --deny-host "*" --operation All --topic test
    # Berikan izin kepada pengguna kafka-user1.
    kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --add --deny-principal User:kafka-user1 --deny-host "*" --operation Read --topic test
    # Berikan izin kepada pengguna 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 izin pengguna uji dan grup pengguna uji:

    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 data ke topik test karena pengguna tersebut termasuk dalam grup pengguna kafka-group2.

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

      Tulis kode untuk mengakses topik test.

      # Tulis kode.
      >a
      >b
      >c
      >d
    • Pengguna kafka-user1 tidak dapat membaca data dari topik test.

      # Berikan izin yang diperlukan kepada grup 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

      Hasilnya menunjukkan bahwa autentikasi gagal, dan pengguna tidak dapat mengakses topik test.

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

      kafka-console-producer.sh --broker-list core-1-1:9092 --producer.config ./kafka-user2.properties  --topic test
      # Tulis kode.
      >a
      # Autentikasi gagal.

      Hasilnya menunjukkan bahwa autentikasi gagal.

    • Pengguna kafka-user2 dapat membaca data dari topik test.

      # Berikan izin yang diperlukan kepada grup 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.