GrantForge

    Поисковые движки

    OpenSearch

    Установите и настройте сервисный плагин OpenSearch, подключитесь к одному или нескольким узлам, входите по паролю или клиентскому TLS-сертификату, ищите индексы, потоки данных, поля и кластер и управляйте тем, кто что может читать, записывать и администрировать, вплоть до полей, маскированных значений и документов.

    Плагин OpenSearch ищет индексы, потоки данных, поля и кластер и управляет политиками доступа в терминах самого OpenSearch: чтение полей, индексирование, удаление, создание и администрирование индексов, а также операции самого кластера, с маскированием полей и фильтрами строк индексов. Идентификатор плагина и тип сервиса — opensearch. Сервисный плагин работает на сервере GrantForge; агент OpenSearch, сервис рядом с кластером, применяет политики с помощью собственных ролей, безопасности на уровне полей, маскированных полей и безопасности на уровне документов плагина безопасности.

    Интеграционные тесты Testcontainers в репозитории покрывают OpenSearch 2.19, 3.3, 3.6 и 3.9 с плагином безопасности; это не означает сертификацию всех остальных версий.

    Установка

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

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

    1. Откройте Права на данные → Сервисы данных, добавьте сервис и выберите OpenSearch (opensearch).
    2. Укажите узел в виде URL или несколько узлов.
    3. Выберите, как входит пользователь для поиска, введите его учётные данные, проверьте подключение и сохраните сервис. Проверка входит и описывает кластер: версию OpenSearch и имя кластера, пользователя, под которым выполнен вход, и число индексов и потоков данных. Кластер без плагина безопасности проверку не проходит, так как агент применяет политики через него.

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

    Параметр Назначение
    opensearch.hosts Обязательно: узел в виде URL, например https://opensearch1.example.com:9200; несколько через запятую, по очереди, если один недоступен. Без схемы узел считается https, порт по умолчанию 9200; узлы одного сервиса либо все http, либо все https
    authentication password (по умолчанию) или certificate: клиентский TLS-сертификат, который плагин безопасности сопоставляет с пользователем
    username, password password: пользователь для поиска и его пароль, хранится в зашифрованном виде
    ssl.verificationMode Как в OpenSearch Dashboards: full (по умолчанию) проверяет сертификаты и имена узлов, certificate — только сертификаты, none — ничего
    ssl.certificateAuthorities Путь на сервере GrantForge к PEM-сертификатам CA, которыми проверяются узлы; пусто — используются сертификаты JVM
    ssl.certificate, ssl.key certificate: пути на сервере GrantForge к клиентскому PEM-сертификату и его закрытому ключу, PKCS #8 или старой формы OpenSSL; требуют узлов https
    ssl.keyPassphrase certificate: парольная фраза зашифрованного закрытого ключа, хранится в зашифрованном виде
    timeout Сколько могут занимать подключение и запрос, по умолчанию 30000, диапазон 1..600000 миллисекунд

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

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

    Пользователь для поиска должен иметь право читать то, что он перечисляет: API resolve OpenSearch для индексов и потоков данных, возможности полей (field capabilities) для полей и описание кластера для его имени. Встроенная роль readall даёт первые два; пользователь без cluster:monitor/main всё равно проходит проверку подключения, которая тогда не называет версию. Индексы и потоки данных, имена которых начинаются с точки, — скрытые и системные — перечисляются, только если введённое начинается с точки; опорные индексы потоков данных перечисляются через их поток. Поля — это поля документов: собственные служебные поля OpenSearch, объекты и мультиполя, которые ещё раз индексируют поле, например name.keyword, не показываются, так как безопасность на уровне полей показывает или скрывает их вместе с их полем.

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

    Уровень Сопоставление Типы доступа
    index Подстановочные знаки, с учётом регистра; имя индекса или потока данных index, delete, create_index, manage_aliases, monitor, manage
    field Подстановочные знаки, с учётом регистра; внутри индекса, путь поля, например address.city read
    cluster Подстановочные знаки, с учётом регистра; имя кластера cluster_monitor, manage_snapshots, manage_templates, manage_pipelines
    Тип доступа Группа действий плагина безопасности
    read read: поиск, получение, подсчёт и подобное
    index index: индексирование и обновление документов, в том числе через bulk
    delete delete: удаление документов
    create_index create_index: создание индексов, в том числе когда их создаёт первая запись
    manage_aliases, monitor manage_aliases, indices_monitor
    manage manage: любые административные действия с индексом, включая его удаление; подразумевает create_index, manage_aliases и monitor
    cluster_monitor, manage_snapshots cluster_monitor, manage_snapshots
    manage_templates, manage_pipelines cluster_manage_index_templates, cluster_manage_pipelines

    Чтение решается по полям, так же как безопасность на уровне полей показывает поля документов: политика read называет поля, а * означает все поля. Поэтому политика может разрешить индекс и запретить одно его поле, и пользователь читает все остальные. В значениях политик * соответствует любой последовательности символов, ? — одному символу. Редактор политик подсказывает индексы и потоки данных, поля индексов, названных в политике, и кластер.

    Использование того, что разрешает политика, требует в OpenSearch большего: multi-search, multi-get и прокрутки для чтения и bulk для записи. Это не отдельные типы доступа; агент выдаёт вместе с ними составные операции кластера.

    Маскирование

    Политика маскирования поля показывает пользователю его значения в маскированном виде, как маскированные поля плагина безопасности, и в документах, и в агрегациях:

    Маска Что видит пользователь
    Скрыть (Redact) Заглавные буквы как X, строчные как x, цифры как n
    Частичная маска: последние 4 / первые 4 Каждый прочий символ как x
    Хеш (SHA-256) SHA-256-хеш значения
    Хеш с солью кластера (BLAKE2b) Собственный хеш плагина безопасности с солью кластера в качестве ключа: одинаковые значения остаются одинаковыми, но их нельзя подобрать
    Своя Алгоритм хеширования, например SHA-512, или регулярные выражения с заменами, например /[0-9]/::*
    Без маски Значение как есть

    Фильтры строк

    Политика фильтра строк индекса показывает пользователю только документы, подходящие под запрос. Запрос — это DSL запросов OpenSearch в том виде, в каком его принимает безопасность на уровне документов, например {"term": {"region": "EU"}}, и в нём можно использовать подстановки плагина безопасности, например ${user.name}. Как и в других сервисах, пользователь получает фильтр первой применимой к нему политики. Фильтр строк может проверять только поля, которые пользователь может читать: безопасность на уровне полей скрывает остальные и от запроса.

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

    Пусть в кластере есть индексы logs-2026.10.26 и hr. Создайте в том же сервисе данных такие включённые политики:

    Ресурс Правило
    index=logs-*, field=* Разрешить группе analysts read
    index=logs-*, field=client_ip Запретить группе analysts read
    index=logs-* Разрешить пользователю logstash index и create_index
    index=hr, field=* Разрешить группе hr read
    index=hr, field=salary (маскирование) Показывать группе hr хеш с солью кластера
    index=hr (фильтр строк) Показывать пользователю emea-hr только документы {"term": {"region": "EMEA"}}
    cluster=* Разрешить группе ops cluster_monitor

    Когда агент применит новый снимок, участники analysts читают все поля журналов, кроме адреса клиента; logstash сразу пишет завтрашний logs-2026.10.27, создавая его первым документом; участники hr видят зарплаты в виде хеша; emea-hr видит только сотрудников своего региона; участники ops читают состояние и статистику кластера.

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

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

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

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