Обмен технологиями

Учебное пособие по сертификации SSL для Kafka и Zookeeper

2024-07-12

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

Автор Сообщество Льюэй (forum.lwops.cn) Сюй Юань
При построении современных распределенных систем обеспечение безопасности передачи данных имеет решающее значение. Apache Kafka и Zookeeper, популярные распределенные очереди сообщений и службы координации, предоставляют механизм аутентификации SSL (Secure Sockets Layer) для повышения безопасности во время передачи данных.
В этой статье будет подробно описан весь процесс: от создания сертификата SSL до настройки сервера и клиента для обеспечения полной защиты данных во время передачи.

1. Настройте пароль учетной записи Kafka:
1. Сначала вам необходимо изменить файл конфигурации Kafka: vim /asop/kafka/kafka_2.11-2.1.0/config/server.properties.

брокер.id=0
слушатели=SASL_PLAINTEXT://:9092
рекламируемые.listeners=SASL_PLAINTEXT://10.176.31.137:9092
число.сетевых.потоков=3
число.io.потоков=8
сокет.отправить.буфер.байт=102400
буфер.приема.сокета.байт=102400
сокет.запрос.макс.байт=104857600
log.dirs=/asop/kafka/logs
число.разделов=1
число.потоков.восстановления.на.каталог.данных=1
offsets.topic.replication.factor=1
транзакция.состояние.журнал.репликации.фактор=1
транзакция.состояние.журнал.мин.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
интервал.проверки.удержания.журнала.мс=300000
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

#Используемый протокол аутентификации
security.inter.broker.protocol=SASL_PLAINTEXT
#SASLмеханизм
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Класс для завершения аутентификации
authorizer.class.name=kafka.security.auth.SimpleAclАвторизатор
#Если конфигурация ACL (списка управления доступом) не найдена, любая операция разрешена.
разрешить.всем.если.нет.acl.найдено=false
#Вам необходимо включить настройку суперадминистратора и назначить пользователя-посетителя суперадминистратором.
super.users=Пользователь:посетитель

2. Во-вторых, создайте файл проверки входа на сервер. Вы можете назвать файл по своему усмотрению, например vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf. Содержимое файла следующее. следует

KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule требуется
имя пользователя="посетитель"
пароль="qaz@123"
user_visitor="qaz@123";
};

3. Затем измените каталог установки kafka vim /asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh и добавьте переменные в начало файла.

экспорт KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
Вставьте сюда описание изображения
4. Затем создайте файл проверки входа для потребителя и производителя. Вы можете назвать файл по своему усмотрению, например, kafka_client_jaas.conf. Содержимое файла следующее (если это доступ к программе, например, доступ к Springboot). , его не нужно настраивать)
vim /asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf

KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule требуется
имя пользователя="посетитель"
пароль="qaz@123";
};

5. Добавьте следующие конфигурации в Consumer.properties и Producer.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.механизм=ОБЫЧНЫЙ

6. Измените каталоги установки kafka bin/kafka-console-producer.sh и bin/kafka-console-consumer.sh и добавьте переменные в начало файлов.
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

экспорт KAFKA_OPTS=" -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_client_jaas.conf"Вставьте сюда описание изображения
7. Запустите Zookeeper и Kafka соответственно. На этом этапе настройка проверки входа в систему пользователя Kafka на стороне сервера завершена (сначала закройте Kafka, а затем закройте Zookeeper).

Завершить работу службы Кафка
/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

Запустить службу Кафка
#/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

Завершите работу службы Zookeeper-3.4.13.
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh остановить /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Запустите службу Zookeeper-3.4.13.
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh запустить /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

8. Создание и просмотр тем

/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
Вставьте сюда описание изображения
получать сообщения

