Плагин Solr находит коллекции и пути запросов внутри них и управляет политиками доступа к тому, что решает Solr: запросам, обновлению, чтению и изменению схем и конфигураций, администрированию коллекций и кластера. Идентификатор плагина и тип сервиса — solr. Плагин сервиса работает в сервере GrantForge; политики применяет агент Solr, установленный в узлах.
Интеграционные тесты Testcontainers в репозитории охватывают узлы SolrCloud версий Solr 9.8.1, 9.10.1, 9.11.0 и 10.0.0; это не означает сертификацию всех остальных версий.
Установка
Дистрибутив содержит плагин в plugins/solr. Убедитесь в Управление платформой → Плагины, что solr включён; после обновления заново просканируйте каталог плагинов. Плагин обращается к узлам через HTTP-клиент JDK из SolrJ 9.11 в отдельном загрузчике классов.
Добавление сервиса данных
- Откройте Права на данные → Сервисы данных, добавьте сервис и выберите Apache Solr (
solr). - Укажите базовый URL одного узла или нескольких.
- Выберите, как входит пользователь для поиска, введите его учётные данные, проверьте подключение и сохраните сервис. Проверка входит в систему и описывает кластер: версию Solr, работает ли он в режиме SolrCloud и сколько в нём коллекций.
Пользователь для поиска позволяет GrantForge находить ресурсы; он не связан с пользователями, которые выполняют запросы и обновления. Успешная проверка подключения не означает, что доступ уже подчиняется политикам.
| Параметр | Назначение |
|---|---|
solr.urls |
Обязательный: базовый URL узла, например https://solr1.example.com:8983/solr; несколько через запятую, по очереди, если узел недоступен |
authentication |
none (по умолчанию), basic или jwt |
username, password |
basic: пользователь для поиска и его пароль; пароль хранится в зашифрованном виде |
token |
jwt: JSON Web Token пользователя для поиска; хранится в зашифрованном виде |
javax.net.ssl.trustStore, javax.net.ssl.trustStorePassword, javax.net.ssl.trustStoreType |
https: хранилище доверенных сертификатов на сервере GrantForge, по которому проверяются сертификаты узлов, его пароль и тип, по умолчанию PKCS12; пусто — хранилище JVM |
timeout |
Сколько может длиться запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд |
Параметры одного способа входа отклоняются при другом, поэтому сервис точно указывает, как он входит. Отклонённый вход, пользователь без права что-то видеть и недоступный узел, в том числе за прокси, который отвечает вместо него, сообщаются как таковые.
Что видит пользователь для поиска
Список коллекций — это право Solr collection-admin-read, а пути запросов коллекции берутся из её конфигурации, config-read. Выдайте их пользователю для поиска в собственных правилах Solr или, после установки агента, admin_read на кластере и config_read на коллекциях. Пути коллекций, которые пользователь для поиска видеть не может, в подсказки не попадают. У узла без SolrCloud вместо коллекций есть ядра (cores), и плагин показывает их как коллекции.
Ресурсы и типы доступа
| Уровень | Сопоставление | Типы доступа |
|---|---|---|
collection |
Шаблон, с учётом регистра; имя коллекции | query, update, schema_read, schema_edit, config_read, config_edit, admin_collection |
path |
Шаблон, с учётом регистра; внутри коллекции; путь запроса, например /select, /export или /update/json |
query, update, schema_read, schema_edit, config_read, config_edit |
cluster |
Единственное значение, * |
health, metrics, admin_read, security, admin |
| Тип доступа | Права Solr | Включает |
|---|---|---|
query |
read: поиск, получение, экспорт |
— |
update |
update |
— |
schema_read, schema_edit |
schema-read, schema-edit |
schema_edit включает schema_read |
config_read, config_edit |
config-read, config-edit |
config_edit включает config_read |
admin_collection |
collection-admin-read и collection-admin-edit запросов Collections API, называющих коллекцию: создание, перезагрузка, резервное копирование, удаление и т. п. |
query, update, schema_edit, config_edit |
health, metrics |
health, metrics-read |
— |
admin_read |
collection-admin-read всего кластера, core-admin-read, zk-read, filestore-read, package-read, а также чтение конфигурации и схемы узлов |
health, metrics |
security |
security-read, security-edit |
— |
admin |
Всё | admin_read, security, admin_collection |
Запрос к коллекции решается на коллекции и на коллекции с её путём запроса, и запрет на любом из них отклоняет его; так политика может разрешить коллекцию и запретить её обработчик /export или разрешить обновление только через /update*. Запросу к нескольким коллекциям нужна каждая из них. Внутри коллекции путь запроса — это обработчик, которому Solr передаёт запрос, в именовании Solr.
Запросу Collections API, называющему коллекции параметром name или collection, нужен admin_collection на каждой из них; поэтому политика на team-* позволяет команде создавать коллекции, имя которых начинается с team-, перезагружать, копировать и удалять их, но никакие другие. Запрос, не называющий ни одной, например список всех коллекций, относится к кластеру. admin на кластере даёт всё, как собственное право Solr all. В значениях политик * соответствует любой последовательности символов, а ? — одному символу. Редактор политик подсказывает коллекции и пути запросов коллекций, названных в политике.
Адреса клиентов
Элемент политики может действовать только для некоторых клиентов: его условие Адреса клиентов (ip-range) принимает адреса и диапазоны, например 10.1.0.0/16 или 2001:db8::/32. Имена хостов не разрешаются. За обратным прокси клиентом считается прокси, если агент ему не доверяет; если доверяет, клиент — это последний адрес в X-Forwarded-For, добавленный не доверенным прокси, так что клиент не может выдать себя за произвольный адрес.
Пример политик
Пусть в кластере есть коллекции sales и hr. Создайте в одном сервисе данных такие включённые политики доступа:
| Ресурсы | Правило |
|---|---|
collection=sales |
Разрешить query группе analysts |
collection=sales, path=/export |
Запретить query пользователю alice |
collection=sales, path=/update* |
Разрешить update пользователю ingest |
collection=team-* |
Разрешить admin_collection группе search-team |
cluster=* |
Разрешить metrics и health пользователю monitoring |
collection=hr |
Разрешить query группе hr-staff из 10.0.0.0/8 |
cluster=* |
Разрешить admin группе solr-admins |
Когда агент применит новый снимок, участники analysts запрашивают sales, а alice — всё, кроме обработчика экспорта; ingest обновляет sales через обработчики обновления и не может её запрашивать; участники search-team создают и администрируют свои коллекции team-; monitoring читает метрики и состояние; участники hr-staff запрашивают hr только из внутренней сети; участники solr-admins могут всё.
Применение политик
Плагин сервиса управляет политиками и находит ресурсы. Для их применения нужен агент Solr в каждом узле. Развёртывание и проверки описаны в агенте Solr.
