Partage de technologie

Tutoriel de certification SSL pour Kafka et Zookeeper

2024-07-12

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

Auteur Communauté Lewei (forum.lwops.cn) Xu Yuan
Lors de la construction de systèmes distribués modernes, il est crucial d’assurer la sécurité de la transmission des données. Apache Kafka et Zookeeper, en tant que services de coordination et de files d'attente de messages distribués populaires, fournissent un mécanisme d'authentification SSL (Secure Sockets Layer) pour améliorer la sécurité lors de la transmission des données.
Cet article présentera en détail l'ensemble du processus depuis la génération d'un certificat SSL jusqu'à la configuration du serveur et du client pour garantir que les données sont entièrement protégées pendant la transmission.

1. Configurez le mot de passe du compte Kafka :
1. Tout d'abord, vous devez modifier le fichier de configuration de kafka : vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties

courtier.id=0
auditeurs=SASL_PLAINTEXT://:9092
annonce.auditeurs=SASL_PLAINTEXT://10.176.31.137:9092
num.network.threads=3
nombre de threads io = 8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/asop/kafka/logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
gardien de zoo.connect=localhost:2181
gardien de zoo.connexion.timeout.ms=6000
groupe.initial.rebalance.delay.ms=0

#Protocole d'authentification utilisé
security.inter.broker.protocol=SASL_PLAINTEXT
Mécanisme #SASL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Classe pour terminer l'authentification
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#Si aucune configuration ACL (liste de contrôle d'accès) n'est trouvée, toute opération est autorisée.
autoriser.tout.le.monde.si.aucune.acl.trouvée=false
#Vous devez activer le paramètre de super-administrateur et définir l'utilisateur visiteur en tant que super-administrateur.
super.users=Utilisateur:visiteur

2. Deuxièmement, créez un fichier de vérification de connexion pour le serveur. Vous pouvez nommer le fichier selon vos préférences, par exemple vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf. Le contenu du fichier est le suivant. suit

Serveur Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule requis
nom d'utilisateur = « visiteur »
mot de passe = « qaz@123 »
utilisateur_visiteur = "qaz@123";
};

3. Modifiez ensuite le répertoire d'installation de kafka vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh et ajoutez des variables en haut du fichier

export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
Insérer la description de l'image ici
4. Ensuite, créez un fichier de vérification de connexion pour le consommateur et le producteur. Vous pouvez nommer le fichier selon vos préférences, par exemple kafka_client_jaas.conf. Le contenu du fichier est le suivant (s'il s'agit d'un accès au programme, tel qu'un accès Springboot. , il n'est pas nécessaire de le configurer)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf

KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule requis
nom d'utilisateur = « visiteur »
mot de passe = « qaz@123 »;
};

5. Ajoutez respectivement les configurations suivantes à consumer.properties et producteur.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

sécurité.protocole=SASL_PLAINTEXT
sasl.mechanism=PLAIN

6. Modifiez les répertoires d'installation de kafka bin/kafka-console-producer.sh et bin/kafka-console-consumer.sh et ajoutez des variables en haut des fichiers.
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

export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"Insérer la description de l'image ici
7. Démarrez respectivement zookeeper et kafka. À ce stade, la configuration de la vérification de la connexion de l'utilisateur kafka côté serveur est terminée (fermez d'abord kafka, puis fermez zookeeper).

Arrêter le service 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

Démarrer le service 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

Arrêtez le service zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh arrêter /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Démarrer le service zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh démarrer /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

8. Créer et afficher des thèmes

/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
Insérer la description de l'image ici
recevoir des messages

/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=PLAINInsérer la description de l'image ici

2. Configurez le mot de passe du compte ssal pour zk et kafka :

  1. Configuration du gardien de zoo SASL
    1.1 Créer un nouveau fichier zoo_jaas.conf
    Il n'y a pas d'exigences particulières concernant le nom de fichier et le chemin du fichier zoo_jaas.conf. Il est généralement placé dans le répertoire ${ZOOKEEPER_HOME}/conf vim /asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf.

Serveur {
org.apache.kafka.common.security.plain.PlainLoginModule requis
nom d'utilisateur = "admin"
mot de passe = « admin@12 »
utilisateur_kafka=“kafka@123”;
};

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

1.2 Configurer le fichier /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
gardien de zoo.sasl.client=true

Zookeeper.sasl.client est défini sur true pour activer l'authentification du client. Sinon, le nom d'utilisateur configuré dans zoo_jaas.conf ne fonctionnera pas. Le client peut toujours se connecter sans fichier jaas, mais avec AVERTISSEMENT.

1.3 Importer des packages de dépendances
Étant donné que la classe de vérification des autorisations utilisée est : org.apache.kafka.common.security.plain.PlainLoginModule, les packages jar liés à kafka sont requis. Créez un nouveau dossier zk_sasl_lib comme suit : Copiez les packages jar suivants du répertoire kafka/lib vers. zookeeper lib et le répertoire zk_sasl_lib nouvellement créé :

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 Modifier le fichier zkEnv.sh/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh
Avant modification : Sinon, ajoutez-le directement

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

Après modification:

pour le pot dans /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar ;
faire
CLASSPATH = " pot : pot :ouil:CHEMIN DE CLASSES”
fait

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

