Tutorial: Mengonfigurasi kebijakan Apache Kafka di HDInsight dengan Paket Keamanan Perusahaan

Pelajari cara mengonfigurasi kebijakan Apache Ranger untuk kluster Paket Keamanan Perusahaan (ESP) dari Apache Kafka. Kluster ESP terhubung ke domain yang memungkinkan pengguna untuk mengautentikasi dengan kredensial domain. Dalam tutorial ini, Anda membuat dua kebijakan Ranger untuk membatasi sales akses ke marketingspend dan topik.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat pengguna domain.
  • Buat kebijakan Ranger.
  • Buat topik dalam kluster Kafka.
  • Menguji kebijakan Ranger.

Prasyarat

Kluster HDInsight Kafka dengan Paket Keamanan Perusahaan.

Sambungkan ke Admin antarmuka pengguna Apache Ranger

  1. Dari browser, sambungkan ke antarmuka pengguna (UI) Ranger Admin dengan menggunakan URL https://ClusterName.azurehdinsight.net/Ranger/. Ingatlah untuk mengubah ClusterName menjadi nama kluster Kafka Anda. Kredensial Ranger tidak sama dengan kredensial kluster Hadoop. Untuk mencegah browser menggunakan kredensial Hadoop yang di-{i>cache

  2. Masuk dengan menggunakan kredensial admin Microsoft Entra Anda. Kredensial admin Microsoft Entra tidak sama dengan kredensial kluster HDInsight atau kredensial SSH simpul HDInsight Linux.

    Screenshot that shows the HDInsight Apache Ranger Admin UI.

Membuat pengguna domain

Untuk mempelajari cara membuat pengguna domain sales_user dan marketing_user , lihat Membuat kluster HDInsight dengan Paket Keamanan Perusahaan. Dalam skenario produksi, pengguna domain berasal dari penyewa ID Microsoft Entra Anda.

Membuat kebijakan Ranger

Buat kebijakan Ranger untuk sales_user dan marketing_user.

  1. Buka Admin antarmuka pengguna Ranger.

  2. Di bawah Kafka, pilih <ClusterName>_kafka. Satu kebijakan yang telah dikonfigurasi sebelumnya mungkin tercantum.

  3. Pilih Tambahkan Kebijakan Baru dan masukkan nilai berikut ini:

    Pengaturan Nilai yang disarankan
    Nama Kebijakan kebijakan hdi sales*
    Topik penjualan*
    Pilih Pengguna sales_user1
    Izin mempublikasikan, menggunakan, membuat

    Kartu bebas berikut dapat disertakan dalam nama topik:

    • *menunjukkan nol atau lebih kemunculan karakter.
    • ? menunjukkan karakter tunggal.

    Screenshot that shows the Apache Ranger Admin UI Create Policy1.

    Tunggu beberapa saat agar Ranger disinkronkan dengan ID Microsoft Entra jika pengguna domain tidak diisi secara otomatis untuk Pilih Pengguna.

  4. Pilih Tambahkan untuk menyimpan kebijakan.

  5. Pilih Tambahkan Kebijakan Baru dan masukkan nilai berikut ini:

    Pengaturan Nilai yang disarankan
    Nama Kebijakan kebijakan pemasaran hdi
    Topik marketingspend
    Pilih Pengguna marketing_user1
    Izin mempublikasikan, menggunakan, membuat

    Screenshot that shows the Apache Ranger Admin UI Create Policy2.

  6. Pilih Tambahkan untuk menyimpan kebijakan.

Membuat topik dalam kluster Kafka dengan ESP

