Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
Langkah-langkah berikut diulang pada masing-masing dari tiga simpul pekerja:
- Buat sertifikat.
- Buat permintaan penandatanganan sertifikasi.
- Kirim permintaan penandatanganan sertifikasi ke Otoritas Sertifikat (CA).
- Masuk ke dalam CA dan tanda tangani permintaan tersebut.
- Gunakan SCP untuk mengirimkan kembali sertifikat yang telah ditandatangani ke simpul pekerja.
- Gunakan perintah SCP untuk mengirim sertifikat publik CA ke simpul pekerja.
Setelah Anda memiliki semua sertifikat, masukkan sertifikat ke dalam toko sertifikasi.
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,wn1atauwn2sebagaimana mestinya.WorkerNode0_NamedanHeadNode0_Nameharus diganti dengan nama komputer masing-masing.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 sslLakukan 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 sslPada setiap simpul pekerja, jalankan langkah-langkah berikut menggunakan cuplikan kode.
- Buat keystore dan isi dengan sertifikat privat baru.
- Buat permintaan penandatanganan sertifikat.
- 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-requestNota
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
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 -nodesUbah 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"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-signedKirim 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-certPada 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:
Masuk ke portal Microsoft Azure dan pilih kluster Azure HDInsight Apache Kafka Anda.
Buka UI Ambari dengan mengklik beranda Ambari di bawah Dasbor kluster.
Di bawah Kafka Broker atur properti listener ke
PLAINTEXT://localhost:9092,SSL://localhost:9093Di bawah Advanced kafka-broker atur properti security.inter.broker.protocol ke
SSL
Di bawah Kafka-broker kustom atur properti ssl.client.auth ke
required.Nota
Catatan: Langkah ini hanya diperlukan jika Anda menyiapkan autentikasi dan enkripsi.
Berikut adalah cuplikan layar yang memperlihatkan UI konfigurasi Ambari dengan perubahan ini.
Nota
- ssl.keystore.location dan ssl.truststore.location adalah lokasi lengkap keystore dan truststore Anda 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 trust store. 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.3ssl.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.
Penyiapan 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 komputer klien (hn1) dan navigasikan ke
~/sslfolder . - Impor sertifikat CA ke truststore.
- Impor sertifikat CA ke keystore.
Langkah-langkah ini dirinci dalam cuplikan kode berikut.
Masuk ke simpul CA.
ssh sshuser@HeadNode0_Name cd sslMenyalin ca-cert ke komputer klien
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-certMasuk ke komputer klien (simpul kepala siaga).
ssh sshuser@HeadNode1_Name cd sslImpor sertifikat CA ke truststore.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptImpor sertifikat CA ke keystore.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -nopromptBuat file
client-ssl-auth.propertiespada 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 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:
- Masuk ke komputer klien (simpul kepala siaga).
- Buat keystore Java dan dapatkan sertifikat yang ditandatangani untuk broker. Kemudian salin sertifikat ke VM tempat CA berjalan.
- Beralih ke komputer CA (simpul kepala aktif) untuk menandatangani sertifikat klien.
- Buka komputer klien (simpul kepala siaga) dan navigasi ke
~/sslfolder . Salin sertifikasi yang ditandatangani ke komputer klien.
Detail setiap langkah diberikan.
Masuk ke komputer klien (simpul kepala siaga).
ssh sshuser@HeadNode1_NameHapus direktori ssl yang ada.
rm -R ~/ssl mkdir ssl cd sslBuat 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-requestBeralih 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:MyClientPassword123Salin sertifikasi klien yang ditandatangani dari CA (simpul kepala aktif) ke komputer klien.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-certMenyalin ca-cert ke komputer klien
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert- Masuk ke komputer klien (simpul kepala siaga) dan navigasikan ke direktori ssl.
ssh sshuser@HeadNode1_Name cd sslBuat 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" -nopromptBuat file
client-ssl-auth.propertiesdi 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 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
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 2Mulai produser konsol dan berikan jalur ke
client-ssl-auth.propertiessebagai 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.propertiesBuka koneksi ssh lain ke komputer klien, lalu mulai proses konsumen konsol dan berikan jalur ke
client-ssl-auth.propertiessebagai 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