Использование 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 с использованием любой из систем аутентификации:

  • В системе аутентификации создан пользователь, имеющий принципал и keytab-файл для аутентификации в Kafka.

  • В кластере ADS для сервиса Kafka REST Proxy настроена аутентификация, например, basic или при помощи файла jaas, создан пользователь, и ему назначена роль.

Включение модуля kafka-rest-security

Для включения модуля на странице конфигурирования сервиса Kafka REST Proxy выполните:

  1. Переведите в активное состояние переключатель Show advanced.

  2. Откройте шаблон 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.

  3. Переведите в активное состояние переключатель Principal Propagation. В поле JAAS Entry укажите раздел пользовательского файла JAAS template, в котором содержатся данные новых пользователей.

  4. Сохраните настройки, нажав Save.

Настройка kafka-rest-security
Настройка kafka-rest-security

После изменения параметров при помощи интерфейса ADCM перезагрузите сервис Kafka REST Proxy. Для этого примените действие Restart, нажав на иконку actions default dark actions default light в столбце 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.

Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней