BI Consult Desktop Logo BI Consult Mobile Logo
  • Russian BI Исследование российских bi
  • Перейти на Fine BI
  • Контакты
  • +7 812 334-08-01
    +7 499 608-13-06
  • Отправить сообщение
  • Главная
  • Продукты Эксперт-BI
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Сельское хозяйство
    • Энергетика
    • FMCG
    • Девелоперы
    • Маркетплейсы
    • Пищевая промышленность
    • Фармацевтика
    • Построение Data Platform
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и FP&A
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • IBP
    • ИТ (CIO)
    • Закупки
  • Платформы
    • Системы бизнес-анализа (BI)
    • Интегрированное бизнес-планирование (IBP)
    • Хранилища данных (DWH / Lakehouse)
    • Каталоги данных (Data Catalog)
    • Системы ETL и ELT
    • AI / Исскуственный интеллект
    • Шина данных (ESB)
    • Система управления мастер-данными (MDM)
    • Семантический слой
  • Услуги
    • Переход на отечественные BI и DWH системы
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений и DWH
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Курсы
    • Учебный курс Информационная грамотность (Data Literacy)
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Greenplum
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt (Data Build Tool)
  • Компания
    • Руководство
    • Новости
    • Клиенты
    • Карьера
    • Скачать
    • Контакты

BI

  • FineBI
  • FineReport
  • FineDataLink
  • FineChatBI (FineAI)
  • Коннекторы данных из 1С в BI
  • Airflow / Nifi
  • Visiology
  • PIX BI
  • Modus BI
  • Yandex.DataLens
  • Open-source BI: Superset/Metabase
  • Luxms BI
  • AW BI + Alpha BI
  • FlyBI + Форсайт. Аналитическая Платформа
  • Loginom
  • Триафлай
  • AI / Исскуственный интеллект
  • Optimacros
  • Навигатор BI
  • Семантический слой

СУБД

  • Arenadata
  • ClickHouse
  • Greenplum
  • Postgres Professional
  • TData

Другое

  • Построение Data Platform
    • Аналитическое хранилище данных
    • Data Lake и Data Engineering
    • Подробнее про Data Lake
    • Внедрение Lakehouse
      • Apache Doris
      • StarRocks
      • Trino
    • Миграция витрин из пропиетарных DWH на новый стек
    • Учебный курс "Современная архитектура хранилища данных"
Главная » Курсы по системам бизнес-анализа и методологии » Учебный курс Современная архитектура хранилища данных » Настройка SSL и SASL аутентификации Kafka

Настройка SSL и SASL аутентификации Kafka

Kafka широко используется множеством компаний в целях оргнизации потоковой передачи данных, их интеграции и так далее.

Установка Kafka довольно проста - следуя укаааниям, описанным в официальной документации, Вы сможете создать свой первый топик менее чем за 30 минут.

Однако если Вам нужно использовать Kafka безопасным способом, Вам понадобится больше 30 минут, особенно если у Вас нет опыта работы с данным продуктом. Моя цель в этой статье - помочь людям вроде меня, у которых нет большого опыта работы с Kafka и которым нужно настроить SSL или SASL для соединения Kafka с другими приложениями.

Приступим.

 

Keystore, Truststore, CA …

KeyStore - адаптер для аутентификации клиентов, а TrustStore – адаптер для аутентификации сервера при SSL-аутентификации. [1]

Хранилище ключей состоит из базы данных, содержащей закрытый ключ и связанный с ним сертификат или связанную цепочку сертификатов. Цепочка сертификатов состоит из сертификата клиента и одного или нескольких сертификатов центра сертификации (ЦС). [1]

TrustStore содержит только те сертификаты, которым доверяет клиент («доверительное» хранилище). Эти сертификаты являются корневыми сертификатами СА, то есть самоподписными сертификатами. [1]

 

 

Настройка SSL и SASL

После некоторых исследований и часов, потраченных на поиск неисправностей,  я наконец-таки смог настроить Kafka с использованием SSL и SASL.

