Bagikan melalui


Menyiapkan enkripsi dan autentikasi TLS untuk kluster Apache Kafka Non-ESP di Azure HDInsight

Artikel ini menunjukkan kepada Anda cara menyiapkan enkripsi Keamanan Lapisan Transportasi (TLS), yang sebelumnya dikenal sebagai enkripsi Secure Sockets Layer (SSL), antara klien Apache Kafka dan broker Apache Kafka. Ini juga menunjukkan kepada Anda cara menyiapkan autentikasi klien (kadang-kadang disebut sebagai TLS dua arah).

Penting

Ada dua klien yang dapat Anda gunakan untuk aplikasi Kafka: klien Java dan klien konsol. Hanya klien ProducerConsumer.java Java yang dapat menggunakan TLS untuk memproduksi dan mengonsumsi. Klien produser konsol console-producer.sh tidak bekerja dengan TLS.

Penyiapan broker Apache Kafka

Penyiapan broker Kafka TLS menggunakan empat VM kluster HDInsight dengan cara berikut:

  • headnode 0 - Otoritas Sertifikat (CA)
  • node kerja 0, 1, dan 2 - broker

Nota

Panduan ini menggunakan sertifikat yang ditandatangani sendiri, tetapi solusi yang paling aman adalah menggunakan sertifikat yang dikeluarkan oleh CA tepercaya.

Ringkasan proses penyiapan broker adalah sebagai berikut:

  1. Langkah-langkah berikut diulang pada masing-masing dari tiga simpul pekerja:

    1. Buat sertifikat.
    2. Buat permintaan penandatanganan sertifikasi.
    3. Kirim permintaan penandatanganan sertifikasi ke Otoritas Sertifikat (CA).
    4. Masuk ke dalam CA dan tanda tangani permintaan tersebut.
    5. Gunakan SCP untuk mengirimkan kembali sertifikat yang telah ditandatangani ke simpul pekerja.
    6. Gunakan perintah SCP untuk mengirim sertifikat publik CA ke simpul pekerja.
  2. Setelah Anda memiliki semua sertifikat, masukkan sertifikat ke dalam toko sertifikasi.

  3. Buka Ambari dan ubah konfigurasi.

    Gunakan instruksi terperinci berikut untuk menyelesaikan penyiapan broker:

    Penting

    Dalam cuplikan kode berikut, wnX adalah singkatan dari salah satu dari tiga simpul pekerja dan harus diganti dengan wn0, wn1 atau wn2 sebagaimana mestinya. WorkerNode0_Name dan HeadNode0_Name harus diganti dengan nama komputer masing-masing.

  4. Lakukan pengaturan awal pada head node 0, yang untuk HDInsight mengisi peran Otoritas Sertifikat (CA).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  5. Lakukan pengaturan awal yang sama pada setiap broker (simpul pekerja 0, 1 dan 2).

    # Create a new directory 'ssl' and change into it
    mkdir ssl
    cd ssl
    
  6. Pada setiap simpul pekerja, jalankan langkah-langkah berikut menggunakan cuplikan kode.

    1. Buat keystore dan isi dengan sertifikat privat baru.
    2. Buat permintaan penandatanganan sertifikat.
    3. Gunakan SCP untuk mengirim permintaan penandatanganan sertifikat ke CA (headnode0)
    keytool -genkey -keystore kafka.server.keystore.jks -keyalg RSA -validity 365 -storepass "MyServerPassword123" -keypass "MyServerPassword123" -dname "CN=FQDN_WORKER_NODE" -ext SAN=DNS:FQDN_WORKER_NODE -storetype pkcs12
    keytool -keystore kafka.server.keystore.jks -certreq -file cert-file -storepass "MyServerPassword123" -keypass "MyServerPassword123"
    scp cert-file sshuser@HeadNode0_Name:~/ssl/wnX-cert-sign-request
    

    Nota

    FQDN_WORKER_NODE adalah Nama Domain Penuh dari mesin simpul pekerja. Anda bisa mendapatkan detail tersebut dari file /etc/hosts di simpul utama.

    Contohnya,

    wn0-espkaf.securehadooprc.onmicrosoft.com
    wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
    

    Cuplikan layar memperlihatkan output file host.

  7. Pada komputer CA, jalankan perintah berikut untuk membuat file ca-cert dan ca-key:

    openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
    
  8. Ubah ke komputer CA dan tanda tangani semua permintaan penandatanganan sertifikasi yang diterima:

    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn0-cert-sign-request -out wn0-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn1-cert-sign-request -out wn1-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    openssl x509 -req -CA ca-cert -CAkey ca-key -in wn2-cert-sign-request -out wn2-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
    
  9. Kirimkan kembali sertifikat yang telah ditandatangani dari CA (headnode0) ke node pekerja.

    scp wn0-cert-signed sshuser@WorkerNode0_Name:~/ssl/cert-signed
    scp wn1-cert-signed sshuser@WorkerNode1_Name:~/ssl/cert-signed
    scp wn2-cert-signed sshuser@WorkerNode2_Name:~/ssl/cert-signed
    
  10. Kirim sertifikat publik CA ke setiap simpul pekerja.

    scp ca-cert sshuser@WorkerNode0_Name:~/ssl/ca-cert
    scp ca-cert sshuser@WorkerNode1_Name:~/ssl/ca-cert
    scp ca-cert sshuser@WorkerNode2_Name:~/ssl/ca-cert
    
  11. Pada setiap node pekerja, tambahkan sertifikat publik CA ke dalam truststore dan keystore. Kemudian tambahkan sertifikat yang ditandatangani sendiri milik node pekerja ke keystore.

    keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    keytool -keystore kafka.server.keystore.jks -import -file cert-signed -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
    
    

