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
Buat superuser.
CatatanJika 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.
Hubungkan ke node master-1-1 klaster dalam mode SSH. Untuk informasi lebih lanjut, lihat Masuk ke Klaster.
Buat file bernama kafka.ldif dan tambahkan informasi berikut ke file tersebut.
Dalam contoh ini, perintah
ldapdijalankan 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: kafkaJalankan 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
Pergi ke tab Konfigurasi halaman layanan Kafka.
Di bilah navigasi atas, pilih wilayah tempat klaster Anda berada dan pilih grup sumber daya berdasarkan kebutuhan bisnis Anda.
Di halaman EMR pada ECS, temukan klaster yang diinginkan dan klik Services di kolom Tindakan.
Di tab Services, temukan layanan Kafka dan klik Configure.
Ubah item konfigurasi dan simpan konfigurasi.
Di tab Configure halaman layanan Kafka, klik tab server.properties.
Ubah nilai item konfigurasi kafka.ssl.config.type menjadi CUSTOM.
Ubah nilai item konfigurasi authorizer.class.name menjadi kafka.security.ldap.authorizer.SimpleLdapAuthorizer.
Simpan konfigurasi.
Di tab Konfigurasi halaman layanan Kafka, klik Save.
Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan aktifkan Automatically Update Configurations.
Tambahkan item konfigurasi dan simpan konfigurasi.
Di tab server.properties, klik Add Configuration Item.
Di kotak dialog Tambah Item Konfigurasi, tambahkan item konfigurasi yang dijelaskan dalam tabel berikut.
Item konfigurasi
Nilai
Deskripsi
super.users
User:kafka
kafkaadalah 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.
Ubah item konfigurasi lainnya.
Ubah item konfigurasi berikut berdasarkan kebutuhan bisnis Anda.
CatatanAnda 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.confJika 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.confJika parameter ini sudah memiliki nilai, tambahkan informasi yang diperlukan ke akhir nilai yang ada.
Mulai ulang layanan Kafka.
Di tab Configure halaman layanan Kafka, pilih .
Di kotak dialog yang muncul, konfigurasikan parameter Alasan Eksekusi dan klik OK.
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.
Buat pengguna uji dan grup pengguna uji.
Jika fitur overlay memberOf dinonaktifkan untuk layanan OpenLDAP, lakukan operasi berikut untuk mengaktifkan fitur tersebut.
CatatanMetode 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 parameterolcDatabaseadalah {2}hdb.ldif, Anda harus mengatur parameter olcDatabase ke hdb.
Jalankan perintah
vim memberof_config.ldifuntuk 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: memberOfJalankan perintah
vim refint1.ldifuntuk membuka file refint1.ldif dan tambahkan informasi berikut ke file tersebut:dn: cn=module{0},cn=config add: olcmoduleload olcmoduleload: refintJalankan perintah
vim refint2.ldifuntuk 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 ownerJalankan 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
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-secretBuat 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=emrJalankan perintah berikut di server OpenLDAP untuk melihat properti memberOf dari pengguna uji:
ldapsearch -Q -Y EXTERNAL -H ldapi:/// -b ou=people,o=emr memberOfDalam informasi yang dikembalikan, properti memberOf dari kafka-user1 berisi kafka-group1 dan kafka-group2, dan properti memberOf dari kafka-user2 berisi kafka-group2.
Buat file konfigurasi klien.
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";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";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";
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 2Berikan 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 testAnda dapat menjalankan perintah berikut untuk melihat izin pengguna uji dan grup pengguna uji:
kafka-acls.sh --authorizer-properties zookeeper.connect=$KAFKA_ZOOKEEPER --list --topic testInformasi 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: *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 testTulis kode untuk mengakses topik test.
# Tulis kode. >a >b >c >dPengguna 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-consumerHasilnya 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.