/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. Настройте пароль учетной записи ssal для zk и kafka:

  1. Настройка Zookeeper SASL
    1.1 Создайте новый файлzoo_jaas.conf.
    Никаких особых требований к имени и пути файлаzoo_jaas.conf обычно не существует. Обычно он размещается в каталоге ${ZOOKEEPER_HOME}/conf vim/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf.

Сервер {
org.apache.kafka.common.security.plain.PlainLoginModule требуется
имя пользователя="администратор"
пароль="admin@12"
user_kafka="kafka@123";
};

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

1.2 Настройте файл /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
zookeeper.sasl.client=true

Для параметра Zookeeper.sasl.client установлено значение true, чтобы включить аутентификацию клиента. В противном случае имя пользователя, указанное в Zoo_jaas.conf, не будет работать. Клиент все равно сможет подключиться без файла jaas, но с ПРЕДУПРЕЖДЕНИЕМ.

1.3 Импорт пакетов зависимостей
Поскольку используется класс проверки разрешений: org.apache.kafka.common.security.plain.PlainLoginModule, необходимы пакеты jar, связанные с kafka. Создайте новую папку zk_sasl_lib следующим образом: Скопируйте следующие пакеты jar из каталога kafka/lib. Zookeeper lib и вновь созданный каталог zk_sasl_lib:

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 Измените файл zkEnv.sh/asop/zk/zookeeper-3.4.13/bin/zkEnv.sh.
Перед изменением: если нет, добавьте его напрямую.

экспорт SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS"

После модификации:

