Использование kafka-rest-security
Обзор
По умолчанию пользователь Kafka REST Proxy может аутентифицироваться в Kafka только с одним предопределенным принципалом, созданным при включении Kerberos.
Модуль kafka-rest-security предоставляет возможность проходить аутентификацию в Kafka с разными принципалами при подключении к Kafka через Kafka REST Proxy.
Запрос фильтруется через модуль kafka-rest-security, чтобы получить имя пользователя и сопоставить его со списком предопределенных пользователей для аутентификации в Kafka.
Если имя пользователя Kafka REST Proxy совпадает с одним из пользователей Kafka, новый контекст безопасности создается с применением этого принципала и используется для аутентификации в Kafka.
Предварительные требования
Для включения модуля kafka-rest-security должны быть выполнены следующие условия:
-
В кластере ADS включена аутентификация про протоколу Kerberos с использованием любой из систем аутентификации:
-
FreeIPA
-
В системе аутентификации создан пользователь, имеющий принципал и keytab-файл для аутентификации в Kafka.
-
В кластере ADS для сервиса Kafka REST Proxy настроена аутентификация, например, basic или при помощи файла jaas, создан пользователь, и ему назначена роль.
Включение модуля kafka-rest-security
Для включения модуля на странице конфигурирования сервиса Kafka REST Proxy выполните:
-
Переведите в активное состояние переключатель Show advanced.
-
Откройте шаблон JAAS template, где укажите в разделе KafkaClient данные пользователей:
-
userNames — опция записи имени пользователя, используется для сопоставления субъекта Kerberos субъекту kafka-rest. Имя пользователя должно совпадать с именем, введенным при создании нового пользователя во время basic-аутентификации. Могут быть указаны несколько имен пользователей через пробел.
-
keyTab — опция для указания keytab-файла субъекта Kerberos.
-
principal — опция для указания принципала субъекта Kerberos.
Для каждого пользователя должен быть указан весь раздел полностью. Например, ниже приведены две записи для пользователя, в первой из них для пользователя Kafka REST Proxy
username
сопоставлены параметры субъекта Kerberos, а во второй не сопоставлены:KafkaClient { com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false serviceName="kafka" userNames="username" keyTab="/etc/security/keytabs/kafka-rest.service.keytab" principal="kafka-rest/<hostname>@<realm>"; com.sun.security.auth.module.Krb5LoginModule required useKeyTab=true storeKey=true useTicketCache=false serviceName="kafka" keyTab="/etc/security/keytabs/kafka.service.keytab" principal="kafka/<hostname>@<realm>"; };
ПРИМЕЧАНИЕ-
Подробнее о шаблоне JAAS template см. в статье Настройка пользовательского jaas.conf.
-
Ниже указаны настраиваемые в JAAS-файле готовые методы аутентификации, которые можно использовать с модулем kafka-rest-security для сопоставления участников (имен пользователей) Kafka REST Proxy с участниками Kafka:
-
Совместно с вышеперечисленными методами может быть использована аутентификация mTLS. Данный метод аутентификации не может быть использован отдельно, так как он не предоставляет сведения о принципале REST.
-
-
Переведите в активное состояние переключатель Principal Propagation. В поле JAAS Entry укажите раздел пользовательского файла JAAS template, в котором содержатся данные новых пользователей.
-
Сохраните настройки, нажав Save.

После изменения параметров при помощи интерфейса ADCM перезагрузите сервис Kafka REST Proxy. Для этого примените действие Restart, нажав на иконку
в столбце Actions.
Убедитесь, что в конфигурационном файле /etc/kafka-rest/kafka-rest.properties появились параметры:
kafka.rest.resource.extension.class=io.arenadata.kafkarest.security.KafkaRestSecurityResourceExtension
kafka.rest.auth.impersonation.enabled=true
kafka.rest.auth.impersonation.jaas.entry=KafkaClient
Где:
-
kafka.rest.resource.extension.class
— список классов, которые будут использоваться для внедрения пользовательских ресурсов; -
kafka.rest.auth.impersonation.enabled
— включает распознавание имен пользователей в Kafka REST Proxy; -
kafka.rest.auth.impersonation.jaas.entry
— указывает раздел JAAS-файла для распознавания имен.
Метод аутентификации mTLS включается при помощи добавления пользовательского свойства в файл kafka-rest.properties (с использованием поля Add key, value на странице конфигурирования сервиса Kafka REST Proxy):
-
Enter field name —
ssl.client.authentication
-
Enter field value —
REQUIRED
ВНИМАНИЕ
Для Kafka REST необходимо настроить SSL до включения аутентификации по методу mTLS. |
mTLS необходимо объединить с одним из модулей входа в систему JAAS для использования с kafka-rest-security.
Список готовых модулей, которые можно настроить в шаблоне JAAS:
-
org.eclipse.jetty.security.jaas.spi.JDBCLoginModule
-
org.eclipse.jetty.security.jaas.spi.PropertyFileLoginModule
-
org.eclipse.jetty.security.jaas.spi.DataSourceLoginModule
-
org.eclipse.jetty.security.jaas.ldap.LdapLoginModule
Пример работы с аутентифицированным пользователем
Ниже приведен запрос для записи пары ключ/значение {"foo":"bar"}
в топик test
с аутентификацией пользователя, где username:password
— имя пользователя и пароль, введенные при создании нового пользователя во время basic-аутентификации:
$ curl -u username:password -X POST -H "Content-Type: application/vnd.kafka.json.v2+json" --data '{"records":[{"value":{"foo":"bar"}}]}' "http://hostname:8082/topics/test"
ПРИМЕЧАНИЕ
Подробнее о работе с Kafka REST Proxy при помощи cURL описано в статье Пример использования Kafka REST Proxy. |