Berbagi teknologi

Tutorial sertifikasi SSL untuk kafka dan zookeeper

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Penulis Komunitas Lewei (forum.lwops.cn) Xu Yuan
Saat membangun sistem terdistribusi modern, memastikan keamanan transmisi data sangatlah penting. Apache Kafka dan Zookeeper, sebagai layanan koordinasi dan antrian pesan terdistribusi yang populer, menyediakan mekanisme otentikasi SSL (Secure Sockets Layer) untuk meningkatkan keamanan selama transmisi data.
Artikel ini akan memperkenalkan secara rinci seluruh proses mulai dari pembuatan sertifikat SSL hingga konfigurasi server dan klien untuk memastikan bahwa data terlindungi sepenuhnya selama transmisi.

1. Konfigurasikan kata sandi akun Kafka:
1. Pertama, Anda perlu memodifikasi file konfigurasi kafka: vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties

broker.id=0
pendengar=SASL_PLAINTEXT://:9092
diiklankan.pendengar=SASL_PLAINTEXT://10.176.31.137:9092
num.jaringan.utas=3
jumlah.io.threads=8
soket.kirim.buffer.byte=102400
soket.terima.buffer.byte=102400
soket.permintaan.maks.byte=104857600
log.dirs=/asop/kafka/logs
jumlah partisi = 1
jumlah.utas.pemulihan.per.data.dir=1
offset.topik.replikasi.faktor=1
transaksi.state.log.replikasi.faktor=1
transaksi.state.log.min.isr=1
log.retensi.jam=168
log.segmen.byte=1073741824
log.retensi.periksa.interval.ms=300000
penjaga kebun binatang.sambungkan=host lokal:2181
penjaga kebun binatang.waktu koneksi.habis.ms=6000
grup.awal.penyeimbangan.penundaan.ms=0

#Protokol otentikasi digunakan
keamanan.inter.broker.protokol=SASL_PLAINTEXT
#SASLmekanisme
sasl.enabled.mekanisme=BIASA
sasl.mekanisme.inter.broker.protokol=PLAIN
#Kelas untuk menyelesaikan otentikasi
pengotorisasi.kelas.nama=kafka.keamanan.auth.SimpleAclAuthorizer
#Jika tidak ada konfigurasi ACL (daftar kontrol akses) yang ditemukan, operasi apa pun diperbolehkan.
izinkan.semua.orang.jika.tidak.acl.ditemukan=salah
#Anda perlu mengaktifkan pengaturan administrator super dan mengatur pengguna pengunjung sebagai administrator super.
super.users=Pengguna:pengunjung

2. Kedua, buat file verifikasi login untuk server. Anda dapat memberi nama file sesuai keinginan Anda, seperti vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf berikut

Server Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule diperlukan
nama pengguna=“pengunjung”
kata sandi=“qaz@123”
pengunjung_pengguna=“qaz@123”;
};

3. Kemudian modifikasi direktori instalasi kafka vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh dan tambahkan variabel di bagian atas file

ekspor KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
Masukkan deskripsi gambar di sini
4. Selanjutnya buat file verifikasi login untuk konsumen dan produsen. Anda dapat memberi nama file sesuai keinginan Anda, seperti kafka_client_jaas.conf. Isi filenya adalah sebagai berikut (jika akses program, misalnya akses springboot , itu tidak perlu dikonfigurasi)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf

Klien Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule diperlukan
nama pengguna=“pengunjung”
kata sandi="qaz@123";
};

5. Tambahkan konfigurasi berikut ke masing-masing properti konsumen dan properti produsen:
vim /asop/kafka/kafka_2.11-2.1.0/config/consumer.properties
vim /asop/kafka/kafka_2.11-2.1.0/config/producer.properties

protokol keamanan=SASL_PLAINTEXT
sasl.mekanisme=POLOS

6. Ubah direktori instalasi kafka bin/kafka-console-producer.sh dan bin/kafka-console-consumer.sh, dan tambahkan variabel di bagian atas file.
vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-producer.sh
vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh

ekspor KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"Masukkan deskripsi gambar di sini
7. Mulai zookeeper dan kafka masing-masing. Pada titik ini, konfigurasi verifikasi login pengguna kafka sisi server selesai (pertama tutup kafka lalu tutup zookeeper)

Matikan layanan kafka
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-stop.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties

Mulai layanan kafka
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties

Matikan layanan zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh hentikan /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Mulai layanan zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh mulai /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

8. Membuat dan melihat tema

/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-producer.sh --broker-list 10.176.31.137:9092 --topik cmdb --properti-produsen keamanan.protokol=SASL_PLAINTEXT --properti-produsen sasl.mekanisme=PLAIN
Masukkan deskripsi gambar di sini
menerima pesan