для jar в /asop/zk/zookeeper-3.4.13/zk_sasl_lib/*.jar;
делать
ПУТЬ К КЛАССУ = « банка : банка:дар:ПУТЬ К КЛАССУ”
сделанный

экспорт SERVER_JVMFLAGS=" -Djava.security.auth.login.config=/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf "

Просто перезапустите службу Zookeeper.

Завершите работу службы Zookeeper-3.4.13.
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh остановить /asop/zk/zookeeper-3.4.13/conf/zoo.cfg
Запустите службу Zookeeper-3.4.13.
/asop/zk/zookeeper-3.4.13/bin/zkServer.sh запустить /asop/zk/zookeeper-3.4.13/conf/zoo.cfg

  1. Какфа настроить SASL
    2.1 Создайте новый файл kafka_server_jaas.conf.
    Никаких требований к имени и пути хранения файла kafka_server_jaas.conf обычно размещается в каталоге ${KAFKA_HOME}/config/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf.

KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule требуется
имя пользователя="посетитель"
пароль="qaz@123"
user_visitor="qaz@123";
};
Клиент{
org.apache.kafka.common.security.plain.PlainLoginModule требуется
имя пользователя = «кафка»
пароль="kafka@123";
};

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

KafkaServer.user_xxx, где xxx должно соответствовать имени пользователя, настроенному в KafkaServer.username, а пароль также должен совпадать.
KafkaServer.user_producer и KafkaServer.user_consumer готовятся к последующему ACL, так что потребители и производители используют разные учетные записи, причем учетные записи потребителей могут только потреблять данные, а учетные записи производителей могут только создавать данные.
Client.username и Client.password заполняют пароль учетной записи, зарегистрированный в Zookeeper, который используется для связи между брокером и Zookeeper (если Zookeeper не настроен с использованием SASL, его можно игнорировать. Если Zookeeper.sasl.client имеет значение false, он может также игнорировать. Просто включите его. Журнал выглядит следующим образом.

[2021-06-29 17:14:30,204] WARN Ошибка конфигурации SASL: javax.security.auth.login.LoginException: В указанном файле конфигурации JAAS не найден раздел конфигурации JAAS с именем «Клиент»: «/Users/wjun/env/kafka/config/kafka_server_jaas.conf». Будет продолжено подключение к серверу Zookeeper без аутентификации SASL, если сервер Zookeeper это позволяет. (org.apache.zookeeper.ClientCnxn)

2.2 Измените файл server.properties.
брокер.id=0
слушатели=SASL_PLAINTEXT://:9092
рекламируемые.listeners=SASL_PLAINTEXT://192.168.157.198:9092
число.сетевых.потоков=3
число.io.потоков=8
сокет.отправить.буфер.байт=102400
буфер.приема.сокета.байт=102400
сокет.запрос.макс.байт=104857600
log.dirs=/asop/kafka/logs
число.разделов=1
число.потоков.восстановления.на.каталог.данных=1
offsets.topic.replication.factor=1
транзакция.состояние.журнал.репликации.фактор=1
транзакция.состояние.журнал.мин.isr=1
log.retention.hours=168
log.segment.bytes=1073741824
интервал.проверки.удержания.журнала.мс=300000
zookeeper.connect=127.0.0.1:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

#Используемый протокол аутентификации
security.inter.broker.protocol=SASL_PLAINTEXT
#SASLмеханизм
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
#Класс для завершения аутентификации
authorizer.class.name=kafka.security.auth.SimpleAclАвторизатор
#Если конфигурация ACL (списка управления доступом) не найдена, любая операция разрешена.
разрешить.всем.если.нет.acl.найдено=false
#Вам необходимо включить настройку суперадминистратора и назначить пользователя-посетителя суперадминистратором.
super.users=Пользователь:посетитель

Где localhost необходимо изменить на IP-адрес

super.users настраивает суперпользователя, на которого не влияют последующие настройки ACL.

2.3 Измените сценарий запуска
Измените файл kafka-server-start.sh, чтобы загрузить его в файл kafka_server_jaas.conf/asop/kafka/kafka_2.11-2.1.0/bin/kafka-server-start.sh.

перед исправлением:

если [ "x$KAFKA_HEAP_OPTS" = "x" ]; тогда
экспорт KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
фи

После модификации:
(Сначала добавьте эту строку в первую строку. Если она у вас уже есть, добавлять ее не нужно.) 2.1.0/config/kafka_server_jaas.conf "
если [ "x$KAFKA_HEAP_OPTS" = "x" ]; тогда
экспорт KAFKA_HEAP_OPTS="-Xmx1G -Xms1G -Djava.security.auth.login.config=/asop/kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf"
фи

Установите правила ACL для Zookeeper
/asop/zk/zookeeper-3.4.13/bin/zkCli.sh #Войдите в режим командной строки zk

addauth дайджест admin:admin@12 #Переключение пользователя для входа в систему (суперадминистратор указан в файле конфигурации zk/asop/zk/zookeeper-3.4.13/conf/zoo_jaas.conf)

setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa #(Установите IP-адрес и пароль учетной записи пользователя, с помощью которого можно войти в систему. admin — это администратор, определенный в файле конфигурации zk выше, а пользователь Kafka /asop Пользователь zk соединения kafka, определенный в файле /kafka/kafka_2.11-2.1.0/config/kafka_server_jaas.conf (в разделе «Клиент»)

addauth дайджест kafka:kafka@123 #Переключиться на пользователя kafka и снова установить acl
setAcl / ip:127.0.0.1:cdrwa,auth:kafka:kafka@123:cdrwa

Примечание. Если вы хотите добавить IP-адрес в белый список, или пользователь должен добавить его на исходной основе, в противном случае он будет перезаписан.
setAcl / ip:127.0.0.1:cdrwa,авторизация:kafka:kafka@123:cdrwa,авторизация:admin:admin@12:cdrwa,ip:1.1.1.1

Нужно восстановить разрешения, запускать без установки acl
setAcl / мир:любой:cdrwa

Просто перезапустите службу 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

Запустить службу Кафка
#/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

На этом этапе настройка SSL-аутентификации Kafka и Zookeeper завершена. Для получения дополнительных навыков эксплуатации и технического обслуживания, пожалуйста, обратите внимание на сообщество Lewei. Если у вас есть дополнительные вопросы по эксплуатации и техническому обслуживанию, оставьте сообщение.