Memperbarui konfigurasi Kafka untuk menggunakan TLS dan memulai ulang broker

Anda telah menyiapkan setiap broker Kafka dengan keystore dan truststore, serta mengimpor sertifikat yang benar. Selanjutnya, ubah properti konfigurasi Kafka terkait menggunakan Ambari lalu mulai ulang broker Kafka.

Untuk menyelesaikan modifikasi konfigurasi, lakukan langkah-langkah berikut:

  1. Masuk ke portal Microsoft Azure dan pilih kluster Azure HDInsight Apache Kafka Anda.

  2. Buka UI Ambari dengan mengklik beranda Ambari di bawah Dasbor kluster.

  3. Di bawah Kafka Broker atur properti listener ke PLAINTEXT://localhost:9092,SSL://localhost:9093

  4. Di bawah Advanced kafka-broker atur properti security.inter.broker.protocol ke SSL

    Mengedit properti konfigurasi ssl Kafka di Ambari.

  5. Di bawah Kafka-broker kustom atur properti ssl.client.auth ke required.

    Nota

    Catatan: Langkah ini hanya diperlukan jika Anda menyiapkan autentikasi dan enkripsi.

    Mengedit properti konfigurasi kafka ssl di Ambari.

  6. Berikut adalah cuplikan layar yang memperlihatkan UI konfigurasi Ambari dengan perubahan ini.

    Nota

    1. ssl.keystore.location dan ssl.truststore.location adalah lokasi lengkap keystore dan truststore Anda di Otoritas Sertifikat (hn0)
    2. ssl.keystore.password dan ssl.truststore.password adalah kata sandi yang ditetapkan untuk keystore dan truststore. Dalam hal ini sebagai contoh, MyServerPassword123
    3. ssl.key.password adalah kunci yang ditetapkan untuk keystore dan trust store. Dalam hal ini sebagai contoh, MyServerPassword123
  7. Untuk Menggunakan TLS 1.3 di Kafka

    Tambahkan konfigurasi berikut ke konfigurasi kafka di Ambari

    1. ssl.enabled.protocols=TLSv1.3
    2. ssl.protocol=TLSv1.3

    Penting

    1. TLS 1.3 hanya berfungsi dengan versi Kafka HDI 5.1.
    2. Jika Anda menggunakan TLS 1.3 di sisi server, Anda harus menggunakan konfigurasi TLS 1.3 di klien juga.
  8. Untuk HDI versi 4.0 atau 5.0

    1. Jika Anda menyiapkan autentikasi dan enkripsi, cuplikan layar terlihat seperti

    Mengedit properti templat kafka-env di Ambari 4.

    1. Jika Anda hanya menyiapkan enkripsi, cuplikan layar terlihat seperti

    Cuplikan layar memperlihatkan cara mengedit bidang properti templat kafka-env di Ambari hanya untuk enkripsi.

  9. Mulai ulang semua broker Kafka.

Penyiapan klien (tanpa autentikasi)

Jika Anda tidak memerlukan autentikasi, ringkasan langkah-langkah untuk menyiapkan enkripsi TLS saja adalah:

  1. Masuk ke CA (simpul kepala aktif).
  2. Salin sertifikat CA ke komputer klien dari komputer CA (wn0).
  3. Masuk ke komputer klien (hn1) dan navigasikan ke ~/ssl folder .
  4. Impor sertifikat CA ke truststore.
  5. Impor sertifikat CA ke keystore.

Langkah-langkah ini dirinci dalam cuplikan kode berikut.

  1. Masuk ke simpul CA.

    ssh sshuser@HeadNode0_Name
    cd ssl
    
  2. Menyalin ca-cert ke komputer klien

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
  3. Masuk ke komputer klien (simpul kepala siaga).

    ssh sshuser@HeadNode1_Name
    cd ssl
    
  4. Impor sertifikat CA ke truststore.

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  5. Impor sertifikat CA ke keystore.

    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  6. Buat file client-ssl-auth.properties pada komputer klien (hn1). Ini harus memiliki pola berikut:

    security.protocol=SSL
    ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks
    ssl.truststore.password=MyClientPassword123
    
    1. Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file client-ssl-auth.properties
    ssl.enabled.protocols=TLSv1.3
    ssl.protocol=TLSv1.3
    
  7. Mulai antarmuka admin dengan opsi penghasil dan pengonsumsi untuk memastikan bahwa penghasil dan pengonsumsi bekerja pada port 9093. Lihat bagian Verifikasi untuk langkah-langkah yang diperlukan untuk memverifikasi pengaturan menggunakan produsen/konsumen konsol.