Untuk membuat dua topik, salesevents dan marketingspend:

  1. Gunakan perintah berikut untuk membuka koneksi Secure Shell (SSH) ke kluster:

    ssh DOMAINADMIN@CLUSTERNAME-ssh.azurehdinsight.net
    

    Ganti DOMAINADMIN dengan pengguna admin untuk kluster Anda yang dikonfigurasi selama pembuatan kluster. Ganti CLUSTERNAME dengan nama kluster Anda. Jika diminta, masukkan kata sandi untuk akun pengguna admin. Untuk informasi selengkapnya tentang penggunaan SSH dengan HDInsight, lihat Menggunakan SSH dengan HDInsight.

  2. Gunakan perintah berikut untuk menyimpan nama kluster ke variabel dan menginstal utilitas penguraian JSON jq. Saat diminta, masukkan nama kluster Kafka.

    sudo apt -y install jq
    read -p 'Enter your Kafka cluster name:' CLUSTERNAME
    
  3. Gunakan perintah berikut untuk mendapatkan host perantara Kafka. Saat diminta, masukkan kata sandi untuk akun admin kluster.

    export KAFKABROKERS=`curl -sS -u admin -G https://$CLUSTERNAME.azurehdinsight.net/api/v1/clusters/$CLUSTERNAME/services/KAFKA/components/KAFKA_BROKER | jq -r '["\(.host_components[].HostRoles.host_name):9092"] | join(",")' | cut -d',' -f1,2`; \
    

    Sebelum melanjutkan, Anda mungkin perlu menyiapkan lingkungan pengembangan jika Anda belum melakukannya. Anda memerlukan komponen seperti Java JDK, Apache Maven, dan klien SSH dengan Secure Copy (SCP). Untuk informasi selengkapnya, lihat Instruksi penyetelan.

  4. Unduh contoh konsumen produsen yang bergabung dengan domain Apache Kafka.

  5. Ikuti langkah 2 dan 3 di bawah Bangun dan sebarkan contoh dalam Tutorial: Gunakan API Produsen dan Konsumen Apache Kafka.

    Catatan

    Untuk tutorial ini, gunakan kafka-producer-consumer.jar di DomainJoined-Producer-Consumer bawah proyek. Jangan gunakan yang ada di bawah Producer-Consumer proyek, yaitu untuk skenario yang tidak bergabung dengan domain.

  6. Jalankan perintah berikut:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create salesevents $KAFKABROKERS
    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar create marketingspend $KAFKABROKERS
    

Menguji kebijakan Ranger

Berdasarkan kebijakan Ranger yang dikonfigurasi, sales_user dapat menghasilkan/menggunakan topik salesevents tetapi bukan topik marketingspend. Sebaliknya, marketing_user dapat menghasilkan/menggunakan topik marketingspend tetapi bukan topik salesevents.

  1. Buka koneksi SSH baru ke kluster. Gunakan perintah berikut untuk masuk sebagai sales_user1:

    ssh sales_user1@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Gunakan nama perantara dari bagian sebelumnya untuk mengatur variabel lingkungan berikut:

    export KAFKABROKERS=<brokerlist>:9092
    

    Contoh: export KAFKABROKERS=<brokername1>.contoso.com:9092,<brokername2>.contoso.com:9092

  3. Ikuti langkah 3 di bawah Bangun dan sebarkan contoh dalam Tutorial: Gunakan API Produsen dan Konsumen Apache Kafka untuk memastikan bahwa kafka-producer-consumer.jar juga tersedia untuk sales_user.

    Catatan

    Untuk tutorial ini, gunakan kafka-producer-consumer.jar di bawah proyek "DomainJoined-Producer-Consumer". Jangan gunakan yang ada di bawah proyek "Producer-Consumer", yaitu untuk skenario non-domain-joined.

  4. Verifikasi bahwa sales_user1 dapat menghasilkan topik salesevents dengan menjalankan perintah berikut:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
    
  5. Jalankan perintah berikut untuk mengonsumsi dari topik salesevents:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Verifikasi bahwa Anda dapat membaca pesan.

  6. Verifikasi bahwa sales_user1 tidak dapat menghasilkan topik marketingspend dengan menjalankan perintah berikut di jendela SSH yang sama:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar producer marketingspend $KAFKABROKERS
    

    Timbul kesalahan otorisasi dan dapat diabaikan.

  7. Perhatikan bahwa marketing_user1 tidak dapat menggunakan dari topik salesevents.

    Ulangi langkah sebelumnya 1 hingga 3, tetapi kali ini sebagai marketing_user1.

    Jalankan perintah berikut untuk mengonsumsi dari topik salesevents:

    java -jar -Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

    Pesan sebelumnya tidak dapat dilihat.

  8. Lihat peristiwa akses audit dari antarmuka pengguna Ranger.

    Screenshot that shows the Ranger UI policy audit access events.

