GrantForge

    Сообщения и потоки

    Apache Kafka

    Установка и настройка плагина сервиса Kafka, вход через PLAIN, SCRAM или Kerberos без шифрования или по TLS, поиск топиков, групп, транзакционных ID и пользователей и управление политиками доступа в терминах самой Kafka.

    Плагин Kafka ищет топики, группы потребителей, транзакционные ID, пользователей SCRAM и токены делегирования и управляет политиками доступа в терминах самой Kafka: её типы ресурсов служат уровнями ресурсов, а операции ACL — типами доступа. ID плагина и тип сервиса — kafka. Плагин сервиса работает на сервере GrantForge; агент Kafka, установленный в брокерах и контроллерах, применяет политики.

    Интеграционные тесты Testcontainers в репозитории покрывают Kafka 3.7.2, 3.9.2, 4.1.2 и 4.3.1 со входом через SASL PLAIN и SCRAM и собственным авторизатором Kafka, а также Kerberos (keytab и пароль) и TLS на 4.3.1; это не сертифицирует все остальные версии.

    Установка

    Дистрибутив содержит плагин в plugins/kafka. Убедитесь, что kafka включён в Управление платформой → Плагины; после обновления каталога плагинов просканируйте его заново. Плагин общается с брокерами через собственный клиент Admin Kafka (kafka-clients 4.3.1) в отдельном загрузчике классов.

    Добавление сервиса данных

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache Kafka (kafka).
    2. Укажите серверы начальной загрузки и способ защиты слушателя брокеров.
    3. Укажите пользователя для поиска, проверьте подключение и сохраните сервис. Проверка входит в систему и описывает кластер: его ID и число брокеров.

    Параметры носят имена клиентов Kafka, поэтому их можно скопировать из конфигурации клиента. Пользователь для поиска позволяет GrantForge находить ресурсы; он не связан с клиентами, которые производят и потребляют сообщения. Успешная проверка подключения не означает, что запросы уже подчиняются политикам.

    Параметр Назначение
    bootstrap.servers Обязательные начальные брокеры, хост:порт через запятую, например kafka1:9092,kafka2:9092
    security.protocol PLAINTEXT (по умолчанию), SSL, SASL_PLAINTEXT или SASL_SSL
    sasl.mechanism Только для протоколов SASL: PLAIN, SCRAM-SHA-256 или SCRAM-SHA-512 с паролем, GSSAPI для Kerberos
    username SASL: пользователь для поиска; при Kerberos — полный принципал, например grantforge@EXAMPLE.COM
    password Пароль пользователя или, без keytab, пароль Kerberos принципала; хранится в зашифрованном виде
    keytab Kerberos: путь к keytab принципала, доступный для чтения на сервере GrantForge
    kerberos.kdc Kerberos: KDC области принципала, хост[:порт] через запятую; пустое значение использует krb5.conf сервера
    sasl.kerberos.service.name Kerberos: первая часть принципалов брокеров, по умолчанию kafka
    ssl.truststore.location, ssl.truststore.password, ssl.truststore.type TLS: хранилище доверенных сертификатов для проверки брокеров (JKS, PKCS12 или PEM); пустое значение доверяет тому, чему доверяет Java
    ssl.keystore.location, ssl.keystore.password, ssl.key.password TLS: сертификат GrantForge для брокеров, которые требуют его от клиентов
    ssl.verify.hostname TLS: должны ли сертификаты брокеров называть хосты подключения, по умолчанию true
    request.timeout.ms Тайм-аут запросов, по умолчанию 30000, диапазон 1..600000

    Параметры SASL отклоняются при PLAINTEXT и SSL, параметры TLS — при PLAINTEXT и SASL_PLAINTEXT. PLAIN и SCRAM требуют пароль; GSSAPI требует пароль или keytab.

    Kerberos

    При GSSAPI GrantForge выполняет вход принципала через собственный вход Kerberos Kafka, по keytab или с паролем, который GrantForge передаёт входу сам; больше ничего на сервере GrantForge не требует настроек Kerberos. Области, KDC которых указаны в kerberos.kdc, объявляются для всего сервера GrantForge, как это делают плагины HDFS и Hive, поэтому разные сервисы могут одновременно использовать разные области.

    Что видит пользователь для поиска

    Kafka показывает пользователю только то, что он может описать, поэтому пользователю для поиска нужен describe на топиках, группах и транзакционных ID, которые он должен предлагать, и describe на кластере для пользователей SCRAM. Kafka пропускает топики и группы, которые он не может описать, поэтому подсказки оказываются пустыми, а не отклонёнными. Внутренние топики, например __consumer_offsets, предлагаются, когда введённый текст начинается с _. Кластер без токенов делегирования или без SCRAM их не предлагает.

    Когда агент Kafka применяет политики, они решают и то, что может описывать пользователь для поиска: дайте ему политику, разрешающую describe, или укажите его в super.users брокеров.

    Ресурсы и типы доступа

    Уровень Ресурс Kafka Типы доступа
    topic Топики read, write, create, delete, alter, describe, describe_configs, alter_configs, all
    group Группы потребителей read, delete, describe, all
    transactional_id Транзакционные ID write, describe, all
    cluster Кластер, всегда называемый kafka-cluster create, alter, describe, cluster_action, describe_configs, alter_configs, idempotent_write, all
    delegation_token Токены делегирования, по ID токена describe, all
    user Пользователи, чьи токены делегирования создаются или описываются create_tokens, describe_tokens, all

    Каждый уровень самостоятелен; политика называет один. Значения чувствительны к регистру: * соответствует любому числу символов, ? — одному. Типы доступа подразумевают другие так же, как операции ACL Kafka: read, write, delete и alter подразумевают describe, alter_configs подразумевает describe_configs, а all — все остальные.

    Подразумевание действует и для запретов: политика, запрещающая write на топике, запрещает и describe, который подразумевает write, поэтому пользователь перестаёт видеть топик. Собственные ACL Kafka применяют подразумевание только к разрешённым операциям.

    Редактор политик предлагает имена из кластера по префиксу; для cluster он предлагает kafka-cluster.

    Пример политик

    Допустим, продюсеры пользователя alice пишут в топики, имена которых начинаются с orders, а группа analysts читает их с группой потребителей billing. Создайте в одном сервисе данных три включённые политики доступа:

    Ресурсы Правило
    topic=orders* Разрешить write пользователю alice
    topic=orders* Разрешить read группе analysts
    group=billing Разрешить read группе analysts

    Когда агент применит новый снимок, alice сможет писать в orders-eu, в том числе идемпотентным продюсером и без idempotent_write на кластере; участники analysts будут потреблять его как billing; другие топики и группы откажут обоим. kafka-acls --list покажет три политики как ACL с префиксом и литеральные ACL.

    Применение политик

    Плагин сервиса управляет политиками и ищет ресурсы. Чтобы применять их, в каждом брокере и контроллере нужен агент Kafka. Развёртывание и проверки описаны на странице агента Kafka.

    Связанные руководства

    Редактировать эту страницу на GitHub