2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Kirjoittaja Lewei Community (forum.lwops.cn) Xu Yuan
Nykyaikaisia hajautettuja järjestelmiä rakennettaessa tiedonsiirron turvallisuuden varmistaminen on ratkaisevan tärkeää. Apache Kafka ja Zookeeper ovat suosittuja hajautettuja viestijonoja ja koordinointipalveluita, jotka tarjoavat SSL (Secure Sockets Layer) -todennusmekanismin parantamaan tiedonsiirron turvallisuutta.
Tässä artikkelissa esitellään yksityiskohtaisesti koko prosessi SSL-varmenteen luomisesta palvelimen ja asiakkaan määrittämiseen sen varmistamiseksi, että tiedot ovat täysin suojattuja lähetyksen aikana.
1. Määritä Kafka-tilin salasana:
1. Ensin sinun on muokattava kafka-määritystiedostoa: vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties
broker.id=0
listeners=SASL_PLAINTEXT://:9092
advertisingd.listeners=SASL_PLAINTEXT://10.176.31.137:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/asop/kafka/logs
lukumäärä.osioita=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
tranzakció.state.log.replication.factor=1
tranzakció.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
#Käytetty todennusprotokolla
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL-mekanismi
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Luokalla täydellinen todennus
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#Jos ACL-määritystä (access control list) ei löydy, mikä tahansa toiminto on sallittu.
allow.everyone.if.no.acl.found=false
#Sinun on otettava käyttöön pääjärjestelmänvalvojan asetus ja asetettava vierailijakäyttäjä pääjärjestelmänvalvojaksi.
super.users=Käyttäjä:vierailija
2. Toiseksi luo palvelimelle kirjautumisen vahvistustiedosto. Voit nimetä tiedoston haluamallasi tavalla, esimerkiksi vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf seuraa
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule vaaditaan
käyttäjätunnus = "vierailija"
salasana="qaz@123"
user_visitor="qaz@123";
};
3. Muokkaa sitten kafka-asennushakemistoa vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh ja lisää muuttujat tiedoston yläosaan.
vienti KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
4. Luo seuraavaksi käyttäjälle ja tuottajalle kirjautumisen vahvistustiedosto. Voit nimetä tiedoston haluamallasi tavalla, kuten kafka_client_jaas.conf. Tiedoston sisältö on seuraava (jos kyseessä on ohjelman käyttö, esim. springboot-käyttö , sitä ei tarvitse määrittää)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule vaaditaan
käyttäjätunnus = "vierailija"
salasana="qaz@123";
};
5. Lisää seuraavat konfiguraatiot kenttään kuluttaja.properties ja tuottaja.properties:
vim /asop/kafka/kafka_2.11-2.1.0/config/consumer.properties
vim /asop/kafka/kafka_2.11-2.1.0/config/producer.properties
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
6. Muokkaa kafka-asennushakemistoja bin/kafka-console-producer.sh ja bin/kafka-console-consumer.sh ja lisää muuttujat tiedostojen yläosaan.
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
vienti KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"
7. Käynnistä zookeeper ja kafka. Tässä vaiheessa palvelinpuolen kafka-käyttäjän sisäänkirjautumisen määritys on valmis (sulje ensin kafka ja sitten zookeeper).
Sulje palvelu 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
Aloita palvelu 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
Sammuta palvelueläintarhanhoitaja-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh stop /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Käynnistä eläintarhanhoitaja-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh aloitus /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
8. Luo ja tarkastele teemoja
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-producer.sh -- broker-list 10.176.31.137:9092 --topic cmdb --producer-property security.protocol=SASL_PLAINTEXT --producer- property sasl.mechanism=PLAIN
vastaanottaa viestejä
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server 10.176.31.137:9092 --topic cmdb --from-beginning --consumer-property security.protocol= SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN
2. Määritä ssal-tilin salasana zk:lle ja kafkalle:
Palvelin {
org.apache.kafka.common.security.plain.PlainLoginModule vaaditaan
käyttäjätunnus = "admin"
salasana="admin@12"
user_kafka="kafka@123";
};
Server.username、Server.password为 Zookeeper 内部通信的用户名和密码,因此保证每个 zk 节点该属性一致即可
Server.user_xxx 中 xxx 为自定义用户名,用于 zkClient 连接所使用的用户名和密码,即为 kafka 创建的用户名
1.2 Määritä /asop/zk/zookeeper-3.4.13/conf/zoo.cfg-tiedosto
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requestClientAuthScheme=sasl
jaasLoginRenew=3600000
zookeeper.sasl.client=true
Zookeeper.sasl.client on asetettu arvoon tosi, jotta asiakkaan todennus voidaan ottaa käyttöön. Muussa tapauksessa zoo_jaas.conf-tiedostossa määritetty käyttäjänimi ei toimi.
1.3 Tuo riippuvuuspaketteja
Koska käytetty luvanvarmistusluokka on: org.apache.kafka.common.security.plain.PlainLoginModule, tarvitaan kafka-aiheiset jar-paketit. Luo uusi kansio zk_sasl_lib seuraavasti: Kopioi seuraavat jar-paketit kafka/lib-hakemistosta hakemistoon. zookeeper lib ja äskettäin luotu zk_sasl_lib-hakemisto:
kafka-clients-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/zookeeper-3.4.13/zk_sasl_lib
cp /asop/kafka/kafka_2.11-2.1.0/libs/kafka-clients-2.1.0.jar /asop/zk/zookeeper-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/zookeeper-3.4.13/zk_sasl_lib/
chmod 755 -R /asop/zk/zookeeper-3.4.13/zk_sasl_lib/
1.4 Muokkaa tiedostoa zkEnv.sh/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh
Ennen muutosta: Jos ei, lisää se suoraan
export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP} m $SERVER_JVMFLAGS"
Muokkauksen jälkeen:
jar:lle tiedostossa /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar;
tehdä
CLASSPATH=“ purkki : purkki:jar:CLASSPATH”
tehty
export SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf"
Käynnistä vain Zookeeper-palvelu uudelleen
Sammuta palvelueläintarhanhoitaja-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh stop /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Käynnistä eläintarhanhoitaja-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh aloitus /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule vaaditaan
käyttäjätunnus = "vierailija"
salasana="qaz@123"
user_visitor="qaz@123";
};
Asiakas{
org.apache.kafka.common.security.plain.PlainLoginModule vaaditaan
käyttäjätunnus = "kafka"
salasana="kafka@123";
};
KafkaServer.username、KafkaServer.password 为 broker 内部通信的用户名密码,同上
KafkaServer.user_xxx jossa xxx:n on oltava yhdenmukainen KafkaServer.username:ssä määritetyn käyttäjänimen kanssa, ja myös salasanan on oltava johdonmukainen
KafkaServer.user_producer ja KafkaServer.user_consumer valmistautuvat myöhempään ACL:ään, jotta kuluttajat ja tuottajat käyttävät eri tilejä ja kuluttajatilit voivat vain kuluttaa dataa ja tuottajatilit vain tuottaa dataa.
Client.username ja Client.password täyttävät Zookeeperiin rekisteröidyn tilin salasanan, jota käytetään välittäjän ja eläintarhanhoitajan väliseen viestintään (jos zookeeper ei ole määritetty SASL:n kanssa, se voidaan jättää huomiotta. Jos zookeeper.sasl.client on epätosi, se voi myös huomioimatta. Loki on seuraava)
[2021-06-29 17:14:30,204] VAROITUS SASL-määritys epäonnistui: javax.security.auth.login.LoginException: Määritetyssä JAAS-määritystiedostossa: '/Users/wjun/env, ei löytynyt JAAS-määritysosiota 'Client' /kafka/config/kafka_server_jaas.conf'. Jatkaa yhteyttä Zookeeper-palvelimeen ilman SASL-todennusta, jos Zookeeper-palvelin sallii sen. (org.apache.zookeeper.ClientCnxn)
2.2 Muokkaa server.properties-tiedostoa
broker.id=0
listeners=SASL_PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://192.168.157.198:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/asop/kafka/logs
lukumäärä.osioita=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
tranzakció.state.log.replication.factor=1
tranzakció.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
#Käytetty todennusprotokolla
security.inter.broker.protocol=SASL_PLAINTEXT
#SASL-mekanismi
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Luokalla täydellinen todennus
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#Jos ACL-määritystä (access control list) ei löydy, mikä tahansa toiminto on sallittu.
allow.everyone.if.no.acl.found=false
#Sinun on otettava käyttöön pääjärjestelmänvalvojan asetus ja asetettava vierailijakäyttäjä pääjärjestelmänvalvojaksi.
super.users=Käyttäjä:vierailija
Missä localhost on vaihdettava IP-osoitteeksi
super.users määrittää pääkäyttäjän, johon myöhemmät ACL-määritykset eivät vaikuta.
2.3 Muokkaa käynnistysskriptiä
Muokkaa kafka-server-start.sh-tiedostoa lataamaan se tiedostoon kafka_server_jaas.conf/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh
ennen korjaamista:
jos [ “x$KAFKA_HEAP_OPTS” = “x” ]; sitten
vienti KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
fi
Muokkauksen jälkeen:
(Lisää tämä rivi ensin ensimmäiselle riville. Jos sinulla on se jo, sinun ei tarvitse lisätä sitä.) export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11- 2.1.0/config/kafka_server_jaas.conf "
jos [ “x$KAFKA_HEAP_OPTS” = “x” ]; sitten
export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
fi
Aseta ACL-säännöt eläintarhanhoitajalle
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #Syötä zk:n komentorivitila
addauth digest admin:admin@12 #Vaihda kirjautumiskäyttäjää (pääkäyttäjä on zk-määritystiedostossa/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf)
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(Aseta IP-osoite ja käyttäjätilin salasana, johon voi kirjautua. admin on yllä olevassa zk-määritystiedostossa määritetty järjestelmänvalvoja ja Kafka-käyttäjä on /asop /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf-tiedostossa (asiakassovelluksessa) määritetty kafka-yhteyden zk-käyttäjä.
addauth digest kafka:kafka@123 #Vaihda kafka-käyttäjään ja aseta acl uudelleen
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa
Huomautus: Jos haluat lisätä IP-osoitteen sallittujen listalle tai käyttäjän on lisättävä se alkuperäisellä pohjalla, muuten se korvataan.
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa,auth:admin:admin@12:cdrwa,ip:1.1.1.1
Sinun on palautettava käyttöoikeudet, suorita ilman acl-asetusta
setAcl / world:anyone:cdrwa
Käynnistä vain kafka-palvelu uudelleen
Sulje palvelu 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
Aloita palvelu 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
Tässä vaiheessa kafkan ja zookeeperin SSL-todennusmääritys on valmis. Jos haluat lisää käyttö- ja huoltotaitoja, kiinnitä huomiota Lewei-yhteisöön.