Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как настроить шифрование ПРОТОКОЛА TLS, ранее известное как шифрование SSL между клиентами Apache Kafka и брокерами Apache Kafka. В нем также показано, как настроить проверку подлинности клиентов (иногда называется двусторонним TLS).
Это важно
Существует два клиента, которые можно использовать для приложений Kafka: клиент Java и консольный клиент. Только клиент ProducerConsumer.java
Java может использовать TLS для производства и использования. Клиент console-producer.sh
производителя консоли не работает с TLS.
Настройка брокера Apache Kafka
Настройка брокера TLS Kafka использует четыре виртуальных машины кластера HDInsight следующим образом:
- headnode 0 — центр сертификации (ЦС)
- рабочий узел 0, 1 и 2 — брокеры
Примечание.
В этом руководстве используются самозаверяемые сертификаты, но наиболее безопасным решением является использование сертификатов, выданных доверенными центрами сертификации.
Ниже приведена сводка процесса настройки брокера.
Следующие шаги повторяются на каждом из трех рабочих узлов:
- Создайте сертификат.
- Создайте запрос подписывания сертификата.
- Отправьте запрос на подпись сертификата в центр сертификации (ЦС).
- Войдите в ЦС и подпишите запрос.
- С помощью SCP перенесите подписанный сертификат обратно на рабочий узел.
- SCP общедоступный сертификат ЦС на рабочий узел.
После получения всех сертификатов поместите сертификаты в хранилище сертификатов.
Перейдите в Ambari и измените конфигурации.
Чтобы завершить настройку брокера, выполните следующие подробные инструкции.
Это важно
В следующих фрагментах кода wnX — это сокращение для одного из трех рабочих узлов и должно быть заменено на
wn0
,wn1
илиwn2
, как уместно.WorkerNode0_Name
иHeadNode0_Name
должны быть заменены именами соответствующих компьютеров.Выполните начальную настройку на головном узле 0, который для HDInsight заполняет роль центра сертификации (ЦС).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
Выполните одну и ту же начальную настройку для каждого брокера (рабочие узлы 0, 1 и 2).
# Create a new directory 'ssl' and change into it mkdir ssl cd ssl
На каждом рабочем узле выполните следующие действия с помощью фрагмента кода.
- Создайте хранилище ключей и заполните его новым закрытым сертификатом.
- Создайте запрос на подпись сертификата.
- SCP запрос на подпись сертификата в ЦС (headnode0)
keytool -genkey -keystore kafka.server.keystore.jks -keyalg RSA -validity 365 -storepass "MyServerPassword123" -keypass "MyServerPassword123" -dname "CN=FQDN_WORKER_NODE" -ext SAN=DNS:FQDN_WORKER_NODE -storetype pkcs12 keytool -keystore kafka.server.keystore.jks -certreq -file cert-file -storepass "MyServerPassword123" -keypass "MyServerPassword123" scp cert-file sshuser@HeadNode0_Name:~/ssl/wnX-cert-sign-request
Примечание.
FQDN_WORKER_NODE — полное доменное имя компьютера рабочего узла. Эти сведения можно получить из файла /etc/hosts в головном узле
Например
wn0-espkaf.securehadooprc.onmicrosoft.com wn0-kafka2.zbxwnwsmpcsuvbjqbmespcm1zg.bx.internal.cloudapp.net
На компьютере ЦС выполните следующую команду, чтобы создать файлы ca-cert и ca-key:
openssl req -new -newkey rsa:4096 -days 365 -x509 -subj "/CN=Kafka-Security-CA" -keyout ca-key -out ca-cert -nodes
Перейдите на компьютер ЦС и подпишите все полученные запросы на подписывание сертификатов:
openssl x509 -req -CA ca-cert -CAkey ca-key -in wn0-cert-sign-request -out wn0-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123" openssl x509 -req -CA ca-cert -CAkey ca-key -in wn1-cert-sign-request -out wn1-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123" openssl x509 -req -CA ca-cert -CAkey ca-key -in wn2-cert-sign-request -out wn2-cert-signed -days 365 -CAcreateserial -passin pass:"MyServerPassword123"
Отправьте подписанные сертификаты из УЦ (headnode0) обратно на рабочие узлы.
scp wn0-cert-signed sshuser@WorkerNode0_Name:~/ssl/cert-signed scp wn1-cert-signed sshuser@WorkerNode1_Name:~/ssl/cert-signed scp wn2-cert-signed sshuser@WorkerNode2_Name:~/ssl/cert-signed
Отправьте общедоступный сертификат ЦС каждому рабочему узлу.
scp ca-cert sshuser@WorkerNode0_Name:~/ssl/ca-cert scp ca-cert sshuser@WorkerNode1_Name:~/ssl/ca-cert scp ca-cert sshuser@WorkerNode2_Name:~/ssl/ca-cert
На каждом рабочем узле добавьте публичный сертификат ЦС в хранилище доверия и хранилище ключей. Затем добавьте собственный подписанный сертификат рабочего узла в хранилище ключей
keytool -keystore kafka.server.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt keytool -keystore kafka.server.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt keytool -keystore kafka.server.keystore.jks -import -file cert-signed -storepass "MyServerPassword123" -keypass "MyServerPassword123" -noprompt
Обновите конфигурацию Kafka для использования TLS и перезагрузите брокеров.
Теперь вы настроили каждый брокер Kafka с хранилищем ключей и хранилищем доверия и импортировали правильные сертификаты. Затем измените связанные свойства конфигурации Kafka с помощью Ambari, а затем перезапустите брокеры Kafka.
Чтобы завершить изменение конфигурации, выполните следующие действия.
Войдите на портал Azure и выберите кластер Azure HDInsight Apache Kafka.
Перейдите к пользовательскому интерфейсу Ambari, щелкнув на главную страницу Ambari в разделе панели мониторинга кластера.
В разделе "Брокер Kafka" задайте для свойства прослушивателей значение
PLAINTEXT://localhost:9092,SSL://localhost:9093
В разделе Advanced kafka-broker задайте для свойства security.inter.broker.protocol значение
SSL
В разделе Custom kafka-broker задайте для свойства ssl.client.auth значение
required
.Примечание.
Примечание. Этот шаг требуется только в том случае, если вы настраиваете проверку подлинности и шифрование.
Ниже показан снимок экрана, на котором показан пользовательский интерфейс конфигурации Ambari с этими изменениями.
Примечание.
- ssl.keystore.location и ssl.truststore.location — это полный путь к вашему хранилищу ключей и хранилищу доверенных сертификатов в центре сертификации (hn0)
- ssl.keystore.password и ssl.truststore.password — это пароли, установленные для хранилища ключей и хранилища доверия. В этом случае в качестве примера
MyServerPassword123
- ssl.key.password — это набор ключей для хранилища ключей и хранилища доверия. В этом случае в качестве примера
MyServerPassword123
Использование TLS 1.3 в Kafka
Добавьте следующие настройки к конфигурациям Kafka в Ambari
ssl.enabled.protocols=TLSv1.3
ssl.protocol=TLSv1.3
Это важно
- TLS 1.3 работает только с версией HDI 5.1 kafka.
- При использовании TLS 1.3 на стороне сервера также следует использовать конфигурации TLS 1.3 в клиенте.
Для HDI версии 4.0 или 5.0
- Если вы настраиваете проверку подлинности и шифрование, снимок экрана выглядит следующим образом.
Изменение свойства шаблона kafka-env в Ambari 4.
- Если вы настраиваете только шифрование, снимок экрана выглядит следующим образом.
Перезапустите все брокеры Kafka.
Настройка клиента (без проверки подлинности)
Если вам не нужна проверка подлинности, сводка действий по настройке только шифрования TLS:
- Войдите в CA (активный управляющий узел).
- Скопируйте сертификат Центра сертификации на клиентский компьютер с машины Центра сертификации (wn0).
- Войдите на клиентский компьютер (hn1) и перейдите в папку
~/ssl
. - Импортируйте сертификат ЦС в хранилище сертификатов доверия.
- Импортируйте сертификат ЦС в хранилище ключей.
Эти действия подробно описаны в следующих фрагментах кода.
Войдите в узел ЦС.
ssh sshuser@HeadNode0_Name cd ssl
Копирование ca-cert на клиентский компьютер
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
Войдите на клиентский компьютер (резервный головной узел).
ssh sshuser@HeadNode1_Name cd ssl
Импортируйте сертификат ЦС в хранилище сертификатов.
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Импортируйте сертификат ЦС в хранилище ключей.
keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Создайте файл
client-ssl-auth.properties
на клиентском компьютере (hn1). В нем должны присутствовать следующие строки.security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123
- Чтобы использовать TLS 1.3, добавьте в файл следующие конфигурации
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Чтобы использовать TLS 1.3, добавьте в файл следующие конфигурации
Запустите клиент администратора с параметрами производителя и потребителя, чтобы убедиться, что оба производителя и потребители работают над портом 9093. Обратитесь к разделу Verification, чтобы узнать шаги, необходимые для проверки настройки с помощью консольного продюсера/консюмера.
Настройка клиента (с проверкой подлинности)
Примечание.
Следующие действия необходимы, только если вы настраиваете шифрование TLS и проверку подлинности. Если вы настраиваете только шифрование, просмотрите настройку клиента без проверки подлинности.
Следующие четыре шага суммируют задачи, необходимые для завершения настройки клиента:
- Войдите на клиентский компьютер (резервный головной узел).
- Создайте хранилище ключей Java и получите подписанный сертификат для брокера. Затем скопируйте сертификат на виртуальную машину, на которой выполняется ЦС.
- Переключитесь на машину центра сертификации (активный головной узел), чтобы подписать клиентский сертификат.
- Перейдите на клиентский компьютер (резервный головной узел) и перейдите в папку
~/ssl
. Скопируйте подписанный сертификат на клиентский компьютер.
Даны сведения о каждом шаге.
Войдите на клиентский компьютер (резервный головной узел).
ssh sshuser@HeadNode1_Name
Удалите все существующие ssl-каталоги.
rm -R ~/ssl mkdir ssl cd ssl
Создайте хранилище ключей Java и создайте запрос на подпись сертификата.
keytool -genkey -keystore kafka.client.keystore.jks -validity 365 -storepass "MyClientPassword123" -keypass "MyClientPassword123" -dname "CN=HEADNODE1_FQDN" -storetype pkcs12 keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -storepass "MyClientPassword123" -keypass "MyClientPassword123"
Скопируйте запрос на подпись сертификата в ЦС
scp client-cert-sign-request sshuser@HeadNode0_Name:~/ssl/client-cert-sign-request
Переключитесь на машину CA (активный головной узел) и подпишите клиентский сертификат.
ssh sshuser@HeadNode0_Name cd ssl openssl x509 -req -CA ca-cert -CAkey ca-key -in ~/ssl/client-cert-sign-request -out ~/ssl/client-cert-signed -days 365 -CAcreateserial -passin pass:MyClientPassword123
Скопируйте подписанный сертификат клиента из ЦС (активного головного узла) на клиентский компьютер.
scp client-cert-signed sshuser@HeadNode1_Name:~/ssl/client-signed-cert
Копирование ca-cert на клиентский компьютер
scp ca-cert sshuser@HeadNode1_Name:~/ssl/ca-cert
- Войдите на клиентский компьютер (резервный головной узел) и перейдите в каталог ssl.
ssh sshuser@HeadNode1_Name cd ssl
Создайте клиентское хранилище с подписанным сертификатом, импортируйте сертификат ЦС в хранилище ключей и доверенное хранилище на клиентском компьютере (hn1):
keytool -keystore kafka.client.truststore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt keytool -keystore kafka.client.keystore.jks -alias CARoot -import -file ca-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt keytool -keystore kafka.client.keystore.jks -import -file client-signed-cert -storepass "MyClientPassword123" -keypass "MyClientPassword123" -noprompt
Создайте файл
client-ssl-auth.properties
на клиентском компьютере (hn1). В нем должны присутствовать следующие строки.security.protocol=SSL ssl.truststore.location=/home/sshuser/ssl/kafka.client.truststore.jks ssl.truststore.password=MyClientPassword123 ssl.keystore.location=/home/sshuser/ssl/kafka.client.keystore.jks ssl.keystore.password=MyClientPassword123 ssl.key.password=MyClientPassword123
- Чтобы использовать TLS 1.3, добавьте в файл следующие конфигурации
client-ssl-auth.properties
ssl.enabled.protocols=TLSv1.3 ssl.protocol=TLSv1.3
- Чтобы использовать TLS 1.3, добавьте в файл следующие конфигурации
Проверка
Выполните эти действия на клиентском компьютере.
Примечание.
Если установлены HDInsight 4.0 и Kafka 2.1, можно использовать консольный продюсер/консумент для проверки настройки. Если нет, запустите производитель Kafka через порт 9092 и отправьте сообщения в раздел, а затем используйте потребитель Kafka через порт 9093, который использует TLS.
Kafka 2.1 или более поздней версии
Создайте раздел, если он еще не существует.
/usr/hdp/current/kafka-broker/bin/kafka-topics.sh --zookeeper <ZOOKEEPER_NODE>:2181 --create --topic topic1 --partitions 2 --replication-factor 2
Запустите консольный продюсер и укажите путь к
client-ssl-auth.properties
как к файлу конфигурации для продюсера./usr/hdp/current/kafka-broker/bin/kafka-console-producer.sh --broker-list <FQDN_WORKER_NODE>:9093 --topic topic1 --producer.config ~/ssl/client-ssl-auth.properties
Откройте другое подключение SSH к клиентскому компьютеру, запустите консольный потребитель и укажите путь к файлу конфигурации
client-ssl-auth.properties
для потребителя./usr/hdp/current/kafka-broker/bin/kafka-console-consumer.sh --bootstrap-server <FQDN_WORKER_NODE>:9093 --topic topic1 --consumer.config ~/ssl/client-ssl-auth.properties --from-beginning