GrantForge

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

    Apache Pulsar

    Установка и настройка сервисного плагина Pulsar, подключение к одному или нескольким брокерам, вход по токену, паролю, OAuth 2.0 или клиентскому сертификату, поиск тенантов, пространств имён, топиков и подписок и управление тем, кто может производить, потреблять и администрировать.

    Плагин Pulsar ищет тенанты, пространства имён, топики, подписки и кластеры и управляет политиками доступа к тому, что решает Pulsar: производству, потреблению, functions, sources, sinks и packages, а также администрированию топиков, пространств имён, тенантов и кластеров. Идентификатор плагина и тип сервиса — pulsar. Сервисный плагин работает на сервере GrantForge; политики применяет агент Pulsar, установленный в брокерах.

    Интеграционные тесты Testcontainers в репозитории покрывают брокеры Pulsar 3.0.17, 3.3.9, 4.0.14 и 4.2.5; это не сертифицирует все остальные версии.

    Установка

    Дистрибутив содержит плагин в plugins/pulsar. Убедитесь в Управление платформой → Плагины, что pulsar включён; после обновления заново просканируйте каталог плагинов. Плагин обращается к веб-сервису брокеров через собственный admin-клиент Pulsar 4.2.5 в отдельном загрузчике классов.

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

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache Pulsar (pulsar).
    2. Введите URL веб-сервиса одного брокера или нескольких.
    3. Выберите способ входа роли для поиска, введите её учётные данные, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает кластер: его кластеры и число тенантов.

    Параметры носят имена собственного client.conf Pulsar и могут быть скопированы оттуда. Роль для поиска позволяет GrantForge находить ресурсы; она отделена от ролей, которые производят и потребляют. Успешная проверка подключения не означает, что доступ уже подчиняется политикам.

    Параметр Назначение
    webServiceUrl Обязательно: веб-сервис брокера, http://host:port или https://host:port, порт по умолчанию 8080 или 8443; несколько брокеров через запятую, например http://broker1:8080,broker2:8080
    authentication none (по умолчанию), token, basic, oauth2 или tls
    token token: токен роли для поиска; хранится в зашифрованном виде
    username, password basic: имя пользователя и пароль роли для поиска; пароль хранится в зашифрованном виде
    issuerUrl, privateKey, audience, scope oauth2: сервер авторизации, путь к JSON-файлу учётных данных с client_id и client_secret на сервере GrantForge, а также audience и scope, если брокеры их ожидают
    tlsCertificateFilePath, tlsKeyFilePath tls: пути к клиентскому сертификату и его закрытому ключу, PEM, на сервере GrantForge
    tlsTrustCertsFilePath https: сертификаты УЦ, по которым проверяются сертификаты брокеров, PEM; пустое значение использует сертификаты JVM
    tlsEnableHostnameVerification https: должен ли сертификат брокера содержать его хост, по умолчанию true
    timeout Сколько может длиться запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд

    Параметры одного способа входа отклоняются при другом, так что сервис точно указывает, как он входит. Отклонённый вход, роль, которой что-то не видно, и недоступный брокер, в том числе за прокси, отвечающим вместо него, сообщаются как таковые.

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

    Pulsar позволяет перечислять кластеры и тенанты только своим суперпользователям. Укажите роль для поиска в superUserRoles брокеров или после установки агента разрешите ей admin на кластере, что тоже делает её суперпользователем. Пространства имён, топики и подписки, которые роли для поиска не видны, в подсказки не попадают.

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

    Уровень Сопоставление Типы доступа
    tenant Шаблон, с учётом регистра Все, кроме admin
    namespace Шаблон, с учётом регистра; под тенантом; собственное имя пространства имён, например orders produce, consume, functions, sources, sinks, packages, admin_topic, admin_namespace
    topic Шаблон, с учётом регистра; под пространством имён; собственное имя топика, например payments produce, consume, admin_topic
    subscription Шаблон, с учётом регистра; под топиком; имя подписки consume
    cluster Шаблон, с учётом регистра; имя кластера, например standalone admin: доступ суперпользователя Pulsar
    Тип доступа Включает
    produce, consume, functions, sources, sinks, packages —
    admin_topic: завершать, уплотнять, выгружать в многоуровневое хранилище, выгружать из брокера и усекать топики, менять их политики produce, consume
    admin_namespace: создавать и удалять топики, менять политики пространства имён admin_topic
    admin_tenant: создавать, перечислять и удалять пространства имён admin_namespace, functions, sources, sinks, packages
    admin: всё, что могут суперпользователи Pulsar admin_tenant

    Как и в собственных правах Pulsar, право на тенант или пространство имён распространяется на их содержимое: produce на пространство имён orders тенанта sales позволяет производить в каждый его топик. Проверка решается последовательно на тенанте, пространстве имён, топике и подписке, и запрет на любом из них её отклоняет; так политика может разрешить пространство имён и запретить в нём один топик. Под топиком уровень подписки указывает, через какие подписки роль может потреблять: consume на топике * с подпиской billing-* позволяет роли потреблять каждый топик пространства имён, но только через подписки, чьё имя начинается с billing-.

    Топик решается по собственному имени без домена, поэтому персистентный и неперсистентный топики с одним именем разделяют политики; раздел секционированного топика решается как сам секционированный топик. В значениях политик * соответствует любому числу символов, а ? — одному. Редактор политик предлагает кластеры, тенанты, а также пространства имён, топики и подписки в том, что указывает политика.

    Адреса клиентов

    Элемент политики может действовать только для некоторых клиентов: его условие Адреса клиентов (ip-range) принимает адреса и диапазоны вроде 10.1.0.0/16 или 2001:db8::/32. Имена хостов не разрешаются. За прокси клиентом считается сам прокси, если он не передаёт собственный адрес клиента: по протоколу HAProxy для производителей и потребителей и через X-Forwarded-For для веб-сервиса, когда брокеры ему доверяют.

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

    Допустим, у тенанта sales есть пространства имён orders и returns. Создайте в одном сервисе данных следующие включённые политики доступа:

    Ресурсы Правило
    tenant=sales, namespace=orders Разрешить produce группе analysts
    tenant=sales, namespace=orders, topic=audit Запретить produce пользователю alice
    tenant=sales, namespace=orders, topic=*, subscription=billing-* Разрешить consume пользователю alice
    tenant=sales Разрешить admin_tenant пользователю bob
    tenant=public Разрешить produce группе ingest из 10.0.0.0/8
    cluster=standalone Разрешить admin группе pulsar-admins

    Когда агент применит новый снимок, участники analysts смогут производить в каждый топик sales/orders, а alice — во все, кроме audit; alice потребляет там только через подписки billing-; bob создаёт и администрирует пространства имён и топики в sales; участники ingest производят в тенант public только из внутренней сети; а участники pulsar-admins — суперпользователи Pulsar.

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

    Сервисный плагин управляет политиками и ищет ресурсы. Для их применения нужен агент Pulsar в каждом брокере. Развёртывание и проверки описаны в агенте Pulsar.

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

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