Большинство команд нужно выполнять с помощью Keytool. Чтобы найти Keytool, выполните эту команду:

sudo find / -name jre
You should find something like this path: 
cd /usr/java/jdk1.8.0_271-amd64/jre/bin/
 

Создадим хранилище ключей сервера. В параметре SAN=DNS используем FQDN. В данном случае я использую вычислительный экземпляр на Oracle Cloud под названием developerinstance. Замените его на имя Вашего хоста. 

./keytool -keystore /home/opc/kafka/server.keystore.jks -alias localhost -validity 365 -genkey -keyalg RSA -ext SAN=DNS:developerinstance.subnet.vcn.oraclevcn.com#It will ask you to introduce the following parameters, very important to put the same hostname in first and last nameEnter keystore password:
 Re-enter new password: What is your first and last name?   [Unknown]:  developerinstance.subnet.vcn.oraclevcn.com What is the name of your organizational unit?   [Unknown]:  Example What is the name of your organization?   [Unknown]:  Example What is the name of your City or Locality?   [Unknown]:  Example What is the name of your State or Province?   [Unknown]:  Example What is the two-letter country code for this unit?   [Unknown]:  PT Is CN=developerinstance.subnet.vcn.oraclevcn.com, OU=Example, O=Example, L=Example, ST=Example, C=PT correct?   [no]:  yesEnter key password for <localhost>         (RETURN if same as keystore password): Re-enter new password:Warning: The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /home/opc/kafka/server.keystore.jks -destkeystore /home/opc/kafka/server.keystore.jks -deststoretype pkcs12".#Step 2./keytool -keystore /home/opc/kafka/kafka.server.keystore.jks -alias localhost -keyalg RSA -genkey#again, it will ask you to fill in the different parameters, very important to put the same hostname