Menghasilkan dan menggunakan topik di ESP Kafka dengan menggunakan konsol

Catatan

Anda tidak dapat menggunakan perintah konsol untuk membuat topik. Sebagai gantinya, Anda harus menggunakan kode Java yang ditunjukkan di bagian sebelumnya. Untuk informasi selengkapnya, lihat Buat topik di kluster Kafka dengan ESP.

Menghasilkan dan menggunakan topik di ESP Kafka dengan menggunakan konsol:

  1. Gunakan kinit dengan nama pengguna. Masukkan kata sandi saat diminta.

    kinit sales_user1
    
  2. Mengatur variabel lingkungan:

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_client_jaas.conf"
    export KAFKABROKERS=<brokerlist>:9092
    
  3. Menghasilkan pesan ke topik salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    
  4. Mengonsumsi pesan dari topik salesevents:

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    

Menghasilkan dan mengonsumsi topik untuk sesi jangka panjang di ESP Kafka

Cache tiket Kerberos memiliki batasan kedaluwarsa. Untuk sesi jangka panjang, gunakan keytab alih-alih memperbarui cache tiket secara manual.

Untuk menggunakan keytab dalam sesi jangka panjang tanpa kinit:

  1. Buat keytab baru untuk pengguna domain Anda:

    ktutil
    addent -password -p <user@domain> -k 1 -e RC4-HMAC
    wkt /tmp/<user>.keytab
    q
    
    
  2. Buat /home/sshuser/kafka_client_jaas.conf. Ini harus memiliki pola berikut:

    KafkaClient {
     com.sun.security.auth.module.Krb5LoginModule required
     useKeyTab=true
     storeKey=true
     keyTab="/tmp/<user>.keytab"
     useTicketCache=false
     serviceName="kafka"
     principal="<user@domain>";
    };
    
  3. Ganti dengan /home/sshuser/kafka_client_jaas.conf dan hasilkan java.security.auth.login.config atau gunakan topik dengan menggunakan konsol atau API:

    export KAFKABROKERS=<brokerlist>:9092
    
    # console tool
    export KAFKA_OPTS="-Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf"
    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --topic salesevents --broker-list $KAFKABROKERS --producer-property security.protocol=SASL_PLAINTEXT
    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --topic salesevents --from-beginning --bootstrap-server $KAFKABROKERS --consumer-property security.protocol=SASL_PLAINTEXT
    
    # API
    java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar producer salesevents $KAFKABROKERS
    java -jar -Djava.security.auth.login.config=/home/sshuser/kafka_client_jaas.conf kafka-producer-consumer.jar consumer salesevents $KAFKABROKERS
    

Membersihkan sumber daya

Jika Anda tidak akan terus menggunakan aplikasi ini, hapus kluster Kafka yang Anda buat:

  1. Masuk ke portal Azure.
  2. Di kotak Pencarian di bagian atas, masukkan HDInsight.
  3. Di bawah Layanan, pilih kluster HDInsight.
  4. Dalam daftar kluster HDInsight yang muncul, pilih ... di samping kluster yang Anda buat untuk tutorial ini.
  5. Pilih Hapus>Ya.

Pemecahan Masalah

Jika kafka-producer-consumer.jar tidak berfungsi di kluster yang bergabung dengan domain, pastikan Anda menggunakan kafka-producer-consumer.jar di DomainJoined-Producer-Consumer bawah proyek. Jangan gunakan yang ada di bawah Producer-Consumer proyek, yaitu untuk skenario yang tidak bergabung dengan domain.

Langkah berikutnya