Использование MIT Kerberos в Kafka
В данной статье описаны первые шаги в Kafka c установленным Kerberos SASL.
ПРИМЕЧАНИЕ
Включение аутентификации про протоколу Kerberos SASL осуществляется в соответствии со статьей MIT Kerberos.
|
Проверка установленного Kerberos SASL
-
Проверьте настройки, установленные для Kerberos в конфигурациях кластера.
Зайдите в конфигурации кластера, выберите Show advanced, найдите раздел с конфигурациями Kerberos, разверните его.
Установленные настройки конфигурации кластера ADS для Kerberos -
Проверьте конфигурацию безопасности и аутентификации брокеров Kafka.
На каждом хосте с брокером Kafka введите команду:
$ sudo vim /usr/lib/kafka/config/server.properties
Убедитесь, что в файле server.properties для каждого брокера Kafka строки, определяющие протокол безопасности, изменены на
SASL_PLAINTEXT
; строки, определяющие механизм аутентификации - наGSSAPI
.security.inter.broker.protocol=SASL_PLAINTEXT sasl.mechanism.inter.broker.protocol=GSSAPI sasl.enabled.mechanisms=GSSAPI
-
Проверьте, что после установки Kerberos SASL в настройках сервиса Kafka в группе server.properties изменился параметр listeners с
PLAINTEXT://:9092
наSASL_PLAINTEXT://:9092
. -
Проверьте наличие созданных принципалов для каждого сервиса.
На хосте с установленным сервером KDC введите команду:
$ sudo kadmin.local list_principals
Вывод списка принципалов показывает, что созданы принципалы для каждого хоста каждого установленного сервиса, принципалы админов и другие технические принципалы для созданной области:
K/M@ADS-KAFKA.LOCAL admin/admin@ADS-KAFKA.LOCAL kadmin/admin@ADS-KAFKA.LOCAL kadmin/changepw@ADS-KAFKA.LOCAL kadmin/sov-ads-test-0.ru-central1.internal@ADS-KAFKA.LOCAL kafka/sov-ads1-test.ru-central1.internal@ADS-KAFKA.LOCAL kafka/sov-ads2-test.ru-central1.internal@ADS-KAFKA.LOCAL kafka/sov-ads3-test.ru-central1.internal@ADS-KAFKA.LOCAL kiprop/sov-ads-test-0.ru-central1.internal@ADS-KAFKA.LOCAL krbtgt/ADS-KAFKA.LOCAL@ADS-KAFKA.LOCAL zookeeper/sov-ads1-test.ru-central1.internal@ADS-KAFKA.LOCAL zookeeper/sov-ads2-test.ru-central1.internal@ADS-KAFKA.LOCAL zookeeper/sov-ads3-test.ru-central1.internal@ADS-KAFKA.LOCA
-
Проверьте наличие на хостах c установленными сервисами файлов для хранения паролей *.service.keytab.
На каждом хосте с установленными сервисами введите команду:
$ ls -la /etc/security/keytabs/
Вывод списка файлов показывает, что созданы файлы *.service.keytab для каждого сервиса, установленного на хост:
total 16 drwxr-xr-x. 2 root root 102 Aug 9 20:55 . drwxr-xr-x. 7 root root 4096 Aug 9 19:38 .. -rw-------. 1 kafka kafka 826 Aug 9 20:54 kafka.service.keytab -rw-------. 1 zookeeper zookeeper 858 Aug 9 20:55 zookeeper.service.keytab
Настройка учетных записей для аутентификации в Kafka
Для производителя (producer) и потребителя (consumer) можно создать принципалы соответствующих пользователей.
Для этого поочередно введите команды, используя имя пользователя и пароль:
$ sudo kadmin.local -q "add_principal -pw PASSWORD reader@ADS-KAFKA.LOCAL"
$ sudo kadmin.local -q "add_principal -pw PASSWORD writer@ADS-KAFKA.LOCAL"
Получите для каждой созданной учетной записи соответствующий результат:
Principal "reader@ADS-KAFKA.LOCAL" created. Principal "writer@ADS-KAFKA.LOCAL" created.
Создание JAAS-файла для пользователя
Для всех принципалов должен быть создан JAAS-файл (Java Authentication and Authorization Service). В нем указывается, как будут использованы тикеты для конкретного принципала.
ПРИМЕЧАНИЕ
|
Для принципалов брокеров после керберизации автоматически создаются параметры подключения в файле kafka-jaas.conf. Для того чтобы посмотреть cодержимое файла, введите команду:
$ sudo vim /usr/lib/kafka/config/kafka-jaas.conf
Для новых принципалов writer
и reader
самостоятельно создайте JAAS-файл.
-
Выполните команду:
$ sudo vim /tmp/client.jaas
-
Введите данные в файл:
KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useTicketCache=true; };
— где
useTicketCache
— параметр, определяющий, будет ли тикет для этого пользователя получен из кеша тикетов. При установке данного параметра вtrue
перед подключением в Kafka необходимо создать тикет пользователя.
Создание файла конфигурации .properties для пользователя
Для создания файла конфигурации .properties для пользователя выполните команду:
$ sudo vim /tmp/client.properties
Заполните файл данными:
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
Подключение к Kafka (создание тикетов) и работа с .sh файлами (скриптами) с участием разных пользователей
-
Откройте терминальную сессию 1 и подключитесь к одному из брокеров Kafka.
-
Создайте тикет для пользователя
writer
:$ kinit -p writer@ADS-KAFKA.LOCAL
Введите пароль, указанный при создании пользователя.
-
Проверьте тикет:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: writer@ADS-KAFKA.LOCAL Valid starting Expires Service principal 08/10/2022 20:44:12 08/11/2022 20:44:12 krbtgt/ADS-KAFKA.LOCAL@ADS-KAFKA.LOCAL
ПРИМЕЧАНИЕПолное описание функций команды kinit и применяемых опций приведены по ссылке kinit. -
Экспортируйте созданный файл client.jaas как параметр JVM для данного пользователя при помощи переменной среды
KAFKA_OPTS
:$ export KAFKA_OPTS="-Djava.security.auth.login.config=/tmp/client.jaas"
-
Создайте топик, указав путь к созданному файлу client.properties:
$ /usr/lib/kafka/bin/kafka-topics.sh --create --topic test-topic --bootstrap-server sov-ads-test-1.ru-central1.internal:9092,sov-ads-test-2.ru-central1.internal:9092,sov-ads-test-3.ru-central1.internal:9092 --command-config /tmp/client.properties
Получите подтверждение:
Created topic test-topic.
-
Запишите сообщение в топик, указав путь к созданному файлу client.properties:
$ /usr/lib/kafka/bin/kafka-console-producer.sh --topic test-topic --bootstrap-server sov-ads-test-1.ru-central1.internal:9092,sov-ads-test-2.ru-central1.internal:9092,sov-ads-test-3.ru-central1.internal:9092 --producer.config /tmp/client.properties
>One >Two >Three >Four >Five
-
Откройте терминальную сессию 2 и подключитесь к одному из брокеров Kafka.
-
Создайте тикет для пользователя
reader
:$ kinit -p reader@ADS-KAFKA.LOCAL
Введите пароль, указанный при создании пользователя.
-
Проверьте тикет:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: reader@ADS-KAFKA.LOCAL Valid starting Expires Service principal 08/10/2022 21:30:47 08/11/2022 21:30:47 krbtgt/ADS-KAFKA.LOCAL@ADS-KAFKA.LOCAL
-
Экспортируйте созданный файл client.jaas как параметр JVM для данного пользователя при помощи переменной среды
KAFKA_OPTS
:$ export KAFKA_OPTS="-Djava.security.auth.login.config=/tmp/client.jaas"
-
Считайте сообщения из топика, указав путь к созданному файлу client.properties:
$/usr/lib/kafka/bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server sov-ads-test-1.ru-central1.internal:9092,sov-ads-test-2.ru-central1.internal:9092,sov-ads-test-3.ru-central1.internal:9092 --consumer.config /tmp/client.properties
Полученные сообщения:
One Two Three Four Five
Убедитесь в корректности принятых сообщений.