/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server 10.176.31.137:9092 --topik cmdb --dari-awal --properti-konsumen keamanan.protokol=SASL_PLAINTEXT --properti-konsumen sasl.mekanisme=PLAINMasukkan deskripsi gambar di sini

2. Konfigurasikan kata sandi akun ssal untuk zk dan kafka:

  1. Konfigurasi penjaga kebun binatang SASL
    1.1 Buat file zoo_jaas.conf baru
    Tidak ada persyaratan khusus untuk nama file dan jalur file zoo_jaas.conf. Biasanya ditempatkan di direktori ${ZOOKEEPER_HOME}/conf vim /asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf.

Pelayan {
org.apache.kafka.common.security.plain.PlainLoginModule diperlukan
nama pengguna=“admin”
kata sandi=“admin@12”
pengguna_kafka=“kafka@123”;
};

    Server.username、Server.password为 Zookeeper 内部通信的用户名和密码,因此保证每个 zk 节点该属性一致即可
    Server.user_xxx 中 xxx 为自定义用户名,用于 zkClient 连接所使用的用户名和密码,即为 kafka 创建的用户名
  • 1
  • 2

1.2 Konfigurasikan file /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
penyedia otentikasi.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
memerlukanClientAuthScheme=sasl
jaasLoginPerbarui=3600000
penjaga kebun binatang.sasl.client=benar

Zookeeper.sasl.client disetel ke true untuk mengaktifkan otentikasi klien. Jika tidak, nama pengguna yang dikonfigurasi di zoo_jaas.conf tidak akan berfungsi. Klien masih dapat terhubung tanpa file jaas, tetapi dengan PERINGATAN.

1.3 Impor paket ketergantungan
Karena kelas verifikasi izin yang digunakan adalah: org.apache.kafka.common.security.plain.PlainLoginModule, diperlukan paket jar terkait kafka. Buat folder baru zk_sasl_lib sebagai berikut: Salin paket jar berikut dari direktori kafka/lib ke lib zookeeper dan direktori zk_sasl_lib yang baru dibuat:

kafka-klien-2.4.1.jar
lz4-java-1.6.0.jar
slf4j-api-1.7.28.jar
slf4j-log4j12-1.7.28.jar
snappy-java-1.1.7.3.jar

mkdir /asop/zk/penjaga kebun binatang-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/klien-kafka-2.1.0.jar /asop/zk/keepkeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/lz4-java-1.5.0.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-api-1.7.25.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-log4j12-1.7.25.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/snappy-java-1.1.7.2.jar /asop/zk/zookeeper-3.4.13/lib/
cp /asop/kafka/kafka_2.11-2.1.0/libs/kafka-clients-2.1.0.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/lz4-java-1.5.0.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-api-1.7.25.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/slf4j-log4j12-1.7.25.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/snappy-java-1.1.7.2.jar /asop/zk/zookeeper-3.4.13/zk_sasl_lib

chmod 755 -R /asop/zk/keepkeeper-3.4.13/zk_sasl_lib/
chmod 755 -R /asop/zk/keepkeeper-3.4.13/zk_sasl_lib/

1.4 Ubah file zkEnv.sh/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh
Sebelum modifikasi: Jika tidak, langsung tambahkan

ekspor SERVER_JVMFLAGS=“-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS”

Setelah modifikasi:

untuk jar di /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar;
Mengerjakan
KELAS=“ toples : toples:yaR:“JALAN KELAS”
Selesai

ekspor SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf "

Mulai ulang saja layanan Zookeeper

Matikan layanan zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh hentikan /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Mulai layanan zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh mulai /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

  1. Kakfa mengkonfigurasi SASL
    2.1 Buat file kafka_server_jaas.conf baru
    Tidak ada persyaratan untuk nama file kafka_server_jaas.conf dan jalur penyimpanan. Biasanya ditempatkan di direktori ${KAFKA_HOME}/config/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf

Server Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule diperlukan
nama pengguna=“pengunjung”
kata sandi=“qaz@123”
pengunjung_pengguna=“qaz@123”;
};
Klien{
org.apache.kafka.common.security.plain.PlainLoginModule diperlukan
nama pengguna=“kafka”
kata sandi="kafka@123";
};

    KafkaServer.username、KafkaServer.password 为 broker 内部通信的用户名密码,同上
  • 1