Penyiapan klien (dengan autentikasi)

Nota

Langkah-langkah berikut diperlukan hanya jika Anda menyiapkan enkripsi dan autentikasi TLS. Jika Anda hanya menyiapkan enkripsi, lihat Penyiapan klien tanpa autentikasi.

Empat langkah berikut meringkas tugas yang diperlukan untuk menyelesaikan penyiapan klien:

  1. Masuk ke komputer klien (simpul kepala siaga).
  2. Buat keystore Java dan dapatkan sertifikat yang ditandatangani untuk broker. Kemudian salin sertifikat ke VM tempat CA berjalan.
  3. Beralih ke komputer CA (simpul kepala aktif) untuk menandatangani sertifikat klien.
  4. Buka komputer klien (simpul kepala siaga) dan navigasi ke ~/ssl folder . Salin sertifikasi yang ditandatangani ke komputer klien.

Detail setiap langkah diberikan.

  1. Masuk ke komputer klien (simpul kepala siaga).

    ssh sshuser@HeadNode1_Name
    
  2. Hapus direktori ssl yang ada.

    rm -R ~/ssl
    mkdir ssl
    cd ssl
    
  3. Buat keystore Java dan buat permintaan penandatanganan sertifikat.

    keytool -genkey -keystore kafka.client.keystore.jks -validity 365 -storepass "MyClientPassword123" -keypass "MyClientPassword123" -dname "CN=HEADNODE1_FQDN" -storetype pkcs12
    
    keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -storepass "MyClientPassword123" -keypass "MyClientPassword123"
    
  4. Menyalin permintaan penandatanganan sertifikat ke CA

    scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
    
  5. Beralih ke komputer CA (simpul kepala aktif) dan tanda tangani sertifikat klien.

    ssh sshuser@HeadNode0_Name
    cd ssl
    openssl x509 -req -CA ca-cert -CAkey ca-key -in ~/ssl/client-cert-sign-request -out ~/ssl/client-cert-signed -days 365 -CAcreateserial -passin pass:MyClientPassword123
    
  6. Salin sertifikasi klien yang ditandatangani dari CA (simpul kepala aktif) ke komputer klien.

    scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
    
  7. Menyalin ca-cert ke komputer klien

    scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
    
    1. Masuk ke komputer klien (simpul kepala siaga) dan navigasikan ke direktori ssl.
    ssh sshuser@HeadNode1_Name
    cd ssl
    
  8. Buat penyimpanan klien dengan sertifikasi yang ditandatangani, impor sertifikasi CA ke keystore, dan truststore pada komputer klien (hn1):

    keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
    keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
    keytool -keystore kafka.client.keystore.jks -import -file client-signed-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
    
  9. Buat file client-ssl-auth.properties di komputer klien (hn1). Ini harus memiliki pola berikut:

    security.protocol=SSL
    ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks
    ssl.truststore.password=MyClientPassword123
    ssl.keystore.location=/home/sshuser/ssl/kafka.client.keystore.jks
    ssl.keystore.password=MyClientPassword123
    ssl.key.password=MyClientPassword123
    
    1. Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file client-ssl-auth.properties
    ssl.enabled.protocols=TLSv1.3
    ssl.protocol=TLSv1.3
    

Verifikasi

Jalankan langkah-langkah ini pada komputer klien.

Nota

Jika HDInsight 4.0 dan Kafka 2.1 diinstal, Anda dapat menggunakan producer/consumer konsol untuk memverifikasi pengaturan Anda. Jika tidak, jalankan produsen Kafka pada port 9092 dan kirim pesan ke topik tersebut, lalu gunakan konsumen Kafka pada port 9093 yang menggunakan TLS.

Kafka 2.1 atau lebih tinggi

  1. Buat topik jika belum ada.

    /usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
    
  2. Mulai produser konsol dan berikan jalur ke client-ssl-auth.properties sebagai file konfigurasi untuk produser.

    /usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9093 --topic topic1 --producer.config ~/ssl/client-ssl-auth.properties
    
  3. Buka koneksi ssh lain ke komputer klien, lalu mulai proses konsumen konsol dan berikan jalur ke client-ssl-auth.properties sebagai file konfigurasi untuk konsumen.

    /usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server <FQDN_WORKER_NODE>:9093 --topic topic1 --consumer.config ~/ssl/client-ssl-auth.properties --from-beginning
    

Langkah berikutnya