Enter keystore password:  Re-enter new password: What is your first and last name?   [Unknown]:  developerinstance.subnet.vcn.oraclevcn.com What is the name of your organizational unit?   [Unknown]:  Example What is the name of your organization?   [Unknown]:  Example What is the name of your City or Locality?   [Unknown]:  Example What is the name of your State or Province?   [Unknown]:  Example What is the two-letter country code for this unit?   [Unknown]:  PT Is CN=developerinstance.subnet.vcn.oraclevcn.com, OU=Example, O=Example, L=Example, ST=Example, C=PT correct?   [no]:  yesEnter key password for <localhost>         (RETURN if same as keystore password): Re-enter new password:Warning: The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore /home/opc/kafka/kafka.server.keystore.jks -destkeystore /home/opc/kafka/kafka.server.keystore.jks -deststoretype pkcs12".#Step 3openssl req -new -x509 -keyout ca-key -out ca-cert -days 365#Introduce pass phrase and the same parameters as before.Generating a RSA private key
 ................+++++ ......................................+++++ writing new private key to 'ca-key' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:PT State or Province Name (full name) []:Example Locality Name (eg, city) [Default City]:Example Organization Name (eg, company) [Default Company Ltd]:Example Organizational Unit Name (eg, section) []:Example Common Name (eg, your name or your server's hostname) []:developerinstance.subnet.vcn.oraclevcn.com Email Address []:eloi.lopes@example.com#Step 4./keytool -keystore /home/opc/kafka/kafka.client.truststore.jks -alias CARoot -importcert -file /home/opc/kafka/ca-cert#put the password and say yes#Step 5
./keytool -keystore /home/opc/kafka/kafka.server.truststore.jks -alias CARoot -importcert -file /home/opc/kafka/ca-cert#put the password and say yes#Step 5./keytool -keystore /home/opc/kafka/kafka.server.keystore.jks -alias localhost -certreq -file /home/opc/kafka/cert-file#Step 6openssl x509 -req -CA ca-cert -CAkey ca-key -in cert-file -out cert-signed -days 365 -CAcreateserial -passin pass:<YOUR_PASS PHRASE>#Step 7./keytool -keystore /home/opc/kafka/kafka.server.keystore.jks -alias CARoot -importcert -file /home/opc/kafka/ca-cert
#put the password and say yes#Step 8./keytool -keystore /home/opc/kafka/kafka.server.keystore.jks -alias localhost -importcert -file /home/opc/kafka/cert-signed
#put the password and say yes

 

Создайте файл с именем zookeeper_jaas.conf . Создайте этот файл в <Kafka home>/config и поместите в него следующий код:

Server {
       org.apache.zookeeper.server.auth.DigestLoginModule required        user_super="admin-secret"
       user_kafka="kafka-secret";
};

 

Запустите Zookepeeper с помощью следующих команд:

expo​rt KAFKA_OPTS="-Djava.security.auth.login.config=/home/opc/kafka/kafka_2.13-3.0.0/config/zookeeper_jaas.conf"bin/zookeeper-server-start.sh config/zookeeper.properties

 

Давайте настроим брокеры Kafka. Отредактируйте файл <kafka home>/config/server.properties и добавьте следующие строки:

listeners=PLAINTEXT://:9092,SSL://:9093,SASL_SSL://:9094security.inter.broker.protocol=SSL
ssl.client.auth=required ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1 ssl.truststore.location=/home/opc/kafka/kafka.server.truststore.jks ssl.truststore.password=<password>ssl.keystore.location=/home/opc/kafka/kafka.server.keystore.jks ssl.keystore.password=<password> ssl.key.password=<password> ssl.endpoint.identification.algorithm= sasl.enabled.mechanisms=PLAIN allow.everyone.if.no.acl.found=trueauthorizer.class.name=kafka.security.authorizer.AclAuthorizer
 

Теперь создайте новый файл с именем kafka_server_jaas.conf. Создайте этот файл в <Kafka home>/config и добавьте в него следующий код: 

KafkaServer {
   org.apache.kafka.common.security.plain.PlainLoginModule required    username="kafkabroker"    password="kafkabroker-secret"    user_kafkabroker="kafkabroker-secret"    user_kafka-broker-metric-reporter="kafkabroker-metric-reporter-secret"    user_client="client-secret"; };Client {    org.apache.zookeeper.server.auth.DigestLoginModule required    username="kafka"    password="kafka-secret"; };

 

Чтобы получить доступ к ресурсу, давайте добавим суперпользователя в server.properties. Суперпользователь - это имя, которое Вы указали при создании сертификата. В моем случае это:

​super.users=User:CN=developerinstance.subnet.vcn.oraclevcn.com,OU=Example,O=Example,L=Example,ST=Example,C=PT

 

Теперь запустите сервер kafka

export K​AFKA_OPTS=-Djava.security.auth.login.config=/home/opc/kafka/kafka_2.13-3.0.0/config/kafka_server_jaas.confbin/kafka-server-start.sh config/server.properties

 

Вы можете проверить, правильно ли настроен SSL, выполнив эту команду:

openssl s​_client -debug -connect developerinstance.subnet.vcn.oraclevcn.com:9093 -tls1

 

Настройка клиентов

Настроим сертификат клиента для SSL:

./keytool -​keystore /home/opc/kafka/client-certificate/client.keystore.jks -alias localhost -validity 365 -genkey -keyalg RSA -ext SAN=DNS:developerinstance.subnet.vcn.oraclevcn.com#again, fill in with the same parameters./keytool -keystore /home/opc/kafka/client-certificate/client.keystore.jks -alias localhost -certreq -file /home/opc/kafka/client-certificate/client.unsigned.certopenssl x509 -req -CA /home/opc/kafka/ca-cert -CAkey /home/opc/kafka/ca-key -in /home/opc/kafka/client-certificate/client.unsigned.cert -out /home/opc/kafka/client-certificate/client.signed.cert -days 365 -CAcreateserial#Attention is the pass phrase./keytool -keystore /home/opc/kafka/client-certificate/client.keystore.jks -alias CARoot -import -file /home/opc/kafka/ca-cert./keytool -keystore /home/opc/kafka/client-certificate/client.keystore.jks -alias localhost -import -file /home/opc/kafka/client-certificate/client.signed.cert

 

Теперь создайте файл с именем client_ssl.properties в папке «<kafka_home>/config» и добавьте в него следующие строки:

security.protocol=SSL
ssl.truststore.location=/home/opc/kafka/kafka.client.truststore.jks ssl.truststore.password=<password> ssl.keystore.location=/home/opc/kafka/client-certificate/client.keystore.jks ssl.keystore.password=<password> ssl.key.password=<password> ssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1 ssl.client.auth=required

 

Давайте проверим нашу конфигурацию для SSL, создав топик:

bin​/kafka-topics.sh --create --topic osa-topic-ssl --partitions 1 --replication-factor 1 --bootstrap-server developerinstance.subnet.vcn.oraclevcn.com:9093 --command-config /home/opc/kafka/kafka_2.13-3.0.0/config/client_ssl.properties#In a new tab run the producer:bin/kafka-console-producer.sh --broker-list developerinstance.subnet.vcn.oraclevcn.com:9093 --topic osa-topic-ssl --producer.config /home/opc/kafka/kafka_2.13-3.0.0/config/client_ssl.properties#Open a new tab and run the consumer:bin/kafka-console-consumer.sh --bootstrap-server developerinstance.subnet.vcn.oraclevcn.com:9093 --topic osa-topic-ssl --consumer.config /home/opc/kafka/kafka_2.13-3.0.0/config/client_ssl.propertiesNow, try to write something on producer tab and should see instantaneously on consumer tab.

 

Для SASL нужно создать файл (client_sasl.properties) с такой конфигурацией:

security.protocol=SASL_SSL
ssl.truststore.location=/home/opc/kafka/kafka.client.truststore.jks ssl.truststore.password=<password> sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \     username="client" \     password="client-secret";

 

Создаем топик Kafka:

bin/ka​fka-topics.sh --create --topic osa-topic-sasl --partitions 1 --replication-factor 1 --bootstrap-server developerinstance.subnet.vcn.oraclevcn.com:9094 --command-config /home/opc/kafka/kafka_2.13-3.0.0/config/client_sasl.propertiesbin/kafka-console-producer.sh --broker-list developerinstance.subnet.vcn.oraclevcn.com:9094 --topic osa-topic-sasl --producer.config /home/opc/kafka/kafka_2.13-3.0.0/config/client_sasl.propertiesbin/kafka-console-consumer.sh --bootstrap-server developerinstance.subnet.vcn.oraclevcn.com:9094 --topic osa-topic-sasl --consumer.config /home/opc/kafka/kafka_2.13-3.0.0/config/client_sasl.properties

 

Теперь создадим пользователя:

bin​/kafka-configs.sh --bootstrap-server developerinstance.subnet.vcn.oraclevcn.com:9094 --alter --add-config 'SCRAM-SHA-512=[password='kafkabroker-secret']' --entity-type users --entity-name kafkabroker --command-config /home/opc/kafka/kafka_2.13-3.0.0/config/client_sasl.properties

 

Надеюсь, это поможет новичкам в освоении SSL/SASL Kafka. 

 

Узнать стоимость решенияЗапросить видео презентацию

← Предыдущая статья
Наиболее распространенные ошибки при работе с Kafka и способы их устранения
Следующая статья →
Повышаем безопасность кластера Apache Kafka с помощью SSL, SASL и ACL

Решения

Анализировать ФинансыУвеличивайте ПродажиОптимальный Склад и ЛогистикаМаркетинговые Метрики

Клиенты
  • «Восток-Запад» – крупнейший поставщик продуктов в рестораны, кафе, гостиницы, кейтеринговые компании, столовые, комбинаты питания и кондитерские производства. 300+ городов регулярной доставки по всей территории России и странам СНГ; 3500+ товаров профессиональных брендов.

  • ООО "Уральская транспортная компания" — это транспортно-логистическая компания, специализирующаяся на железнодорожных перевозках грузов, создана в 2009 году.

  • ПАО АНК «Башнефть» — российская вертикально-интегрированная нефтяная компания, с 2016 года входит в ПАО НК «Роснефть». Главный офис расположен в городе Уфе (Башкортостан). Добыча углеводородов – более 21 млн тонн нефти в год. Объем переработки – более 18 млн тонн нефти в год. Число сотрудников – более 33 тыс. человек.

  • "Уральский банк реконструкции и развития" входит в топ-25 крупнейших банков России и список значимых кредитных организаций на рынке платежных услуг по версии ЦБ РФ.

  • Решения
    • Дистрибуция
    • Розничная торговля
    • Производство
    • Операторы связи
    • Страхование
    • Банки
    • Лизинг
    • Логистика
    • Нефтегазовый сектор
    • Медицина
    • Сеть ресторанов
    • E-Commerce
    • Энергетика
    • Фармацевтика
  • Услуги
    • Переход на отечественные BI и DWH
    • Консалтинг
    • Пилотный проект
    • Обучение и сертификация
    • Бесплатное обучение
    • Техническая поддержка
    • Технические задания
    • Сбор требований для проекта внедрения BI-системы
    • CI/CD для DWH
    • Аудит BI приложений
    • Выделенная команда
    • Настойка и поддержка баз данных
    • Разработка BI Стратегии
    • Styleguide для BI-системы
    • Как выбрать BI-систему
  • Платформы
    • FineBI
    • FineReport
    • FineDataLink
    • Коннекторы данных из 1С в BI
    • Airflow + NiFi
    • Visiology
    • Luxms BI
    • Modus BI
    • PIX BI
    • Arenadata
    • ClickHouse
    • Greenplum
    • Postgres Professional
    • Open-source BI: Superset/Metabase
    • Loginom
    • Yandex.DataLens
    • AI / Исскуственный интеллект
    • Optimacros
    • Шины данных
  • Курсы
    • Учебный курс Информационная грамотность
    • Учебный курс для бизнес-аналитиков
    • Учебный курс для системных аналитиков
    • Учебный курс по Data Governance
    • Учебный курс Как стать CDO
    • Учебный курс Современная архитектура хранилища данных
    • Учебный курс по Fine BI
    • Учебный курс по FineReport
    • Учебный курс по DWH
    • Учебный курс по Data Science (ML, AI)
    • Учебный курс по PostgreSQL
    • Учебный курс по Apache Airflow и NiFi
    • Учебный курс по Open-source BI
    • Учебный курс по ClickHouse
    • Учебный курс по DataLens
    • Учебный курс по Loginom
    • Учебный курс по Modus BI и ETL
    • Учебный курс по Visiology
    • Учебный курс по dbt
  • Функциональные решения
    • Создание Data Lake
    • Цифровая трансформация
    • Управление по KPI
    • Финансы
    • Продажи
    • Склад
    • HR
    • Маркетинг
    • Внутренний аудит
    • Категорийный менеджмент
    • S&OP и прогнозная аналитика
    • Геоаналитика
    • Цепочки поставок (SCM)
    • AutoML
    • Process Mining
    • Сквозная аналитика
  • Компания
    • О нас
    • Руководство
    • Новости
    • Клиенты
    • Скачать
    • Контакты
    • Политика конфиденциальности
RutubeVkontakteLinkedInYouTube
ООО "Би Ай Консалт",
ИНН: 7811437757,
ОГРН: 1097847154184
199178, Россия,
Санкт-Петербург,
6-ая линия В.О., Д. 63, 4 этаж
Тел: +7 (812) 334-08-01
Тел: +7 (499) 608-13-06
E-mail: info@biconsult.ru

 

 

 

 

 

×

Пользуясь сайтом, вы соглашаетесь с использованием cookies и политикой конфиденциальности.