KafkaServer.user_xxx di mana xxx harus konsisten dengan nama pengguna yang dikonfigurasi di KafkaServer.username, dan kata sandinya juga harus konsisten
KafkaServer.user_producer dan KafkaServer.user_consumer mempersiapkan ACL berikutnya, sehingga konsumen dan produsen menggunakan akun yang berbeda, dan akun konsumen hanya dapat menggunakan data, dan akun produsen hanya dapat menghasilkan data.
Client.username dan Client.password isi password akun yang terdaftar di Zookeeper, yang digunakan untuk komunikasi antara broker dan zookeeper (jika zookeeper tidak dikonfigurasi dengan SASL, dapat diabaikan. Jika zookeeper.sasl.client salah, dapat juga diabaikan. Masukkan saja.

[2021-06-29 17:14:30,204] PERINGATAN Konfigurasi SASL gagal: javax.security.auth.login.LoginException: Tidak ada bagian konfigurasi JAAS bernama 'Client' yang ditemukan dalam berkas konfigurasi JAAS yang ditentukan: '/Users/wjun/env/kafka/config/kafka_server_jaas.conf'. Akan melanjutkan koneksi ke server Zookeeper tanpa autentikasi SASL, jika server Zookeeper mengizinkannya. (org.apache.zookeeper.ClientCnxn)

2.2 Ubah file server.properties
broker.id=0
pendengar=SASL_PLAINTEXT://:9092
diiklankan.pendengar=SASL_PLAINTEXT://192.168.157.198:9092
num.jaringan.utas=3
jumlah.io.threads=8
soket.kirim.buffer.byte=102400
soket.terima.buffer.byte=102400
soket.permintaan.maks.byte=104857600
log.dirs=/asop/kafka/logs
jumlah partisi = 1
jumlah.utas.pemulihan.per.data.dir=1
offset.topik.replikasi.faktor=1
transaksi.state.log.replikasi.faktor=1
transaksi.state.log.min.isr=1
log.retensi.jam=168
log.segmen.byte=1073741824
log.retensi.periksa.interval.ms=300000
penjaga kebun binatang.sambungkan=127.0.0.1:2181
penjaga kebun binatang.waktu koneksi.habis.ms=6000
grup.awal.penyeimbangan.penundaan.ms=0

#Protokol otentikasi digunakan
keamanan.inter.broker.protokol=SASL_PLAINTEXT
#SASLmekanisme
sasl.enabled.mekanisme=BIASA
sasl.mekanisme.inter.broker.protokol=PLAIN
#Kelas untuk menyelesaikan otentikasi
pengotorisasi.kelas.nama=kafka.keamanan.auth.SimpleAclAuthorizer
#Jika tidak ada konfigurasi ACL (daftar kontrol akses) yang ditemukan, operasi apa pun diperbolehkan.
izinkan.semua.orang.jika.tidak.acl.ditemukan=salah
#Anda perlu mengaktifkan pengaturan administrator super dan mengatur pengguna pengunjung sebagai administrator super.
super.users=Pengguna:pengunjung

Dimana localhost perlu diubah menjadi alamat IP

super.users mengonfigurasi pengguna super, yang tidak terpengaruh oleh konfigurasi ACL berikutnya.

2.3 Ubah skrip startup
Ubah file kafka-server-start.sh untuk memuatnya ke dalam file kafka_server_jaas.conf/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh

sebelum memperbaiki:

jika [ “x$KAFKA_HEAP_OPTS” = “x” ]; maka
ekspor KAFKA_HEAP_OPTS=“-Xmx1G -Xms1G”
baiklah

Setelah modifikasi:
(Tambahkan baris ini ke baris pertama terlebih dahulu. Jika sudah punya, tidak perlu menambahkannya.) 2.1.0/config/kafka_server_jaas.conf "
jika [ “x$KAFKA_HEAP_OPTS” = “x” ]; maka
ekspor KAFKA_HEAP_OPTS=“-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf”
baiklah

Tetapkan aturan ACL untuk penjaga kebun binatang
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #Masuk ke mode baris perintah zk

addauth mencerna admin:admin@12 #Ganti pengguna login (administrator super ada di file konfigurasi zk/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf)

setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(Atur IP dan kata sandi akun pengguna yang dapat login. admin adalah administrator yang ditentukan dalam file konfigurasi zk di atas, dan pengguna Kafka adalah /asop Pengguna zk koneksi kafka yang ditentukan dalam file /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf (di bawah Klien))

addauth mencerna kafka:kafka@123 #Beralih ke pengguna kafka dan setel acl lagi
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa

Catatan: Jika Anda ingin menambahkan IP daftar putih atau pengguna harus menambahkannya berdasarkan aslinya, jika tidak maka akan ditimpa.
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa,auth:admin:admin@12:cdrwa,ip:1.1.1.1

Perlu memulihkan izin, jalankan tanpa mengatur acl
setAcl / dunia:siapa saja:cdrwa

Mulai ulang saja layanan kafka

Matikan layanan kafka
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-stop.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties

Mulai layanan kafka
#/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh -daemon /asop/kafka/kafka_2.11-2.1.0/config/server.properties

Pada titik ini, konfigurasi otentikasi SSL kafka dan zookeeper selesai. Untuk keterampilan pengoperasian dan pemeliharaan lebih lanjut, harap perhatikan komunitas Lewei. Untuk pertanyaan pengoperasian dan pemeliharaan lebih lanjut, silakan tinggalkan pesan.