Redémarrez simplement le service Zookeeper

Arrêtez le service zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh arrêter /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Démarrer le service zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh démarrer /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

  1. Kakfa configure SASL
    2.1 Créer un nouveau fichier kafka_server_jaas.conf
    Il n'y a aucune exigence concernant le nom du fichier kafka_server_jaas.conf et le chemin de stockage. Il est généralement placé dans le répertoire ${KAFKA_HOME}/config/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf.

Serveur Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule requis
nom d'utilisateur = « visiteur »
mot de passe = « qaz@123 »
utilisateur_visiteur = "qaz@123";
};
Client{
org.apache.kafka.common.security.plain.PlainLoginModule requis
nom d'utilisateur = "kafka"
mot de passe = « kafka@123 »;
};

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

KafkaServer.user_xxx où xxx doit être cohérent avec le nom d'utilisateur configuré dans KafkaServer.username, et le mot de passe doit également être cohérent
KafkaServer.user_producer et KafkaServer.user_consumer préparent l'ACL suivante, de sorte que les consommateurs et les producteurs utilisent des comptes différents, et que les comptes de consommateur ne peuvent consommer que des données et que les comptes de producteur ne peuvent produire que des données.
Client.username et Client.password renseignent le mot de passe du compte enregistré dans Zookeeper, qui est utilisé pour la communication entre le courtier et zookeeper (si zookeeper n'est pas configuré avec SASL, il peut être ignoré. Si zookeeper.sasl.client est faux, il peut également être ignoré. Incluez-le simplement. Le journal est le suivant)

[2021-06-29 17:14:30,204] AVERTISSEMENT Échec de la configuration SASL : javax.security.auth.login.LoginException : aucune section de configuration JAAS nommée « Client » n'a été trouvée dans le fichier de configuration JAAS spécifié : « /Users/wjun/env/kafka/config/kafka_server_jaas.conf ». La connexion au serveur Zookeeper se poursuivra sans authentification SASL, si le serveur Zookeeper l'autorise. (org.apache.zookeeper.ClientCnxn)

2.2 Modifier le fichier server.properties
courtier.id=0
auditeurs=SASL_PLAINTEXT://:9092
annonce.auditeurs=SASL_PLAINTEXT://192.168.157.198:9092
num.network.threads=3
nombre de threads io = 8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/asop/kafka/logs
num.partitions=1
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.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
gardien de zoo.connexion.timeout.ms=6000
groupe.initial.rebalance.delay.ms=0

#Protocole d'authentification utilisé
security.inter.broker.protocol=SASL_PLAINTEXT
Mécanisme #SASL
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Classe pour terminer l'authentification
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
#Si aucune configuration ACL (liste de contrôle d'accès) n'est trouvée, toute opération est autorisée.
autoriser.tout.le.monde.si.aucune.acl.trouvée=false
#Vous devez activer le paramètre de super-administrateur et définir l'utilisateur visiteur en tant que super-administrateur.
super.users=Utilisateur:visiteur

Où localhost doit être remplacé par une adresse IP

super.users configure le super utilisateur, qui n'est pas affecté par les configurations ACL ultérieures.

2.3 Modifier le script de démarrage
Modifiez le fichier kafka-server-start.sh pour le charger dans le fichier kafka_server_jaas.conf/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh

avant de réparer :

si [ « x$KAFKA_HEAP_OPTS » = « x » ]; alors
exporter KAFKA_HEAP_OPTS = « -Xmx1G -Xms1G »
Fi

Après modification:
(Ajoutez d'abord cette ligne à la première ligne. Si vous l'avez déjà, vous n'avez pas besoin de l'ajouter.) export KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11- 2.1.0/config/kafka_server_jaas.conf "
si [ « x$KAFKA_HEAP_OPTS » = « x » ]; alors
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

Définir les règles ACL pour le gardien de zoo
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #Entrez en mode ligne de commande de zk

addauth digest admin:admin@12 #Utilisateur de connexion Switch (le super administrateur est dans le fichier de configuration zk/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf)

setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(Définissez l'adresse IP et le mot de passe du compte utilisateur qui peut être connecté. admin est l'administrateur défini dans le fichier de configuration zk ci-dessus, et l'utilisateur Kafka est /asop L'utilisateur zk de connexion kafka défini dans le fichier /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf (sous Client))

addauth digest kafka:kafka@123 #Passer à l'utilisateur kafka et définir à nouveau l'acl
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa

Remarque : Si vous souhaitez ajouter une adresse IP à la liste blanche ou si l'utilisateur doit l'ajouter sur la base d'origine, sinon elle sera écrasée.
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa,auth:admin:admin@12:cdrwa,ip:1.1.1.1

Besoin de restaurer les autorisations, exécuter sans définir acl
setAcl / monde:quelqu'un:cdrwa

Redémarrez simplement le service Kafka

Arrêter le service 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

Démarrer le service 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

À ce stade, la configuration de l'authentification SSL de kafka et zookeeper est terminée. Pour plus de compétences en matière d'exploitation et de maintenance, veuillez faire attention à la communauté Lewei. Pour plus de questions sur le fonctionnement et la maintenance, veuillez laisser un message.