Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Autor Comunidad Lewei (forum.lwops.cn) Xu Yuan
Al construir sistemas distribuidos modernos, garantizar la seguridad de la transmisión de datos es crucial. Apache Kafka y Zookeeper, como servicios de coordinación y colas de mensajes distribuidos populares, proporcionan un mecanismo de autenticación SSL (Secure Sockets Layer) para mejorar la seguridad durante la transmisión de datos.
Este artículo presentará en detalle todo el proceso, desde generar un certificado SSL hasta configurar el servidor y el cliente para garantizar que los datos estén completamente protegidos durante la transmisión.
1. Configure la contraseña de la cuenta Kafka:
1. Primero, debe modificar el archivo de configuración de Kafka: vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties
corredor.id=0
oyentes=SASL_PLAINTEXT://:9092
anunciado.listeners=SASL_PLAINTEXT://10.176.31.137:9092
num.red.hilos=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.recepción.buffer.bytes=102400
socket.solicitud.máximo.bytes=104857600
registro.dirs=/asop/kafka/logs
num.particiones=1
num.recovery.threads.per.data.dir=1
offsets.tema.replicacion.factor=1
transacción.estado.registro.replicación.factor=1
transacción.estado.log.min.isr=1
log.retención.horas=168
log.segmento.bytes=1073741824
intervalo de comprobación de retención de registros ms=300000
guardián del zoológico.connect=localhost:2181
zookeeper.tiempo de espera de conexión.ms=6000
retraso.ms.de.reequilibrio.inicial.del.grupo=0
#Protocolo de autenticación utilizado
protocolo de seguridad entre intermediarios=SASL_PLAINTEXT
#mecanismoSASL
sasl.enabled.mechanisms=SIMPLE
sasl.mechanism.inter.broker.protocol=SIMPLE
#Clase para completar la autenticación
Autorizador.clase.nombre=kafka.security.auth.SimpleAclAuthorizer
#Si no se encuentra ninguna configuración de ACL (lista de control de acceso), se permite cualquier operación.
permitir.a.todos.si.no.se.encuentra.acl=falso
#Debe habilitar la configuración de superadministrador y configurar al usuario visitante como superadministrador.
super.users=Usuario:visitante
2. En segundo lugar, cree un archivo de verificación de inicio de sesión para el servidor. Puede nombrar el archivo según sus preferencias, como vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf. sigue
Servidor Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule requerido
nombre de usuario=“visitante”
contraseña=“qaz@123”
usuario_visitor="qaz@123";
};
3. Luego modifique el directorio de instalación de Kafka vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh y agregue variables en la parte superior del archivo.
exportar KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
4. A continuación, cree un archivo de verificación de inicio de sesión para el consumidor y el productor. Puede nombrar el archivo según sus preferencias, como kafka_client_jaas.conf. El contenido del archivo es el siguiente (si es acceso a programas, como acceso springboot). , no es necesario configurarlo)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf
Cliente Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule requerido
nombre de usuario=“visitante”
contraseña=“qaz@123”;
};
5. Agregue las siguientes configuraciones a consumer.properties y Producer.properties respectivamente:
vim /asop/kafka/kafka_2.11-2.1.0/config/consumer.properties
vim /asop/kafka/kafka_2.11-2.1.0/config/producer.properties
seguridad.protocolo=SASL_PLAINTEXT
sasl.mechanism=SIMPLE
6. Modifique los directorios de instalación de Kafka bin/kafka-console-producer.sh y bin/kafka-console-consumer.sh y agregue variables en la parte superior de los archivos.
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
exportar KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"
7. Inicie zookeeper y kafka respectivamente. En este punto, se completa la configuración de verificación de inicio de sesión del usuario de kafka en el lado del servidor (primero cierre kafka y luego cierre zookeeper).
Cerrar el servicio 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
Iniciar servicio 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
Cerrar el servicio zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh detenga /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Iniciar el servicio zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh iniciar /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
8. Crear y ver temas.
/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
recibir mensajes
/asop/kafka/kafka_2.11-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server 10.176.31.137:9092 --topic cmdb --desde-el-principio --consumer-property security.protocol=SASL_PLAINTEXT --consumer-property sasl.mechanism=PLAIN
2. Configure la contraseña de la cuenta ssal para zk y kafka:
Servidor {
org.apache.kafka.common.security.plain.PlainLoginModule requerido
nombre de usuario=“admin”
contraseña=“admin@12”
usuario_kafka=“kafka@123”;
};
Server.username、Server.password为 Zookeeper 内部通信的用户名和密码,因此保证每个 zk 节点该属性一致即可
Server.user_xxx 中 xxx 为自定义用户名,用于 zkClient 连接所使用的用户名和密码,即为 kafka 创建的用户名
1.2 Configurar el archivo /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
Requerir esquema de autenticación del cliente = sasl
jaasLoginRenew=3600000
zookeeper.sasl.client=verdadero
Zookeeper.sasl.client está configurado en verdadero para habilitar la autenticación del cliente. De lo contrario, el nombre de usuario configurado en zoo_jaas.conf no funcionará. El cliente aún puede conectarse sin un archivo jaas, pero con ADVERTENCIA.
1.3 Importar paquetes de dependencia
Debido a que la clase de verificación de permisos utilizada es: org.apache.kafka.common.security.plain.PlainLoginModule, se requieren paquetes jar relacionados con Kafka. Cree una nueva carpeta zk_sasl_lib de la siguiente manera: Copie los siguientes paquetes jar del directorio kafka/lib a. zookeeper lib y el directorio zk_sasl_lib recién creado:
clientes-kafka-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 Modificar el archivo zkEnv.sh/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh
Antes de la modificación: si no, agréguelo directamente
exportar SERVER_JVMFLAGS=“-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS”
Después de la modificación:
para jar en /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar;
hacer
RUTA DE CLASES=" tarro: tarro:Sía:RUTA DE CLASES”
hecho
exportar SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf "
Simplemente reinicie el servicio Zookeeper
Cerrar el servicio zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh detenga /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Iniciar el servicio zookeeper-3.4.13
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh iniciar /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Servidor Kafka {
org.apache.kafka.common.security.plain.PlainLoginModule requerido
nombre de usuario=“visitante”
contraseña=“qaz@123”
usuario_visitor="qaz@123";
};
Cliente{
org.apache.kafka.common.security.plain.PlainLoginModule requerido
nombre de usuario=“kafka”
contraseña=“kafka@123”;
};
KafkaServer.username、KafkaServer.password 为 broker 内部通信的用户名密码,同上
KafkaServer.user_xxx donde xxx debe ser coherente con el nombre de usuario configurado en KafkaServer.username y la contraseña también debe ser coherente
KafkaServer.user_producer y KafkaServer.user_consumer se preparan para la ACL posterior, de modo que los consumidores y los productores usan cuentas diferentes, y las cuentas de los consumidores solo pueden consumir datos y las cuentas de los productores solo pueden producir datos.
Client.username y Client.password completan la contraseña de la cuenta registrada en Zookeeper, que se utiliza para la comunicación entre el broker y zookeeper (si zookeeper no está configurado con SASL, se puede ignorar. Si zookeeper.sasl.client es falso, puede también debe ignorarse. Simplemente inclúyalo. El registro es el siguiente).
[2021-06-29 17:14:30,204] ADVERTENCIA Error en la configuración de SASL: javax.security.auth.login.LoginException: No se encontró ninguna sección de configuración de JAAS denominada 'Client' en el archivo de configuración de JAAS especificado: '/Users/wjun/env/kafka/config/kafka_server_jaas.conf'. Continuará la conexión con el servidor de Zookeeper sin autenticación SASL, si el servidor de Zookeeper lo permite. (org.apache.zookeeper.ClientCnxn)
2.2 Modificar el archivo server.properties
corredor.id=0
oyentes=SASL_PLAINTEXT://:9092
anunciado.listeners=SASL_PLAINTEXT://192.168.157.198:9092
num.red.hilos=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.recepción.buffer.bytes=102400
socket.solicitud.máximo.bytes=104857600
registro.dirs=/asop/kafka/logs
num.particiones=1
num.recovery.threads.per.data.dir=1
offsets.tema.replicacion.factor=1
transacción.estado.registro.replicación.factor=1
transacción.estado.log.min.isr=1
log.retención.horas=168
log.segmento.bytes=1073741824
intervalo de comprobación de retención de registros ms=300000
guardián del zoológico.connect=127.0.0.1:2181
zookeeper.tiempo de espera de conexión.ms=6000
retraso.ms.de.reequilibrio.inicial.del.grupo=0
#Protocolo de autenticación utilizado
protocolo de seguridad entre intermediarios=SASL_PLAINTEXT
#mecanismoSASL
sasl.enabled.mechanisms=SIMPLE
sasl.mechanism.inter.broker.protocol=SIMPLE
#Clase para completar la autenticación
Autorizador.clase.nombre=kafka.security.auth.SimpleAclAuthorizer
#Si no se encuentra ninguna configuración de ACL (lista de control de acceso), se permite cualquier operación.
permitir.a.todos.si.no.se.encuentra.acl=falso
#Debe habilitar la configuración de superadministrador y configurar al usuario visitante como superadministrador.
super.users=Usuario:visitante
Donde es necesario cambiar localhost a una dirección IP
super.users configura el superusuario, que no se ve afectado por configuraciones de ACL posteriores.
2.3 Modificar el script de inicio
Modifique el archivo kafka-server-start.sh para cargarlo en el archivo kafka_server_jaas.conf/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh
antes de arreglar:
si [ “x$KAFKA_HEAP_OPTS” = “x” ]; entonces
exportar KAFKA_HEAP_OPTS=“-Xmx1G -Xms1G”
en en finn
Después de la modificación:
(Agregue primero esta línea a la primera línea. Si ya la tiene, no necesita agregarla). 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” ]; entonces
exportar KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
en en finn
Establecer reglas de ACL para el cuidador del zoológico
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #Ingrese al modo de línea de comando de zk
addauth digest admin:admin@12 #Cambiar usuario de inicio de sesión (el superadministrador está en el archivo de configuración de zk/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf)
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(Establezca la IP y la contraseña de la cuenta de usuario en la que se puede iniciar sesión. admin es el administrador definido en el archivo de configuración de zk anterior y el usuario de Kafka es /asop El usuario zk de conexión kafka definido en el archivo /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf (en Cliente))
addauth digest kafka:kafka@123 #Cambie al usuario kafka y configure acl nuevamente
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa
Nota: Si desea agregar una IP a la lista blanca o el usuario debe agregarla en la base original; de lo contrario, se sobrescribirá.
setAcl / ip:127.0.0.1:cdrwa,autenticación:kafka:kafka@123:cdrwa,autenticación:admin:admin@12:cdrwa,ip:1.1.1.1
Necesita restaurar permisos, ejecutar sin configurar acl
setAcl / mundo:cualquiera:cdrwa
Simplemente reinicie el servicio Kafka.
Cerrar el servicio 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
Iniciar servicio 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
En este punto, se completa la configuración de autenticación SSL de Kafka y Zookeeper. Para obtener más habilidades de operación y mantenimiento, preste atención a la comunidad de Lewei. Para más preguntas sobre operación y mantenimiento, deje un mensaje.