Menyiapkan enkripsi dan autentikasi TLS untuk kluster Apache Kafka Non-ESP di Azure HDInsight
Artikel ini menunjukkan kepada Anda cara mengatur enkripsi Transport Layer Security (TLS), yang sebelumnya dikenal sebagai enkripsi Secure Sockets Layer (SSL), antara klien Apache Kafka dan broker Apache Kafka. Ini juga menunjukkan kepada Anda cara mengatur 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 Java ProducerConsumer.java
yang dapat menggunakan TLS untuk memproduksi dan mengkonsumsi. Klien produsen konsol console-producer.sh
tidak berfungsi dengan TLS.
Pengaturan broker Apache Kafka
Penyiapan broker Kafka TLS menggunakan empat VM kluster HDInsight dengan cara berikut:
- headnode 0 - Otoritas Sertifikat (CA)
- node pekerja 0, 1, dan 2 - broker
Catatan
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:
Langkah-langkah berikut diulangi pada masing-masing dari tiga node pekerja:
- Buat sertifikat.
- Buat permintaan penandatanganan sertifikasi.
- Kirim permintaan penandatanganan sertifikasi ke Otoritas Sertifikat (CA).
- Masuk ke CA dan tanda tangani permintaan.
- SCP sertifikat yang ditandatangani kembali ke node pekerja.
- SCP sertifikat publik CA ke node pekerja.
Setelah Anda memiliki semua sertifikat, masukkan certs ke cert store.
Buka Ambari dan ubah konfigurasi.
Gunakan instruksi terperinci berikut untuk menyelesaikan pengaturan broker:
Penting
Dalam cuplikan kode berikut wnX adalah singkatan untuk salah satu dari tiga node pekerja dan harus diganti dengan
wn0
,wn1
atauwn2
sebagaimana mestinya.WorkerNode0_Name
danHeadNode0_Name
harus diganti dengan nama masing-masing mesin.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
Lakukan pengaturan awal yang sama pada masing-masing broker (node pekerja 0, 1 dan 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Pada setiap simpul pekerja, jalankan langkah-langkah berikut menggunakan cuplikan kode.
- Buat keystore dan isi dengan sertifikat pribadi baru.
- Buat permintaan penandatanganan sertifikat.
- SCP 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
Catatan
FQDN_WORKER_NODE adalah Nama Domain mesin simpul pekerja yang Sepenuhnya Memenuhi Syarat. Anda bisa mendapatkan detail itu dari file /etc/hosts di head node
Contohnya,
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
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
Ubah ke mesin 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"
Kirim sertifikat yang ditandatangani kembali ke node pekerja dari CA (headnode0).
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
Kirim sertifikat publik CA ke setiap node 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
Pada setiap node pekerja, tambahkan sertifikat publik CAs ke truststore dan keystore. Kemudian tambahkan sertifikat yang ditandatangani node pekerja sendiri 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
Perbarui konfigurasi Kafka untuk menggunakan TLS dan restart broker
Anda sekarang telah mengatur setiap broker Kafka dengan keystore dan truststore, dan mengimpor sertifikat yang benar. Selanjutnya, modifikasi properti konfigurasi Kafka terkait menggunakan Ambari dan kemudian mulai ulang broker Kafka.
Untuk menyelesaikan modifikasi konfigurasi, lakukan langkah-langkah berikut:
Masuk ke portal Microsoft Azure dan pilih klaster Azure HDInsight Apache Kafka Anda.
Buka UI Ambari dengan mengklik beranda Ambari di bawah Dasbor kluster.
Di bagian Perantara Kafka atur properti pendengar ke
PLAINTEXT://localhost:9092,SSL://localhost:9093
Di bawah Advanced kafka-broker atur properti security.inter.broker.protocol ke
SSL
Di bawah Broker kafka kustom atur properti ssl.client.auth ke
required
.Catatan
Catatan: Langkah ini hanya diperlukan jika Anda menyiapkan autentikasi dan enkripsi.
Berikut adalah cuplikan layar yang memperlihatkan UI konfigurasi Ambari dengan perubahan ini.
Catatan
- ssl.keystore.location dan ssl.truststore.location adalah jalur lengkap keystore Anda, lokasi truststore di Otoritas Sertifikat (hn0)
- ssl.keystore.password dan ssl.truststore.password adalah kata sandi yang ditetapkan untuk keystore dan truststore. Dalam hal ini sebagai contoh,
MyServerPassword123
- ssl.key.password adalah kunci yang ditetapkan untuk keystore dan penyimpanan kepercayaan. Dalam hal ini sebagai contoh,
MyServerPassword123
Untuk Menggunakan TLS 1.3 di Kafka
Tambahkan konfigurasi berikut ke konfigurasi kafka di Ambari
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Penting
- TLS 1.3 hanya berfungsi dengan versi kafka HDI 5.1.
- Jika Anda menggunakan TLS 1.3 di sisi server, Anda harus menggunakan konfigurasi TLS 1.3 di klien juga.
Untuk HDI versi 4.0 atau 5.0
- Jika Anda menyiapkan autentikasi dan enkripsi, cuplikan layar terlihat seperti
- Jika Anda hanya menyiapkan enkripsi, cuplikan layar terlihat seperti
Mulai ulang semua broker Kafka.
Penyetelan klien (tanpa autentikasi)
Jika Anda tidak memerlukan autentikasi, ringkasan langkah-langkah untuk menyiapkan enkripsi TLS saja adalah:
- Masuk ke CA (simpul kepala aktif).
- Salin sertifikat CA ke komputer klien dari komputer CA (wn0).
- Masuk ke mesin klien (hn1) dan navigasi ke
~/ssl
folder. - Impor sertifikat CA ke truststore.
- Impor sertifikat CA ke keystore.
Langkah-langkah ini dirinci dalam cuplikan kode berikut.
Masuk ke node CA.
ssh sshuser@HeadNode0_Name cd ssl
Salin ca-cert ke mesin klien
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Masuk ke mesin klien (node kepala siaga).
ssh sshuser@HeadNode1_Name cd ssl
Impor sertifikat CA ke truststore.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Impor sertifikat CA ke keystore.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
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
- Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file
Mulai klien admin dengan opsi produsen dan konsumen untuk memverifikasi bahwa produsen dan konsumen bekerja pada port 9093. Lihat bagian Verifikasi untuk langkah-langkah yang diperlukan untuk memverifikasi penyiapan menggunakan produsen/konsumen konsol.
Penyetelan klien (dengan autentikasi)
Catatan
Langkah-langkah berikut diperlukan hanya jika Anda menyiapkan enkripsi dan autentikasi TLS. Jika Anda hanya menyiapkan enkripsi, maka lihat Penyetelan klien tanpa autentikasi.
Empat langkah berikut ini meringkas tugas yang diperlukan untuk menyelesaikan penyetelan klien:
- Masuk ke mesin klien (node kepala siaga).
- Buat keystore Java dan dapatkan sertifikat yang ditandatangani untuk broker. Kemudian salin sertifikat ke VM tempat CA berjalan.
- Beralih ke mesin CA (active head node) untuk menandatangani sertifikat klien.
- Buka mesin klien (simpul kepala siaga) dan navigasi ke folder
~/ssl
. Salin sertifikasi yang ditandatangani ke mesin klien.
Detail setiap langkah diberikan.
Masuk ke mesin klien (node kepala siaga).
ssh sshuser@HeadNode1_Name
Hapus direktori ssl yang ada.
rm -R ~/ssl mkdir ssl cd ssl
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"
Menyalin permintaan penandatanganan sertifikat ke CA
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Beralih ke mesin CA (node 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
Salin sertifikasi klien yang ditandatangani dari CA (node kepala aktif) ke mesin klien.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Salin ca-cert ke mesin klien
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Masuk ke mesin klien (simpul kepala siaga) dan navigasi ke direktori ssl.
ssh sshuser@HeadNode1_Name cd ssl
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
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
- Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Untuk Menggunakan TLS 1.3, tambahkan konfigurasi berikut ke file
Verifikasi
Jalankan langkah-langkah ini pada mesin klien.
Catatan
Jika HDInsight 4.0 dan Kafka 2.1 diinstal, Anda dapat menggunakan produsen/ konsumen konsol untuk memverifikasi pengaturan Anda. Jika tidak, jalankan produsen Kafka di port 9092 dan kirim pesan ke topik tersebut, lalu gunakan konsumen Kafka di port 9093 yang menggunakan TLS.
Kafka 2.1 atau lebih tinggi
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
Mulai produsen konsol dan berikan jalur
client-ssl-auth.properties
sebagai file konfigurasi untuk produsen./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
Buka koneksi ssh lain ke mesin klien dan mulai 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