Плагин 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 в отдельном загрузчике классов.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache Pulsar (
pulsar). - Введите URL веб-сервиса одного брокера или нескольких.
- Выберите способ входа роли для поиска, введите её учётные данные, проверьте подключение и сохраните сервис. Проверка выполняет вход и описывает кластер: его кластеры и число тенантов.
Параметры носят имена собственного 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.
