Использование Kerberos с MS Active Directory в Kafka
В данной статье описаны первые шаги в Kafka с настроенной Kerberos-аутентификацией на базе MS Active Directory.
ПРИМЕЧАНИЕ
|
Проверка установленного Kerberos
-
Проверьте настройки, установленные для 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 в группе Main изменился параметр listeners с
PLAINTEXT://:9092
наSASL_PLAINTEXT://:9092
.Настройки сервиса Kafka -
При помощи утилиты командной строки для поиска в каталоге LDAP ldapsearch с хоста брокера Kafka существует возможность проверить созданные принципиалы в среде
AD.RANGER-TEST
в заданномContainer DN
.Ввести команду, указав
Admin DN
,Container DN
и пароль пользователя, указанные при запуске LDAP на ADCM:$ ldapsearch -v -H ldaps://ldap_host -x -D "cn=admin,ou=kerberos,ou=adh,dc=ad,dc=ranger-test" -b "ou=admin_ou,ou=kerberos,ou=adh,dc=ad,dc=ranger-test" -w Password
В результате выводится информация по каждой созданной учетной записи в LDAP для каждого хоста каждого сервиса ADS. Вариант вывода для одной учетной записи:
# kafka/sov-ads-test-5.ru-central1.internal, admin_ou, kerberos, adh, ad.ranger-test dn: CN=kafka/sov-ads-test-5.ru-central1.internal,OU=admin_ou,OU=kerberos,OU=adh,DC=ad,DC=ranger-test objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user cn: kafka/sov-ads-test-5.ru-central1.internal distinguishedName: CN=kafka/sov-ads-test-5.ru-central1.internal,OU=admin_ou,OU=kerberos,OU=adh,DC=ad,DC=ranger-test instanceType: 4 whenCreated: 20220816100038.0Z whenChanged: 20220816100042.0Z uSNCreated: 14950769 uSNChanged: 14950786 name: kafka/sov-ads-test-5.ru-central1.internal objectGUID:: S/7BU9kZcE6pOwqxKUDJRQ== userAccountControl: 66048 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 0 lastLogoff: 0 lastLogon: 133053546143620502 pwdLastSet: 133051176384557312 primaryGroupID: 513 objectSid:: AQUAAAAAAAUVAAAAKcXXWJ6nBwdKJbrR0v8QAA== accountExpires: 0 logonCount: 50 sAMAccountName: $IUV110-ESD8M6LCFJGL sAMAccountType: 805306368 userPrincipalName: kafka/sov-ads-test-5.ru-central1.internal@AD.RANGER-TEST servicePrincipalName: kafka/sov-ads-test-5.ru-central1.internal objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=ad,DC=ranger-test dSCorePropagationData: 16010101000000.0Z lastLogonTimestamp: 133051176422839302
ПРИМЕЧАНИЕПолное описание функций утилиты командной строки ldapsearch и применяемых опций приведены по ссылке ldapsearch. Синтаксис командыldapsearch
может отличаться в зависимости от используемой OC. -
Проверьте наличие на хостах 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 dockerroot dockerroot 890 Aug 9 20:55 kafka-manager.service.keytab -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
По умолчанию каждый пользователь из базы данных службы каталогов Active Directory, имеющий принципал в заданной области (realm), имеет права на подключение к кластеру Kafka и выполнение действий с топиками.
Создание JAAS-файла для пользователя
Для всех принципалов должен быть создан JAAS-файл (Java Authentication and Authorization Service). В нем указывается, как будут использованы тикеты для конкретного принципала.
ПРИМЕЧАНИЕ
|
Для принципалов брокеров после керберизации автоматически создаются параметры подключения в файле kafka-jaas.conf. Для того чтобы посмотреть cодержимое файла, введите команду:
$ sudo vim /usr/lib/kafka/config/kafka-jaas.conf
Для принципалов клиента необходимо самостоятельно создать файл 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 файлами (скриптами)
-
Открыть терминальную сессию и подключиться к одному из брокеров Kafka.
-
Создать тикет для пользователя, введя пароль:
$ kinit -p admin-kafka@AD.RANGER-TEST
Password for admin-kafka@AD.RANGER-TEST:
ПРИМЕЧАНИЕ-
В данном примере
admin-kafka
- пользователь, имеющий запись в базе данных службы каталогов Active Directory и принципал для областиAD.RANGER-TEST
. -
Полное описание функций команды kinit и применяемых опций приведены по ссылке kinit.
-
-
Проверить тикет:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: admin-kafka@AD.RANGER-TEST Valid starting Expires Service principal 08/19/2022 14:18:33 08/20/2022 00:18:33 krbtgt/AD.RANGER-TEST@AD.RANGER-TEST renew until 08/20/2022 14:17:35
-
Экспортируйте созданный файл 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
-
Считайте сообщения из топика, указав путь к созданному файлу 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
Убедитесь в корректности принятых сообщений.