Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой статье показано, как настроить шифрование ПРОТОКОЛА 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.3ssl.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