Руководство по установке#
В руководстве приведены инструкции по установке компонента Поисковый движок (SRHX) продукта Platform V Search (SRH).
Расшифровку основных понятий смотрите в перечне Термины и определения.
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента SRHX. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки* |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена** |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
ОС Альт 8 СП |
9 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован компонент Операционная система INST продукта Platform V SberLinux OS Server SLO, см. раздел «Платформенные зависимости» |
Среда для запуска модулей компонента |
Red Hat Enterprise Linux |
8.8.1 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован компонент Операционная система INST продукта Platform V SberLinux OS Server SLO, см. раздел «Платформенные зависимости» |
Среда для запуска модулей компонента |
||
Java-машина |
Да |
OpenJDK |
17.0.13.0.11-3 и выше до потери обратной совместимости (в рамках 17 версии) |
Рекомендовано |
Окружение для работы модулей компонента |
Программная платформа |
Да |
NodeJS |
18.20.4-1 и выше до потери обратной совместимости (в рамках 18 версии) |
Рекомендовано |
Среда выполнения JS |
Система управления доступом к информационным ресурсам |
Нет |
СУДИР |
любая актуальная версия |
Опционально. Правообладателем АО «СберТех» также рекомендован компонент IAM Proxy продукта Platform V IAM SE, см. раздел «Платформенные зависимости» |
Сервис управления доступом и информационными ресурсами |
Брокер сообщений |
Нет |
Kafka |
3.4.1 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован брокер сообщений, основанный на Kafka, – Platform V Corax, см. раздел «Платформенные зависимости» |
Событийный обмен сообщениями между модулями компонента |
Система создания, хранения и распространения секретов |
Нет |
HashiCorp Vault |
1.15.0 и выше |
Опционально |
Система, обеспечивающая безопасный и надежный способ создания, хранения и распространения секретов |
Secret Management System |
P-01.016.01 и выше до потери обратной совместимости |
Опционально |
Система управления аутентификационными данными сервисных аккаунтов или учетных записей |
||
Браузер |
Да |
Яндекс Браузер |
19.1.3.281 и выше |
Рекомендовано |
Браузер для входа в UI |
Примечание
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои базовые функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои базовые функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Платформенные зависимости#
Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V IAM SE |
IAM |
2.1.0 и выше до потери обратной совместимости |
AUTH IAM Proxy |
Нет |
Сервис управления доступом и информационными ресурсами |
СУДИР |
Platform V SberLinux OS Server |
SLO |
9.4.3 и выше |
INST Операционная система |
Да |
Операционная система на базе ядра Linux для запуска контейнеризированных приложений |
Red Hat Enterprise Linux, ОС Альт 8 СП |
Platform V Corax |
KFK |
10.340.0 и выше до потери обратной совместимости |
KFKA Corax |
Нет |
Программный брокер сообщений, представляющий собой распределенную, отказоустойчивую, реплицированную и легко масштабируемую систему передачи сообщений, рассчитанную на высокую пропускную способность. Данная инсталляция Platform V Corax не входит в состав компонента SRHX, принадлежит провайдеру аудита и необходима для передачи событий аудита. Если нет необходимости в передачи событий провайдеру аудита, то настройка взаимодействия с инсталляцией Platform V Corax не требуется. При необходимости передачи данных из Kafka (Platform V Corax) в компонент Поисковый движок (SRHX) используйте сервис DataPrepper, доступный в дистрибутиве компонента SRHX. |
Kafka |
Platform V Monitor |
OPM |
4.1 и выше |
COTE Единый коллектор телеметрии |
Нет |
Комплексная система агрегации событий журналирования, аудита и мониторинга |
- |
Примечание
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Аппаратные требования#
Расчет потребности в физическом оборудовании происходит на основе коэффициентов переподписки (отношение требуемого количества виртуального ресурса к реальному количеству физического ресурса), применяемых к требованиям по виртуальным ресурсам для каждого из стендов.
Для установки компонента требуется следующая конфигурация аппаратного обеспечения. Характеристики (CPU, RAM, диски) указаны на один элемент развертывания:
Стенд |
Разработка/Тестирование |
Приемочных испытаний |
Промышленный/Нагрузочное тестирование |
Горизонтальное масштабирование |
|---|---|---|---|---|
Platform V Search |
2 CPU/4 RAM/48 HDD |
2 CPU/4 RAM/48 HDD |
2 CPU/4 RAM/48 HDD |
Да |
В таблице выше представлены требования к минимальной конфигурации. Возможно как горизонтальное, так и вертикальное масштабирование для увеличения производительности.
При горизонтальном масштабировании продукта для подтверждения соответствия ожидаемым нефункциональным характеристикам, рекомендуется предварительно провести нагрузочное тестирование на целевой конфигурации конкретной инсталляции.
Требования к окружению для установки программного компонента#
Компонент SRHX не выдвигает требований к настройкам безопасности окружения.
Подготовка окружения#
Создание пользователей на сервере#
Создайте пользователей:
opensearch – для сервера opensearch;
opensearch-dashboards – для сервера opensearch-dashboards в том случае, если он будет устанавливаться на данном сервере.
Добавьте созданных пользователей в необходимые группы.
Ниже представлен пример, когда пользователи созданы с таким же паролем, как и их имя. Возможно изменить значения после
passwd -1на необходимые:sudo useradd -p $(openssl passwd -1 opensearch) opensearch sudo useradd -p $(openssl passwd -1 opensearch-dashboards) opensearch-dashboards sudo usermod -aG opensearch-dashboards opensearch sudo usermod -aG opensearch opensearch-dashboards
Добавление переменных для работы компонента SRHX#
Пропишите системные переменные в файл
.bashrc. Переменные пользователей, под которыми будет выполнен запуск компонента SRHX:OPENSEARCH_JAVA_HOME;OPENSEARCH_PATH_CONF;OSD_PATH_CONF.
Примените обновленный файл командой
source.Ниже описан алгоритм для пользователей opensearch и opensearch-dashboards:
sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch/.bashrc && source /home/opensearch/.bashrc" sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch-dashboards/.bashrc && source /home/opensearch-dashboards/.bashrc"OPENSEARCH_JAVA_HOME – путь к JAVA, который будет использовать компонент SRHX. При использовании JAVA вместе с дистрибутивом, заранее укажите путь, где будет находиться Java, после распаковки дистрибутива.
OPENSEARCH_PATH_CONF и OSD_PATH_CONF – пути до каталога с конфигурационными файлами для сервера opensearch-dashboards.
Изменение параметров компонента SRHX#
Установите значение системных параметров
vm.max_map_count = 262144иvm.swappiness=0в файле/etc/sysctl.conf.Примените обновленные значения командой
sysctl -p.Отключите использование swap:
sudo swapoff -a sudo sh -c "echo -e 'vm.swappiness=0\nvm.max_map_count=262144' >> /etc/sysctl.conf && sysctl -p"Внимание!
Обязательно проверьте значения в данном файле. Если они уже присутствуют, то их необходимо изменить вручную. После применения команды, указанной выше, произойдет дублирование параметров, если они уже существуют. Команда
swapoff -aработает только до перезагрузки.Проверьте текущее значение или примененные изменения командой:
cat /proc/sys/vm/max_map_count
Изменение лимитов пользователей#
Повысьте лимиты для пользователей, которые будут выполнять запуск компонента SRHX. Это позволит в дальнейшем запускать программы вручную и не получать ошибки от компонента SRHX.
Создайте файлы
/etc/security/limits.d/opensearch.confи/etc/security/limits.d/opensearch-dashboards.confи внесите в них данные, используя следующие команды:#для создания файлов /etc/security/limits.d/opensearch.conf , /etc/security/limits.d/opensearch-dashboards.conf и установки лимитов SRHX sudo sh -c "echo -e 'opensearch - nproc 65535\nopensearch - nofile 500000\nopensearch - memlock unlimited' >> /etc/security/limits.d/opensearch.conf" sudo sh -c "echo -e 'opensearch-dashboards - nproc 8096\nopensearch-dashboards - nofile 8096' >> /etc/security/limits.d/opensearch-dashboards.conf"После исполнения команд файлы должны иметь вид:
#для /etc/security/limits.d/opensearch.conf opensearch - nofile 500000 opensearch - nproc 65535 opensearch - memlock unlimited #для /etc/security/limits.d/opensearch-dashboards.conf opensearch-dashboards - nofile 8096 opensearch-dashboards - nproc 8096Проверьте, что параметр для пользователя задан верно и его значение равно установленному в предыдущем пункте. Проверка возможна только под пользователем, для которого применяли значение:
sudo su opensearch -c 'ulimit -u -n -l' sudo su opensearch-dashboards -c 'ulimit -u -n'Посмотрите полный список лимитов:
sudo su opensearch -c 'ulimit -a' sudo su opensearch-dashboards -c 'ulimit -a'
Создание необходимых директорий#
Создайте необходимые директории для распаковки дистрибутива:
sudo mkdir /usr/share/opensearch \
sudo mkdir -p /etc/opensearch/secman/certs \
sudo mkdir /etc/opensearch/usertoken \
sudo mkdir /var/log/opensearch \
sudo mkdir /var/lib/opensearch
#если на данную виртуальную машину устанавливается opensearch-dashboards
sudo mkdir /usr/share/opensearch-dashboards \
sudo mkdir -p /etc/opensearch-dashboards/secman/certs \
sudo mkdir /etc/opensearch-dashboards/usertoken \
sudo mkdir /var/log/opensearch-dashboards
Подробное описание директорий
Название |
Описание |
|---|---|
/usr/share/opensearch |
Директория, куда будет установлен компонент SRHX |
/etc/opensearch |
Директория, где будут размещены конфигурационные файлы компонента SRHX |
/var/log/opensearch |
Директория для хранения логов компонента SRHX, которую нужно указать в настройках |
/var/lib/opensearch |
Директория для данных кластера, которую нужно указать в настройках |
/etc/opensearch/secman/certs |
Директория, где будут храниться зашифрованные JKS-архивы с сертификатами, получаемые из Secret Management System |
/etc/opensearch/usertoken |
Директория для перекладки wrapped-токена компонента SRHX |
/usr/share/opensearch-dashboards |
Директория, куда будет установлен |
/etc/opensearch-dashboards |
Директория, где будут размещены конфигурационные файлы |
/var/log/opensearch-dashboards |
Директория для хранения логов |
/etc/opensearch-dashboards/secman/certs |
Директория, где будут храниться зашифрованные JKS-архивы с сертификатами Dashboards, получаемые из Secret Management System |
/etc/opensearch-dashboards/usertoken |
Директория для перекладки wrapped-токена Dashboards |
Создайте пустые файлы для переменных компонента SRHX, которые он считывает при запуске. Ссылаться на эти файлы нужно в Unit service:
sudo touch /etc/sysconfig/opensearch
#если на данную виртуальную машину устанавливается opensearch-dashboards
sudo touch /etc/sysconfig/opensearch-dashboards
Повышение привилегий пользователя#
Выдайте права пользователю opensearch на управление unit-сервисом, который будет создан далее.
Примечание
Это может понадобиться только для удобства работы под пользователем
opensearch.
sudo nano /etc/sudoers.d/opensearch
Добавьте:
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch.service, /bin/systemctl start opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch.service, /bin/systemctl restart opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch.service, /bin/systemctl stop opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch.service, /bin/systemctl enable opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch.service, /bin/systemctl disable opensearch
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl start opensearch-dashboards.service, /bin/systemctl start opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl restart opensearch-dashboards.service, /bin/systemctl restart opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl stop opensearch-dashboards.service, /bin/systemctl stop opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl enable opensearch-dashboards.service, /bin/systemctl enable opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl disable opensearch-dashboards.service, /bin/systemctl disable opensearch-dashboards
opensearch ALL=(ALL) NOPASSWD: /bin/systemctl daemon-reload
Установка java#
Установите последнюю доступную в репозитории Java 17. Удалите директорию /usr/share/opensearch/jdk, если существует. Выполните symlink из /etc/alternatives/jre в /usr/share/opensearch/jdk.
ln -s /etc/alternatives/jre /usr/share/opensearch/jdk
При установке компонента SRHX из дистрибутива будут установлены следующие java-permissions, которые необходимы для работы компонента:
Название |
Разрешение |
Описание |
|---|---|---|
|
|
Позволяет приложению использовать Reflect для доступа к закрытым полям и методам классов. Это может потребоваться для динамического вызова методов или изменения состояния объектов, даже если они недоступны через обычный интерфейс класса |
|
|
Предоставляет приложению полный доступ ко всем файлам на файловой системе. Приложение сможет читать, записывать и удалять любые файлы. Такой уровень доступа обычно требуется для приложений, работающих с большими объемами данных или требующих сохранения конфигурации и логов |
|
|
Разрешает приложению создавать сетевые сокеты и подключаться к удаленным серверам ( |
|
|
Дает право управлять MBeans (Managed Beans), которые являются компонентами JMX (Java Management Extensions). Она позволяет регистрировать новые MBeans, изменять их свойства и вызывать методы. Поле |
|
|
Разрешает регистрацию новых MBeans в среде выполнения. Без этой java-permission приложение не сможет зарегистрировать свои собственные управляемые компоненты в JMX |
|
|
Позволяет создать новый экземпляр сервера MBean. Сервер MBean необходим для регистрации и управления MBeans в приложении |
|
|
Управляет доступом к системным свойствам Java. Например, дает разрешение на запись файла безопасности |
|
Разрешения на изменение паролей хранилищ ключей и сертификатов SSL/TLS |
|
|
Разрешение на чтение настройки времени жизни кеша DNS-адресов для Platform V Search |
|
|
|
Дает различные права на выполнение операций уровня среды выполнения. Например, возможность устанавливать фабрики потоков |
|
Модификация существующих потоков |
|
|
Добавление обработчиков завершения работы приложения |
|
|
Получение загрузчика классов |
|
|
Управление группами потоков |
|
|
Установка контекстного загрузчика классов |
|
|
Доступ к объявленным членам классов (полям и методам) |
|
|
Доступ к классам внутри пакета |
|
|
Доступ к классам пакета |
|
|
Доступ к классам внутри пакета |
|
|
Доступ к классам внутри пакета |
|
|
Разрешает доступ к информации о пользователе, такой как имя пользователя, домашний каталог и другие параметры системы |
|
|
|
Разрешает получить значение свойства безопасности, связанного с библиотекой Bouncy Castle, которая используется для криптографических операций |
Данные java-permissions используются только для компонента SRHX и не меняют безопасность Java.
Необходимый софт на сервере#
Внимание!
Установить:
node.js – требуется для работы и запуска dashboards;
unzip (если не установлен по умолчанию в системе);
nano (или любой другой редактор текста).
Установка#
Ручная установка сервиса#
Перед началом установки убедитесь, что выполнена подготовка окружения.
Распаковка дистрибутива#
Внимание!
Название и версии дистрибутива будут различаться, внимательно проверьте и укажите необходимые.
Загрузите полученный дистрибутив на сервер, распакуйте его и перейдите в созданную директорию:
unzip srhx-1.6.0-*-distrib.zip -d /tmp && cd /tmp/srhx/Выполните следующие команды из директории, где находятся распакованные файлы.
[user@vm-name srhx]$ pwd /tmp/srhx/ [user@vm-name srhx]$ ls -l -rw-r--r-- 1 user root 327821009 Mar 5 20:54 dashboard-1.6.0.zip -rw-r--r-- 1 root root 2045982 Mar 5 20:47 index-management-dashboards-1.6.0.zip -rw-r--r-- 1 root root 756487 Mar 5 20:45 notifications-dashboards-1.6.0.zip -rw-r--r-- 1 root root 14842422 Mar 5 21:54 opensearch-index-management-1.6.0.zip -rw-r--r-- 1 root root 9198790 Mar 5 22:04 opensearch-job-scheduler-1.6.0.zip -rw-r--r-- 1 root root 4919467 Mar 5 21:59 opensearch-notifications-1.6.0.zip -rw-r--r-- 1 root root 10896680 Mar 5 21:59 opensearch-notifications-core-1.6.0.zip -rw-r--r-- 1 root root 101699727 Mar 5 21:40 opensearch-security-1.6.0.zip -rw-r--r-- 1 root root 44754603 Mar 5 22:11 opensearch-sql-1.6.0.zip -rw-r--r-- 1 root root 44754603 Mar 5 22:11 opensearch-knn-1.6.0.zip -rw-r--r-- 1 root root 44754603 Mar 5 22:11 opensearch-alerting-1.6.0.zip -rw-r--r-- 1 root root 150311 Mar 5 22:07 prometheus-exporter-1.6.0.zip -rw-r--r-- 1 root root 2700708 Mar 5 20:47 queryWorkbenchDashboards-1.6.0.zip -rw-r--r-- 1 root root 2700708 Mar 5 20:47 alertingDashboards-1.6.0.zip -rw-r--r-- 1 root root 7771 Mar 5 21:50 search-healthcheck-plugin-1.6.0.zip -rw-r--r-- 1 root root 232892620 Mar 5 20:29 search-server-1.6.0.zip -rw-r--r-- 1 root root 1170157 Mar 5 20:44 security-dashboards-1.6.0.zip -rw-r--r-- 1 root root 1170157 Mar 5 20:44 opensearch-custom-codecs-1.6.0.zip
Краткое описание распакованных компонентов
Название компонента |
Описание |
|---|---|
search-server-1.6.0 |
Дистрибутив компонента Поисковый движок SRHX |
opensearch-security-1.6.0 |
Плагин безопасности для компонента Поисковой движок SRHX, содержащий в себе плагин audit |
Дополнительные плагины для компонента Поисковый движок (SRHX) |
opensearch-index-management-1.6.0, |
dashboard-1.6.0 |
UI для компонента Поисковый движок (SRHX) |
security-dashboards-1.6.0 |
Плагин безопасности для Dashboards |
Дополнительные плагины для Dashboards |
index-management-dashboards-1.6.0, |
Установка компонента SRHX#
Выполните команды для распаковки дистрибутива:
sudo unzip -q ./search-server-*.zip -d /usr/share/opensearch/
sudo mv /usr/share/opensearch/config/* /etc/opensearch/ && sudo rm -rf /usr/share/opensearch/config/
sudo sh -c "echo -e 'path.data: /var/lib/opensearch\npath.logs: /var/log/opensearch' >> /etc/opensearch/opensearch.yml"
sudo mv opensearch-security-*.zip opensearch-index-management-*.zip opensearch-job-scheduler-*.zip opensearch-sql-*.zip opensearch-notifications-*.zip opensearch-notifications-core-*.zip prometheus-exporter-*.zip search-healthcheck-plugin-*.zip opensearch-knn-*.zip opensearch-alerting-*.zip opensearch-custom-codecs-*.zip /usr/share/opensearch/
Описание общего списка команд#
Распакуйте сервер в директорию
/usr/share/opensearch:sudo unzip -q ./search-server-1.6.0.zip -d /usr/share/opensearch/Переместите конфигурационные файлы из
/usr/share/opensearch/configв заранее созданную директорию, для конфигурационных файлов компонента Поискового движка SRHX –/etc/opensearchи удалите пустую директорию/usr/share/opensearch/config:sudo mv /usr/share/opensearch/config/* /etc/opensearch/ && sudo rm -rf /usr/share/opensearch/config/Укажите директории в конфигурационном файле OpenSearch, где он будет хранить данные кластера (path.data) и логи (path.logs). В примере ниже данные кластера будут храниться по пути
/var/lib/opensearch, а логи в/var/log/opensearch; если требуется изменить места хранения, укажите корректные директории в командах ниже.sudo sh -c "echo -e 'path.data: /var/lib/opensearch\npath.logs: /var/log/opensearch' >> /etc/opensearch/opensearch.yml"Переместите плагины в домашнюю директорию компонента Поисковый движок (SRHX):
sudo mv \ opensearch-sql-*.zip \ opensearch-security-*.zip \ opensearch-index-management-*.zip \ opensearch-job-scheduler-*.zip \ opensearch-notifications-*.zip \ opensearch-notifications-core-*.zip \ prometheus-exporter-*.zip \ opensearch-knn-*.zip \ opensearch-alerting-*.zip \ search-healthcheck-plugin-*.zip \ opensearch-custom-codecs-*.zip \ /usr/share/opensearch/
Установка Dashboards#
Примечание
Dashboards используется один на весь кластер. Не устанавливайте Dashboards на каждый сервер, где стоит компонент Поисковый движок SRHX.
Внимание!
Используйте команды ниже, только если требуется установить Dashboards на сервер, с которым работаете в данный момент.
Общий список выполняемых команд для распаковки дистрибутива:
sudo unzip -q ./dashboards-*.zip -d /usr/share/opensearch-dashboards/
sudo mv security-dashboards-*.zip queryWorkbenchDashboards-*.zip alertingDashboards-*.zip index-management-dashboards-*.zip notifications-dashboards-*.zip /usr/share/opensearch-dashboards/
sudo mv /usr/share/opensearch-dashboards/config/* /etc/opensearch-dashboards/ && sudo rm -rf /usr/share/opensearch-dashboards/config/
Описание общего списка команд выше#
Распакуйте сервер в директорию
/usr/share/opensearch-dashboards:sudo unzip -q ./dashboards-1.6.0.zip -d /usr/share/opensearch-dashboards/Переместите плагины для opensearch-dashboards к нему в домашнюю директорию:
sudo mv security-dashboards-1.6.0.zip queryWorkbenchDashboards-1.6.0.zip alertingDashboards-1.6.0.zip index-management-dashboards-1.6.0.zip notifications-dashboards-1.6.0.zip /usr/share/opensearch-dashboards/Переместите конфигурационные файлы
/usr/share/opensearch-dashboards/configв заранее созданную директорию для конфигурационных файлов компонента Поискового движка SRHX -/etc/opensearch-dashboardsи удалите пустую директорию/usr/share/opensearch-dashboards/config:sudo mv /usr/share/opensearch-dashboards/config/* /etc/opensearch-dashboards/ && sudo rm -rf /usr/share/opensearch-dashboards/config/
Установка прав. Наделение правами владельца#
После распаковки измените владельцев директорий и выставите необходимые права.
sudo chown -R opensearch:opensearch /usr/share/opensearch
sudo chown -R opensearch:opensearch /var/log/opensearch
sudo chown -R opensearch:opensearch /var/lib/opensearch
sudo chown -R opensearch:opensearch /etc/opensearch
sudo chown opensearch:opensearch /etc/sysconfig/opensearch
sudo chown -R opensearch-dashboards:opensearch-dashboards /usr/share/opensearch-dashboards
sudo chown -R opensearch-dashboards:opensearch-dashboards /var/log/opensearch-dashboards
sudo chown -R opensearch-dashboards:opensearch-dashboards /etc/opensearch-dashboards
sudo chown opensearch-dashboards:opensearch-dashboards /etc/sysconfig/opensearch-dashboards
sudo chmod 740 /var/lib/opensearch
sudo chmod 750 /usr/share/opensearch
sudo chmod 750 /usr/share/opensearch/logs
sudo chmod 750 -R /usr/share/opensearch/bin
sudo chmod 750 -R /usr/share/opensearch/plugins
sudo chmod 750 -R /var/log/opensearch
sudo chmod 750 /etc/opensearch
sudo chmod 0700 -R /etc/opensearch/secman
sudo chmod 770 -R /etc/opensearch/usertoken
sudo chmod 750 /usr/share/opensearch-dashboards
sudo chmod 750 -R /usr/share/opensearch-dashboards/bin
sudo chmod 750 -R /usr/share/opensearch-dashboards/plugins
sudo chmod 750 -R /var/log/opensearch-dashboards
sudo chmod 750 /etc/opensearch-dashboards
sudo chmod 0700 -R /etc/opensearch-dashboards/secman
sudo chmod 770 -R /etc/opensearch-dashboards/usertoken
Установка плагинов#
Команды по установке плагинов могут быть применены, только в том случае, если валидно заполнен файл opensearch.yml.
Название компонента |
Описание |
|---|---|
search-server-1.6.0 |
Дистрибутив компонента Поисковой движок SRHX |
opensearch-security-1.6.0 |
Плагин безопасности для компонента Поисковой движок SRHX |
Дополнительные плагины для компонента Поисковой движок SRHX |
opensearch-index-management-1.6.0 |
opensearch-job-scheduler-1.6.0 |
|
opensearch-notifications-1.6.0 |
|
opensearch-notifications-core-1.6.0 |
|
prometheus-exporter-1.6.0 |
|
search-healthcheck-plugin-1.6.0 |
|
opensearch-sql-1.6.0 |
|
opensearch-knn-1.6.0 |
|
opensearch-alerting-1.6.0 |
|
opensearch-custom-codecs-1.6.0 |
|
dashboard-1.6.0 |
UI для компонента Поисковый движок SRHX |
security-dashboards-1.6.0 |
Плагин безопасности для Dashboards |
Дополнительные плагины для Dashboards |
index-management-dashboards-1.6.0 |
queryWorkbenchDashboards-1.6.0 |
|
alertingDashboards-1.6.0 |
|
notifications-dashboards-1.6.0 |
Установка плагинов от пользователя opensearch на opensearch-server#
При распаковке дистрибутива все плагины перемещены в корневую директорию программы
/usr/share/opensearch/. Далее при установке плагинов будет использоваться указанный путь.Если плагины находятся в другом месте, укажите полный путь к них и проверьте, имеется ли доступ туда у пользователя opensearch.
Внимание!
Установку плагинов выполните от пользователя, под которым запускается компонент SRHX. Для компонента Поисковый движок (SRHX) используйте пользователя –
opensearch.(Не устанавливайте плагины из-под root!)Название и версии плагинов могу различаться, внимательно проверьте и укажите необходимые.
sudo su - opensearch -c 'yes | /usr/share/opensearch/bin/opensearch-plugin install \ file:///usr/share/opensearch/opensearch-knn-1.6.0.zip \ file:///usr/share/opensearch/opensearch-alerting-1.6.0.zip \ file:///usr/share/opensearch/opensearch-custom-codecs-1.6.0.zip \ file:///usr/share/opensearch/opensearch-security-1.6.0.zip \ file:///usr/share/opensearch/opensearch-job-scheduler-1.6.0.zip \ file:///usr/share/opensearch/opensearch-sql-1.6.0.zip \ file:///usr/share/opensearch/opensearch-index-management-1.6.0.zip \ file:///usr/share/opensearch/opensearch-notifications-core-1.6.0.zip \ file:///usr/share/opensearch/opensearch-notifications-1.6.0.zip \ file:///usr/share/opensearch/search-healthcheck-plugin-1.6.0.zip \ file:///usr/share/opensearch/prometheus-exporter-1.6.0.zip'Возможна установка плагинов по одному:
sudo su - opensearch -c 'yes | /usr/share/opensearch/bin/opensearch-plugin install file:///usr/share/opensearch/opensearch-security-1.6.0.zip'После установки плагина безопасности появятся скрипты:
securityadmin.sh;
hash.sh;
audit_config_migrater.sh,
которые находятся по пути
/usr/share/opensearch/plugins/opensearch-security/tools. Необходимо сделать их исполняемыми.sudo chmod +x \ /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \ /usr/share/opensearch/plugins/opensearch-security/tools/hash.sh \ /usr/share/opensearch/plugins/opensearch-security/tools/audit_config_migrater.shПосле установки плагина безопасности потребуется настройка шифрования. Для тестового запуска можно временно отключить плагин безопасности и проверить работоспособность программы. Для этого в файл
/etc/opensearch/opensearch.ymlдобавьте строкуplugins.security.disabled: true.sudo sh -c "echo -e 'plugins.security.disabled: true' >> /etc/opensearch/opensearch.yml"
Установка плагинов от пользователя opensearch-dashboards на opensearch-dashboards#
При распаковке дистрибутива все плагины перемещены в корневую директорию программы
usr/share/opensearch-dashboards/. Далее при установке плагинов будет использоваться указанный путь.Если плагины находятся в другом месте, укажите полный путь к ним и проверьте, имеется ли доступ туда у пользователя opensearch-dashboards.
Внимание!
Установку плагинов выполните от пользователя, под которым запускается компонент SRHX. Для компонента Поисковый движок (SRHX) используйте пользователя –
opensearch-dashboards.(Не устанавливайте плагины из-под root!)Название и версии плагинов могут различаться, внимательно проверьте и укажите необходимые.
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/security-dashboards-1.6.0.zip' sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/notifications-dashboards-1.6.0.zip' sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/index-management-dashboards-1.6.0.zip' sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/queryWorkbenchDashboards-1.6.0.zip' sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/alertingDashboards-1.6.0.zip'
Создание Unit services и их запуск#
Убедитесь, что все пути указаны корректно.
Создайте точки монтирования в RAM для Server:
sudo nano /etc/systemd/system/etc-opensearch-secman-secrets.mountДобавьте:
[Unit] Description=Mount /etc/opensearch/secman/secrets DefaultDependencies=no Before=shutdown.target reboot.target halt.target [Mount] What=tmpfs Where=/etc/opensearch/secman/secrets Type=tmpfs Options=mode=0700,uid=opensearch,gid=opensearch,size=100m ForceUnmount=true [Install] WantedBy=multi-user.target shutdown.target reboot.target halt.targetСоздайте точки монтирования в RAM для Dashboards:
sudo nano /etc/systemd/system/etc-opensearch\\x2ddashboards-secman-secrets.mountДобавьте:
[Unit] Description=Mount /etc/opensearch-dashboards/secman/secrets DefaultDependencies=no Before=shutdown.target reboot.target halt.target [Mount] What=tmpfs Where=/etc/opensearch-dashboards/secman/secrets Type=tmpfs Options=mode=0700,uid=opensearch-dashboards,gid=opensearch-dashboards,size=100m ForceUnmount=true [Install] WantedBy=multi-user.target shutdown.target reboot.target halt.targetСоздайте Unit services для Server:
sudo nano /etc/systemd/system/opensearch.serviceДобавьте:
[Unit] Description=Platform V Search Wants=network-online.target After=network-online.target etc-opensearch-secman-secrets.mount [Service] Type=forking RuntimeDirectory=opensearch PrivateTmp=true Environment=MAX_LOCKED_MEMORY=unlimited Environment=OPENSEARCH_PATH_CONF=/etc/opensearch EnvironmentFile=-/etc/sysconfig/opensearch Environment=PID_DIR=/var/run/opensearch Environment=KNN_LIB_DIR=/usr/share/opensearch/plugins/opensearch-knn/lib Environment=LD_LIBRARY_PATH=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib:/usr/share/opensearch/plugins/opensearch-knn/lib WorkingDirectory=/usr/share/opensearch ExecStartPre=/usr/share/opensearch/bin/init_script.sh ExecStart=/usr/share/opensearch/bin/opensearch -d -p ${PID_DIR}/opensearch.pid ExecStopPost=/usr/share/opensearch/bin/saving-secman-data.sh User=opensearch Group=opensearch StandardOutput=journal StandardError=inherit # Service restart - 5 times with an interval of 30 seconds for 200 seconds Restart=on-failure RestartSec=30 StartLimitInterval=200 StartLimitBurst=5 # Unlimited memory lock for service LimitMEMLOCK=infinity # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65535 # Specifies the maximum number of processes LimitNPROC=4096 # Specifies the maximum size of virtual memory LimitAS=infinity # Specifies the maximum file size LimitFSIZE=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=0 # SIGTERM signal is used to stop the Java process KillSignal=SIGTERM # Send the signal only to the JVM rather than its control group KillMode=process # Java process is never killed SendSIGKILL=no # When a JVM receives a SIGTERM signal it exits with code 143 SuccessExitStatus=143 # Allow a slow startup before the systemd notifier module kicks in to extend the timeout TimeoutStartSec=75 [Install] WantedBy=multi-user.targetСоздайте Unit services для Dashboards (Если на данном сервере установлен opensearch-dashboards):
sudo nano /etc/systemd/system/opensearch-dashboards.serviceДобавьте:
[Unit] Description=Platform V Search Dashboard Wants=network-online.target After=network-online.target etc-opensearch\\x2ddashboards-secman-secrets.mount [Service] Type=simple User=opensearch-dashboards Group=opensearch-dashboards Environment=OSD_PATH_CONF=/etc/opensearch-dashboards EnvironmentFile=-/etc/sysconfig/opensearch-dashboards WorkingDirectory=/usr/share/opensearch-dashboards/ ExecStartPre=/usr/share/opensearch-dashboards/bin/init_script.sh ExecStart=/bin/bash -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards &> /var/log/opensearch-dashboards/stdout.log' ExecStopPost=/usr/share/opensearch-dashboards/bin/saving-dashboards-secman-data.sh StandardOutput=journal StandardError=inherit # Service restart - 5 times with an interval of 30 seconds for 200 seconds Restart=on-failure RestartSec=30 StartLimitInterval=200 StartLimitBurst=5 [Install] WantedBy=multi-user.targetВыполните перезагрузку systemd:
sudo systemctl daemon-reloadДобавьте точку монтирования в автозагрузку и запустите:
sudo systemctl enable etc-opensearch-secman-secrets.mount --now sudo systemctl enable etc-opensearch\\x2ddashboards-secman-secrets.mount --nowДобавьте opensearch-services в автозагрузку и запустите:
sudo systemctl enable opensearch.service --nowДобавьте opensearch-dashboards-services в автозагрузку и запустите:
sudo systemctl enable opensearch-dashboards.service --now
Настройка компонента SRHX#
Описание файлов для настройки компонента SRHX
Файл |
Описание |
Расположение |
|---|---|---|
opensearch.yml |
Основные параметры для конфигурации Server |
Директория |
secman.yml |
Параметры для настройки прямой интеграции Server с Secman |
Директория |
audt-appl-properties.yml |
Параметры для настройки интеграции с Единым Аудитом |
Директория |
jvm.options |
Параметры для запуска JVM |
Директория |
log4j2.properties |
Параметры логирования для Server |
Директория |
opensearch_dashboards.yml |
Основные параметры для конфигурации Dashboards |
Директория |
secman_dashboards.yml |
Параметры для настройки прямой интеграции Dashboards с Secman |
Директория |
Настройка параметров в opensearch.yml#
Большинство настроек компонента SRHX описываются в файле /etc/opensearch/opensearch.yml и считываются при запуске.
Внимание!
Для настройки кластера подготовьте два сертификата с разными CN и подписанные одним УЦ. Один сертификат используется для межкластерного шифрования и шифрования HTTP-уровня. Второй, сертификат администратора, для доступа с правами администратора.
Сертификаты администратора — это обычные клиентские сертификаты с повышенными правами внутри компонента SRHX, для выполнения административных задач. Сертификат администратора необходим для изменения конфигурации плагина безопасности с помощью plugins/opensearch-security/tools/securityadmin.sh или REST API. Сертификаты администратора настраиваются в opensearch.yml путем указания их DN:
plugins.security.authcz.admin_dn:
- 'CN=<Common Name вашего сертификата администратора>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>'
Сертификаты должны быть в формате PKCS#8.
Замените все содержимое файла (удалите весь текст в существующем фале) /etc/opensearch/opensearch.yml.
### Шаблон безопасной конфигурации сервера.
### Подставьте необходимые значения там, где требуется.
### Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.
bootstrap.memory_lock: true
# Настройки хоста
network.host: <FQDN или IP текущего хоста>
http.port: `<Необходимо выбрать один любой порт выше 10000 (например:19200 )>`
transport.port: `<Необходимо выбрать один любой порт выше 10000 (например:19301)>`
# Настройки кластера
cluster.name: <ваше имя кластера>
node.name: <ваше имя текущей node>
node.roles:
- cluster_manager
- data
cluster.initial_cluster_manager_nodes:
- <node.name node 1 в кластере>
- <node.name node 2 в кластере>
- <node.name node 3 в кластере>
discovery.seed_hosts:
- <FQDN или IP node 1 в кластере>:<Значение указанное в параметре "transport.port">
- <FQDN или IP node 2 в кластере>:<Значение указанное в параметре "transport.port">
- <FQDN или IP node 3 в кластере>:<Значение указанное в параметре "transport.port">
# Настройки для хранения данных и логов текущей node
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
# Настройки плагина Security
#############################################################
## Не отключаемые параметры.
plugins.security.disabled: false
plugins.security.secman.enabled: true
plugins.security.ssl.http.enabled: true
plugins.security.ssl.transport.enabled: true
plugins.security.ssl.http.keystore_filepath: "/etc/opensearch/secman/certs/http.jks"
plugins.security.ssl.http.truststore_filepath: "/etc/opensearch/secman/certs/httptrust.jks"
plugins.security.ssl.http.enabled_protocols: ["TLSv1.2", "TLSv1.3"]
plugins.security.ssl.http.enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
plugins.security.ssl.http.clientauth_mode: REQUIRE
plugins.security.ssl.transport.keystore_filepath: "/etc/opensearch/secman/certs/transport.jks"
plugins.security.ssl.transport.truststore_filepath: "/etc/opensearch/secman/certs/transport.jks"
plugins.security.ssl.transport.enabled_protocols: ["TLSv1.2", "TLSv1.3"]
plugins.security.ssl.transport.enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
plugins.security.ssl.transport.enforce_hostname_verification: true
plugins.security.authcz.admin_dn:
- 'CN=<Common Name вашего сертификата администратора>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>'
plugins.security.nodes_dn:
- 'CN=<Common Name межкластерного сертификата/Параметр указанный в plugins.security.secman.transport.cn>, OU=<Подразделение организации>, O=<Наименование организации, выдавшей сертификат>, STREET=<Наименование улицы, на которой располагается организация>, L=<Населенный пункт, в котором расположена организация>, ST=<Наименование региона, в котором расположен сертификат>, C=<Наименование страны, в которой расположена организация>'
plugins.security.audit.type: ru.sbt.audit.PlatformVAuditSink
plugins.security.allow_default_init_securityindex: true
plugins.security.restapi.roles_enabled: "all_access"
plugins.security.system_indices:
enabled: true
indices: [".plugins-ml-model", ".plugins-ml-task", ".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opensearch-notifications-*", ".opensearch-notebooks", ".opensearch-observability", ".opendistro-asynchronous-search-response*", ".replication-metadata-store"]
plugins.security.cache.ttl_minutes: 120
## Не отключаемые параметры.
#############################################################
Описание всех параметров указанных в примере opensearch.yml приведены в таблице ниже.
Имя параметра |
Описание |
|---|---|
bootstrap.memory_lock: true |
Позволяет программе блокировать на сервере определенное количество оперативной памяти, которое указано в файле |
network.host: <FQDN или IP текущего хоста> |
Сетевой адрес текущего хоста, на котором будет доступен сервер |
http.port: ХХХХХ |
Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 9200 |
transport.port: ХХХХХ |
Порт, на котором будет доступен сервер на транспортном уровне. Используется для связи серверов между собой в кластере. По умолчанию 9300 |
cluster.name: <ваше имя кластера> |
Произвольное имя текущего кластера, в котором будет находится данная node |
node.name: <ваше имя текущей node> |
Произвольное имя текущего сервера в кластере |
node.roles: |
Роли данной node в кластере. |
cluster.initial_cluster_manager_nodes: |
Перечисление всех заданных ранее имен node (node.name) в кластере |
discovery.seed_hosts: |
Перечисление адресов и портов всех node, которые будут находится в кластере |
path.data: /var/lib/opensearch |
Директория для хранения данных node |
path.logs: /var/log/opensearch |
Директория для хранения логов node |
plugins.security.disabled: false |
Принудительное включение плагина безопасности |
plugins.security.ssl.http.enabled: true |
Включение шифрования HTTP-уровня |
plugins.security.ssl.http.keystore_filepath: «/etc/opensearch/secman/certs/http.jks» |
Путь к месту хранения сертификатов для HTTP-уровня |
plugins.security.ssl.http.truststore_filepath: «/etc/opensearch/secman/certs/httptrust.jks» |
Путь к месту хранения цепочки сертификатов HTTP-уровня |
plugins.security.ssl.http.enabled_protocols: |
Позволяет использовать только указанные методы шифрования для HTTP-уровня |
plugins.security.ssl.http.enabled_ciphers: |
Позволяет использовать только указанные шифры для HTTP-уровня |
plugins.security.ssl.http.clientauth_mode: REQUIRE |
Режим проверки сертификатов при запросах к серверу, запросы без сертификатов блокируются. По умолчанию OPTIONAL – ожидать сертификаты, но не требовать их |
plugins.security.ssl.transport.enabled: true |
Включение шифрования транспортного уровня |
plugins.security.ssl.transport.keystore_filepath: «/etc/opensearch/secman/certs/transport.jks» |
Путь к месту хранения сертификатов для транспортного уровня |
plugins.security.ssl.transport.truststore_filepath: «/etc/opensearch/secman/certs/transport.jks» |
Путь к месту хранения цепочки сертификатов транспортного уровня |
plugins.security.ssl.transport.extended_key_usage_enabled:false |
Параметр, отвечающий за работу отдельно с клиентским и серверным сертификатом на транспортном уровне взаимодействия |
plugins.security.ssl.transport.enabled_protocols: |
Позволяет использовать только указанные методы шифрования для транспортного уровня |
plugins.security.ssl.transport.enabled_ciphers: |
Позволяет использовать только указанные шифры для транспортного уровня |
plugins.security.ssl.transport.enforce_hostname_verification: true |
Проверка имени хоста на транспортном уровне. Необязательный. По умолчанию true |
plugins.security.authcz.admin_dn |
Здесь необходимо указать полный DN сертификата, который будет использоваться для доступа с правами полного администратора. В основном используется для применения изменений методов аутентификации/авторизации и ролевой модели, указывается при вызове скрипта securityadmin.sh. Должен состоять из CN, OU, O, STREET, L, ST, C. |
plugins.security.nodes_dn |
Здесь необходимо указать полный DN сертификата, который будет использоваться для межкластерного шифрования между node и доступа к API сервера. Все REST запросы необходимо осуществлять с данными сертификатами. Должен состоять из CN, OU, O, STREET, L, ST, C. |
plugins.security.audit.type: internal_opensearch |
Метод хранения данных аудита. |
plugins.security.audit.config.disabled_rest_categories: NONE |
Принудительно включить запись всех событий HTTP-уровня в журнал аудита |
plugins.security.audit.config.disabled_transport_categories: NONE |
Принудительно включить запись всех событий транспортного уровня в журнал аудита |
plugins.security.allow_default_init_securityindex: true |
Позволяет инициализировать системные индексы, если они не были созданы |
plugins.security.restapi.roles_enabled: |
Имя роли, которая может осуществлять системные вызовы через REST-запросы к API плагина безопасности. |
plugins.security.system_indices.enabled: true |
Включить защиту системных индексов указанных в следующем параметре |
plugins.security.system_indices.indices: |
Доступ к данным индексам будет ограничен |
plugins.security.cache.ttl_minutes: 120 |
Время хранения данных кеша пользователей в минутах. При использовании внешних систем аутентификации/авторизации необходимо установить |
plugins.security.secman.enabled: true |
Включение интеграции с Secret Management System |
Настройка JVM Heap Size параметров#
Для быстрой и стабильной работы рекомендуется выделять компоненту SRHX 50 процентов оперативной памяти сервера.
Для этого:
Unit services компонента SRHX в Linux должен содержать параметры:
Environment=MAX_LOCKED_MEMORY=unlimitedиLimitMEMLOCK=infinity(прописывается при создании unit service). В лимитах для пользователяopensearch– должен быть установлен параметрopensearch - memlock unlimited(описано в разделе Изменение лимитов пользователей данного документа).В
opensearch.ymlдолжен быть прописан параметрbootstrap.memory_lock:со значениемtrue.
Укажите нужное значение в параметрах Java. Для этого откройте файл /etc/opensearch/jvm.options, найдите параметры -Xms и -Xmx и укажите значение в гигабайтах, равное половине оперативной памяти текущего сервера, но не более 32766 Мб.
Узнайте размер оперативной памяти на текущем сервере с помощью команды:
free -g | grep Mem: | awk '{print $2}' 23Отредактируйте параметры в файле с настройками JVM и укажите округленные значения, равные половине числа, полученного в предыдущей команде.
sudo nano /etc/opensearch/jvm.options # JVM configuration ################################################################ ## IMPORTANT: JVM heap size ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms11g -Xmx11g
Добавление параметров в opensearch-keystore#
Внимание!
Выполнение данного пункта для компонента Поисковый движок (SRHX) требуется для обеспечения работы при недоступности Secret Management System. Обратите внимание, что Dashboards имеет свой собственный Keystore –
opensearch-dashboards-keystore. Его настройка отличается и описана в пункте Добавление параметров в opensearch-dashboards-keystore.
Создайте keystore с помощью параметра create.
#создайте хранилище, если оно еще не существует
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore create'
Внимание!
opensearch-keystore будет создан для пользователя linux, от которого будут запускаться команды. Не выполняйте команды из под
root! Используйте для этого пользователяopensearch.
Opensearch-keystore используется для сохранения сертификатов на случай недоступности Secret Management System и для сокрытия чувствительных данных (например логин/пароль) в компоненте Поисковый движок (SRHX). Хранение логина и пароля выполняется в opensearch.yml.
Список часто используемых параметров
Параметр |
Описание |
|---|---|
help |
Список доступных команд |
create |
Создание нового keystore хранилища (дополнительный параметр -p позволит создать keystore, защищенный паролем) |
add |
Добавление нового параметра в созданный keystore |
list |
Просмотр параметров, которые хранятся в данный момент в keystore |
remove |
Удалить существующий параметр из текущего keystore |
Настройка параметров в opensearch_dashboards.yml#
Большинство настроек компонента SRHX описываются в файле /etc/opensearch-dashboards/opensearch_dashboards.yml и считываются при запуске компонента SRHX.
Внимание!
Должны быть подготовлены сертификаты для межкластерного шифрования и шифрования HTTP-уровня. Здесь используются те же сертификаты, которые были установлены ранее.
Замените все содержимое файла (удалите весь текст в существующем файле) /etc/opensearch-dashboards/opensearch_dashboards.yml текстом указанным в готовом образце opensearch_dashboards.yml, изменив значения на необходимые.
Готовый образец opensearch_dashboards.yml
### Шаблон безопасной конфигурации dashboards.
### Подставьте необходимые значения там, где требуется.
### Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.
# Настройки для самого dashboards
server.host: "<FQDN или IP текущего хоста>"
server.port: 15601
server.ssl.enabled: true
server.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/http.p12
server.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12
# Настройки для соединения dashboards с сервером OpenSearch
opensearch.hosts:
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 2 в кластере>:ХХХХХ
- https://<FQDN или IP node 3 в кластере>:ХХХХХ
opensearch.ssl.alwaysPresentCertificate: true
opensearch.ssl.verificationMode: full
opensearch.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/transport.p12
opensearch.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12
opensearch.requestHeadersAllowlist:
- authorization
- securitytenant
# Настройки логирования
logging.dest: /var/log/opensearch-dashboards/opensearch-dashboards.log
logging.json: false
logging.verbose: true
# Настройки плагина Security
opensearch_security.auth.type: "basicauth"
opensearch_security.cookie.secure: true
opensearch_security.session.keepalive: true
# Указанны значения в миллисекундах
opensearch_security.cookie.ttl: 86400000
opensearch_security.session.ttl: 1200000
i18n.locale: "ru"
secman.enabled: true
#Настройка метрик в Dashboards
prometheus.metrics.job_name: opensearch_dashboards
prometheus.metrics.path: _prometheus/metrics
Описание всех параметров указанных в примере opensearch_dashboards.yml представлено в таблице ниже.
Имя параметра |
Описание |
|---|---|
server.host: <FQDN или IP текущего хоста> |
Сетевой адрес текущего хоста, на котором будет доступен сервер |
server.port: 15601 |
Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 5601 |
server.ssl.enabled: true |
Включить HTTP шифрование |
server.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/http.p12 |
Путь к сертификату для HTTP-уровня. |
server.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12 |
Путь к цепочке сертификата HTTP-уровня. |
opensearch.hosts: |
Перечисление адресов и портов всех серверов в кластере. Порт по умолчанию 9200. Вместо ХХХХХ необходимо указать нужный порт |
opensearch.requestHeadersAllowlist: |
Перечисление заголовков, которые сервер будет считывать, при отправке запросов к нему |
opensearch.ssl.alwaysPresentCertificate: true |
Всегда передавать сертификат при запросах к компоненту SRHX |
opensearch.ssl.verificationMode: full |
Тип проверки при аутентификации соединения с сервером. |
opensearch.ssl.keystore.path: /etc/opensearch-dashboards/secman/certs/transport.p12 |
Путь к сертификату для транспортного уровня. |
opensearch.ssl.truststore.path: /etc/opensearch-dashboards/secman/certs/trust.p12 |
Путь к цепочке сертификата транспортного уровня. |
opensearch_security.auth.type: |
Тип аутентификации. |
opensearch_security.cookie.secure: true |
Шифрование cookies. Необходимо при включении HTTPs |
opensearch_security.session.keepalive: true |
Поддерживать сессию, пока действуют cookies. |
#specified values are in milliseconds |
Время хранения cookies в миллисекундах. Может быть равно 0 для сессии cookie. По умолчанию – 1 час |
opensearch_security.session.ttl: 1200000 |
Время жизни установленной сессии с пользователем. Если установлено, пользователю будет предложено снова войти в систему через заданное время, независимо от файла cookie. По умолчанию: 1 час |
i18n.locale: ru |
Выбранный язык локализации. Необязательный параметр. По умолчанию - en |
secman.enabled: false |
Параметр, отвечающий за активацию интеграции с Secret Management System. Необязательный параметр. По умолчанию - false |
prometheus.metrics.job_name: opensearch_dashboards |
Параметр обозначающий префикс для метрик, котрые откидывает сервис dashboards. В примере метрики будут с префиксом opensearch_dashboards |
prometheus.metrics.path: _prometheus/metrics |
Путь по умолчанию, может быть параметризирован. |
opensearch_security.auth.anonymous_auth_enabled: false |
Включает или отключает анонимную аутентификацию. Анонимный доступ должен быть запрещён! |
Добавление параметров в opensearch-dashboards-keystore#
Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует opensearch-dashboards-keystore.
Внимание!
Выполнение данного пункта для Dashboards требуется для обеспечения работы при недоступности Secret Management System.
Для работы с opensearch-dashboards-keystore запустите /usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore <параметр> (--help, чтобы увидеть все доступные параметры).
Список часто используемых параметров
Параметр |
Описание |
|---|---|
create |
Создание нового keystore хранилища (дополнительный параметр -p позволит создать keystore, защищенный паролем) |
add |
Добавление нового параметра в созданный keystore |
list |
Просмотр параметров, которые хранятся в данный момент в keystore |
remove |
Удалить существующий параметр из текущего keystore |
Для продолжения установки добавьте в opensearch-dashboards-keystore логин и пароль для соединения с компонентом SRHX, так же пароли от сертификатов. Это будут параметры:
Параметр |
Описание |
|---|---|
opensearch.username |
Логин пользователя. Должен присутствовать в |
opensearch.password |
Пароль от логина, указанного в предыдущем пункте. Должен присутствовать в |
Внимание!
Обязательно требуется добавление параметров
opensearch.usernameиopensearch.password. В данных параметрах указываются значения, под которыми dashboards будет авторизоваться на сервере. Поскольку на сервере включен плагин Security, обязательно требуется аутентификация/авторизация.
Создайте keystore с помощью параметра create. Добавьте необходимые параметры при помощи параметра add.
Внимание!
opensearch-dashboards-keystoreбудет создан для пользователя, который будет запускать команды. Не выполняйте команды из-подroot! Используйте для этого пользователяopensearch-dashboards.
#Создайте хранилище, если оно еще не существует
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore create'
#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.username'
#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.password'
На этом настройка сервера может быть завершена.
Для первого запуска можно использовать ролевую модель по умолчанию с пользователями из internal_users.yml.
Настройка методов аутентификации/авторизации и ролевой модели#
В разделе приведена информация для ознакомления с возможностями ролевой модели компонента SRHX.
Ролевая модель настраивается в файлах
internal_users.yml,roles.yml,roles_mapping.yml, которые находятся в/etc/opensearch/opensearch-security/.Методы аутентификации настраиваются в файле
config.yml, который находится в/etc/opensearch/opensearch-security/.
При старте компонента SRHX в первый раз подгружаются данные из этих файлов. Поэтому на сервере уже будут стандартные пользователи из этих файлов и метод аутентификации basicauth, который указан в config.yml. Редактирование файлов выполняется при необходимости.
Получение файлов текущей конфигурации ролевой модели кластера#
Запустите скрипт securityadmin.sh, который находится по пути /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh, где my-backup-directory - директория, в которую будут скопированы все текущие конфигурационные файлы кластера.
sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
-backup <my-backup-directory> \
-cert <Путь к сертификату администратора> \
-key <Путь к приватному ключу для сертификата администратора> \
-keypass <Пароль от приватного ключа для сертификата администратора>
Создание шифрованного пароля для пользователя#
Все пароли в internal_users.yml хранятся в зашифрованном виде. Для шифрования пароля есть скрипт hash.sh.
Запустите скрипт от пользователя
opensearch.sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh'После загрузки скрипта он будет ожидать ввода пароля, который будет зашифрован. В примере используйте пароль
der_parol.************************************************************************** ** This tool will be deprecated in the next major release of OpenSearch ** ************************************************************************** [Password:]После ввода данных и нажатия Enter, получите введенный пароль в зашифрованном виде.
$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW
Создание пользователя#
В файл
internal_users.ymlдобавьте блок нового пользователя:sudo nano /etc/opensearch/opensearch-security/internal_users.ymlДобавьте, подставив необходимые данные:
example_user: hash: "$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW" reserved: false description: "Demo pvs_admin user, using internal role mapping`
Параметр |
Описание |
|---|---|
example_user |
Наименование логина учетной записи |
hash |
Хэш пароля учетной записи. Вставьте сюда значение, созданное на шаге 3 раздела Создание шифрованного пароля для пользователя |
reserved |
Параметр блокирует учетную запись на изменение через UI Dashboards и через REST API. Не обязательный. По умолчанию - |
description |
Описание созданного пользователя. Не обязательный |
Создание роли#
Создайте роль с возможностями администрирования в файле
roles.yml.sudo nano /etc/opensearch/opensearch-security/roles.ymlДобавьте:
example_role: reserved: false hidden: false cluster_permissions: - 'cluster:admin/*' - 'cluster:monitor/*' index_permissions: - index_patterns: - '*' allowed_actions: - 'indices:admin/*' - 'indices:data/*' - 'indices:monitor/*'
Параметр |
Описание |
|---|---|
example_role |
Наименование создаваемой роли |
reserved |
Параметр блокирует роль на изменение через UI Dashboards и через REST API. Не обязательное. По умолчанию - |
hidden |
Параметр скрывает возможность увидеть роль через UI Dashboards или через REST API. Не обязательное. По умолчанию - |
cluster_permissions |
Перечень возможных разрешений на действия с кластером |
index_patterns |
Описание паттернов на названия индексов, к которым у роли будет доступ. Запись |
allowed_actions |
Перечень возможных разрешений на действия с индексами |
Связывание созданной роли и пользователя#
Присвойте роль созданному пользователю в файле
roles_mapping.yml.sudo nano /etc/opensearch/opensearch-security/roles_mapping.ymlДобавьте:
example_role: reserved: false users: - "example_user" description: "Maximum access to everything"
Параметр |
Описание |
|---|---|
example_role |
Наименование роли, с которой необходимо связать пользователя |
reserved |
Параметр блокирует запись о связи на изменение через UI Dashboards и через REST API. Не обязательное. По умолчанию - |
hidden |
Параметр скрывает возможность увидеть запись о связи роли и пользователя через UI Dashboards или через REST API. Не обязательное. По умолчанию - |
users |
Перечень наименований учетных записей, которым будет назначена роль |
backend_roles |
Перечень backend_roles, c которыми будет ассоцироваться роль |
description |
Описание созданной связи. Не обязательный |
Применение данных к кластеру#
Внимание!
После применения новой конфигурации к кластеру, предыдущие параметры будут перезаписаны без возможности восстановления. Для сохранения текущих параметров используйте опцию
-backup.
После редактирования данных в файлах примените их к кластеру.
Запустите скрипт securityadmin.sh, который находится по пути /usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh.
При запуске этого скрипта укажите дополнительные параметры.
Параметры |
Описание |
|---|---|
-backup my-backup-directory |
Необязательно. Создание копии текущих настроек сервера |
-icl |
Игнорировать имя кластера (не использовать вместе с параметром -cn) |
-nhnv |
Отключить проверку имени host’a |
-cd |
Путь к конфигурационным файлам opensearch-security |
-h |
FQDN или IP-адрес хоста для подключения |
-p |
API-Порт подключения |
-cacert |
Путь к корневому сертификату |
-cert |
Путь к сертификату администратора |
-key |
Путь к приватному ключу для сертификата администратора |
-keypass |
Пароль от приватного ключа для сертификата администратора |
Параметры для работы с хранилищем сертификатов p12 или jks. Нельзя использовать вместе с параметрами для обычных сертификатов.
Параметры |
Описание |
|---|---|
-ks |
Путь к keystore с сертификатом администратора |
-kspass |
Пароль от keystore с сертификатом администратора |
-ts |
Путь к keystore с корневым сертификатом администратора |
-tspass |
Пароль от keystore с корневым сертификатом администратора |
Пример запуска скрипта от пользователя opensearch:
sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
-icl \
-nhnv \
-cd /etc/opensearch/opensearch-security/ \
-h "<адрес вашего хоста, где запущен компонент SRHX>" \
-p "ХХХХХ" \
-cacert "/etc/opensearch/certs/<имя вашего корневого сертификата>" \
-cert "/etc/opensearch/certs/<имя вашего сертификата администратора>" \
-key "/etc/opensearch/certs/<имя вашего приватного ключа для сертификата администратора>" \
-keypass "<пароль от приватного ключа для сертификата администратора>"'
Пример вывода успешного выполнения скрипта. В конце должна быть надпись Done with success
Security Admin v7
Will connect to <адрес вашего хоста, где запущен SRHX>:ХХХХХ ... done
Connected as "CN=<CN вашего админ-сертификата>,O=<имя вашего УЦ>"
OpenSearch Version: 1.6.0
Contacting opensearch cluster 'opensearch' and wait for YELLOW clusterstate ...
Clustername: <название вашего кластера>
Clusterstate: GREEN
Number of nodes: 3
Number of data nodes: 3
.opendistro_security index already exists, so we do not need to create one.
Populate config from /etc/opensearch/opensearch-security/
Will update '/config' with /etc/opensearch/opensearch-security/config.yml
SUCC: Configuration for 'config' created or updated
Will update '/roles' with /etc/opensearch/opensearch-security/roles.yml
SUCC: Configuration for 'roles' created or updated
Will update '/rolesmapping' with /etc/opensearch/opensearch-security/roles_mapping.yml
SUCC: Configuration for 'rolesmapping' created or updated
Will update '/internalusers' with /etc/opensearch/opensearch-security/internal_users.yml
SUCC: Configuration for 'internalusers' created or updated
Will update '/actiongroups' with /etc/opensearch/opensearch-security/action_groups.yml
SUCC: Configuration for 'actiongroups' created or updated
Will update '/tenants' with /etc/opensearch/opensearch-security/tenants.yml
SUCC: Configuration for 'tenants' created or updated
Will update '/nodesdn' with /etc/opensearch/opensearch-security/nodes_dn.yml
SUCC: Configuration for 'nodesdn' created or updated
Will update '/whitelist' with /etc/opensearch/opensearch-security/whitelist.yml
SUCC: Configuration for 'whitelist' created or updated
Will update '/audit' with /etc/opensearch/opensearch-security/audit.yml
SUCC: Configuration for 'audit' created or updated
Will update '/allowlist' with /etc/opensearch/opensearch-security/allowlist.yml
SUCC: Configuration for 'allowlist' created or updated
SUCC: Expected 10 config types for node {"updated_config_types":["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"],"updated_config_size":10,"message":null} is 10 (["allowlist","tenants","rolesmapping","nodesdn","audit","roles","whitelist","internalusers","actiongroups","config"]) due to: null
Done with success
Руководство по установке DataPrepper на VM Ware#
Данное руководство описывает порядок установки ПО DataPrepper на VM Ware. Руководство составлено для версии DataPrepper 1.6.0.
Создание пользователей на сервере и их настройка#
Создайте следующих пользователей:
dataprepper – пользователь, от которого будет запускаться ПО;
dpadmin - пользователь, под которым будет работать потребитель. Под данным пользователем можно будет читать и изменять конфигурацию DataPrepper, смотреть DataPrepper логи, перезапускать DataPrepper службу;
dpdevops - пользователь, под которым будет работать система автоматизации. Под данным пользователем можно будет читать и изменять конфигурацию DataPrepper, смотреть DataPrepper логи, перезапускать DataPrepper службу;
dplogs – пользователь для просмотра логов dataprepper.
Для этого выполните следующие команды:
Внимание!
В командах ниже пользователи создаются с паролем, равным имени пользователя. Значения в команде после «openssl passwd -1 ваш_пароль» необходимо заменить на свои.
# Создание пользователей
sudo useradd --system dataprepper -U
sudo useradd -p $(openssl passwd -1 dpadmin) -m dpadmin
sudo useradd -p $(openssl passwd -1 dpdevops) -m dpdevops
sudo useradd -p $(openssl passwd -1 dplogs) -m dplogs
# Добавление пользователей в группу dataprepper
sudo usermod -aG dataprepper dpadmin
sudo usermod -aG dataprepper dpdevops
# Добавление пользователей в группу dpdevops
sudo usermod -aG dpdevops dataprepper
sudo usermod -aG dpdevops dpadmin
# Добавление пользователей в группу dpadmin
sudo usermod -aG dpadmin dataprepper
sudo usermod -aG dpadmin dpdevops
#Добавляем пользователя оператора и технического пользователя в группу dplogs, чтобы иметь возможность читать логи dataprepper под этими пользователями
sudo usermod -aG dplogs dpadmin
sudo usermod -aG dplogs dpdevops
Далее необходимо выдать права на рестарт systemd сервиса dataprepper для пользователей pdadmin и dpdevops. Для этого выполните следующие команды:
sudo su -c "cat > /etc/sudoers.d/dpadmin<<EOF
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl start dataprepper.service, /bin/systemctl start dataprepper
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl restart dataprepper.service, /bin/systemctl restart dataprepper
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl stop dataprepper.service, /bin/systemctl stop dataprepper
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl enable dataprepper.service, /bin/systemctl enable dataprepper
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl disable dataprepper.service, /bin/systemctl disable dataprepper
dpadmin ALL=(ALL) NOPASSWD: /bin/systemctl reset-failed dataprepper.service, /bin/systemctl reset-failed dataprepper
EOF
"
sudo su -c "cat > /etc/sudoers.d/dpdevops<<EOF
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl start dataprepper.service, /bin/systemctl start dataprepper
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl restart dataprepper.service, /bin/systemctl restart dataprepper
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl stop dataprepper.service, /bin/systemctl stop dataprepper
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl enable dataprepper.service, /bin/systemctl enable dataprepper
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl disable dataprepper.service, /bin/systemctl disable dataprepper
dpdevops ALL=(ALL) NOPASSWD: /bin/systemctl reset-failed dataprepper.service, /bin/systemctl reset-failed dataprepper
EOF"
Также необходимо добавить служебным пользователям переменные окружения с путями к конфигурациям. Для этого выполните следующие команды:
sudo sh -c "echo -e 'export DATAPREPPER_HOME=/usr/share/dataprepper\nexport DATA_PREPPER_CONFIG_DIR=/etc/dataprepper\n' >> /home/dpadmin/.bashrc"
sudo sh -c "echo -e 'export DATAPREPPER_HOME=/usr/share/dataprepper\nexport DATA_PREPPER_CONFIG_DIR=/etc/dataprepper\n' >> /home/dpdevops/.bashrc"
Размещение файлов DataPrepper наVMWare#
DataPrepper распространяется в виде tar архива, внутри которого находится директория, имя которой такое же, как имя архива без расширения.
Перед распаковкой архива необходимо создать директории, куда будет распаковано содержимое архива:
sudo mkdir -p /usr/share/dataprepper
sudo mkdir -p /etc/dataprepper/secman/certs
sudo mkdir -p /var/log/dataprepper
sudo mkdir -p /etc/dataprepper/usertoken/
Затем нужно распаковать архив:
#Извлекаем архив data-prepper из общей выдачи
sudo unzip -j srhx-*-distrib.zip srhx/data-prepper-*-linux-x64.tar.gz -d .
#Извлекаем папку с контентом data-prepper
sudo tar --strip-components=1 -C /usr/share/dataprepper/ -xzf data-prepper-*-linux-x64.tar.gz data-prepper-*-linux-x64
Также необходимо разграничить доступ к файлам DataPrepper, файлам конфигурации и файлам логов между пользователями. Для этого выполните следующий набор команд:
# Переносим шаблоны конфигурации в папку с конфигурацией dataprepper
sudo bash -c "mv /usr/share/dataprepper/config/* /etc/dataprepper/ && rm -rf /usr/share/dataprepper/config/"
#Выдаем доступ к новой директории для сервисного пользователя и группы
sudo chown dataprepper:dataprepper -R /usr/share/dataprepper/
#Ограничиваем доступ к расположению файлов конфигурации и логов
sudo chown dataprepper:dataprepper -R /etc/dataprepper/
sudo chown dataprepper:dplogs -R /var/log/dataprepper/
sudo chmod g+s /var/log/dataprepper
# Настраиваем права доступа
sudo chmod 400 -R /usr/share/dataprepper/
sudo chmod 500 -R /usr/share/dataprepper/bin/
sudo chmod 500 -R /usr/share/dataprepper/lib/
sudo chmod -R +X /usr/share/dataprepper/
sudo chmod 660 -R /etc/dataprepper/
sudo chmod +X -R /etc/dataprepper/
sudo chmod 440 /etc/dataprepper/params_for_validate.yml
# Учтите, что файл токена будет создаваться с со списком permission согласно настроенной umask в системе
sudo chmod 700 -R /etc/dataprepper/secman
Внимание!
Рекомендуется сделать mount раздела выделенного диска в директорию
/var/log/dataprepper.
Создание dataprepper systemd service#
Необходимо создать systemd службу для управления dataprepper, для этого воспользуйтесь следующей командой:
sudo su -c "cat > /etc/systemd/system/dataprepper.service <<EOF
[Unit]
Description=PVS DataPrepper
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
RuntimeDirectory=dataprepper
PrivateTmp=true
Environment=PID_DIR=/var/run/dataprepper
Environment=DATA_PREPPER_CONFIG_DIR=/etc/dataprepper
WorkingDirectory=/usr/share/dataprepper
ExecStart=/usr/share/dataprepper/bin/data-prepper /etc/dataprepper/pipelines/ /etc/dataprepper/data-prepper-config.yaml
ExecStartPre=/usr/share/dataprepper/bin/init_script.sh
User=dataprepper
Group=dataprepper
StandardOutput=journal
StandardError=inherit
# Service restart - 5 times with an interval of 30 seconds for 200 seconds
Restart=on-failure
RestartSec=30
StartLimitInterval=200
StartLimitBurst=5
# Unlimited memory lock for service
LimitMEMLOCK=infinity
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
EOF
"
Заполнение конфигурационных файлов#
Для конфигурации DataPrepper использует следующие файлы, которые находятся в /etc/dataprepper:
Файл |
Назначение параметров |
Требует изменений |
Доступ к редактированию |
|---|---|---|---|
pipeline.yaml |
Конфигурирует последовательности шагов обработки данных, которая начинается с источника данных, проходит через различные этапы преобразования и фильтрации, а затем завершается отправкой обработанных данных в одно или несколько мест назначения |
Да |
dataprepper, dpadmin, dpdevops |
data-prepper-config.yaml |
Конфигурирует DataPrepper API сервер |
Да |
dataprepper, dpadmin, dpdevops |
params_for_validate.yml |
Определяет параметры в pipeline.yaml и data-prepper-config.yaml без которых DataPrepper не будет запускаться |
Нет |
- |
log4j2-rolling.properties |
Конфигурирует параметры создания и ротации логов при помощи log4j2 |
Нет |
dataprepper, dpadmin, dpdevops |
Внимание!
В данном руководстве приведен пример для конфигурации пайплайна с Kafka в качестве source и opensearch в качестве sink.
Конфигурация сервера#
Для конфигурации сервера в файле /etc/dataprepper/data-prepper-config.yaml необходимо переопределить значения на свои для следующих параметров:
Root |
Параметр |
Описание |
Пример |
|---|---|---|---|
Root: extensions.vault_driver |
|||
address |
Secman endpoint url |
|
|
namespace |
Пространство в Secman с kv/pki хранилищем |
YOUR_NAMESPACE |
|
role_id |
Secman role ID с доступом к KV/PKI хранилищу |
1111111111-11111-11111-11111-1111111111 |
|
pki_mount_path |
Путь в SECMAN к PKI хранилищу |
PKI |
|
kv_mount_path |
Путь в SECMAN до KV хранилищу |
/PATH/TO/YOUR/SRHX/KV |
Пример:
extensions:
vault_driver:
address: http://secman-host:8200
namespace: YOUR_NAMESPACEV
role_id: 1111111111-11111-11111-11111-1111111111
wrapped_token:
path: /etc/dataprepper/secman/approle_wrapped_secret_id
pki_mount_path: PKI
kv_mount_path: /PATH/TO/YOUR/SRHX/KV
Конфигурация dataprepper пайплайна#
Для конфигурации пайплайна в файле /etc/dataprepper/pipelines.yaml необходимо переопределить значения на свои для следующих параметров:
Root |
Параметр |
Описание |
Обязательность |
Тип |
|---|---|---|---|---|
simple-sample-pipeline.workers |
Количество используемых потоков приложением. Должно быть равно количеству физических ядер процессора |
Да |
int |
|
simple-sample-pipeline.source.kafka |
bootstrap_servers |
Хост и порт для подключения к кластеру Kafka. Можно настроить несколько брокеров Kafka, используя IP-адрес и номер порта для каждого брокера |
Да |
array |
topics |
Kafka топики, из которых DataPrepper будет получать данные. Можно указать до 10 топиков. Дополнительные сведения о параметрах конфигурации топиков приведены на странице описания параметров |
Да |
array |
|
simple-sample-pipeline.source.kafka |
identification_algorithm |
Алгоритм идентификации конечной точки для проверки имени хоста сервера с помощью сертификата сервера HTTPS , по умолчанию пустое значение |
Да |
string |
simple-sample-pipeline.source.kafka.vault_driver.encryption |
cipher_suites |
Шифрование (по умолчанию TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) |
Нет |
string |
key_store_file_path |
Путь к кейстор сертификату на диске |
Да |
string |
|
trust_store_file_path |
Путь к траст сертификату на диске |
Да |
string |
|
pki.role |
Название PKI роли (Блок pki либо kv должен быть заполнен) |
Да |
json |
|
pki.method |
Метод запроса сертификатов(fetch or issue), по умолчанию fetch |
Нет |
string |
|
pki.cert_format |
Формат сертификата, по умолчанию jks |
Нет |
string |
|
pki.cn_cert |
Common name сертификата |
Да |
string |
|
pki.path |
Путь до сертификата куда сохранять на диске |
Да |
string |
|
pki.alt_names |
Массив alt names сертификатов, по умолчанию пустое значение |
Нет |
string |
|
kv.kv_dir |
Директория в KV с сертификатом и паролем (Блок pki либо kv должен быть заполнен) |
Нет |
list |
|
kv.cert_key |
Ключ к сертификату в KV хранилище |
Да |
json |
|
kv.pass_key |
Ключ к паролю в KV |
Да |
string |
|
kv.cert_format |
Формат сертификата, по умолчанию jks |
Нет |
string |
|
kv.path |
Путь до сертификата куда сохранять на диске |
Да |
string |
|
simple-sample-pipeline.sink.kafka.vault_driver.authentication |
kv_dir |
Директория в KV с логином и паролем ТУЗ компонента SRHX |
Да |
string |
user_key |
Ключ в директории „kv_dir“, из которого взять логин ТУЗ компонента SRHX |
Да |
string |
|
pass_key |
Ключ в директории „kv_dir“, из которого взять пароль ТУЗ компонента SRHX |
Да |
string |
|
simple-sample-pipeline.sink.kafka.vault_driver.encryption |
cipher_suites |
Шифрование (по умолчанию TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) |
Нет |
string |
key_store_file_path |
Путь к кейстор сертификату на диске |
Да |
string |
|
trust_store_file_path |
Путь к траст сертификату на диске |
Да |
string |
|
pki.role |
Название PKI роли (Блок pki либо kv должен быть заполнен) |
Да |
string |
|
pki.method |
Метод запроса сертификатов(fetch or issue), по умолчанию fetch |
Нет |
string |
|
pki.cert_format |
Формат сертификата, по умолчанию jks |
Нет |
string |
|
pki.cn_cert |
Common name сертификата |
Да |
string |
|
pki.path |
Путь до сертификата куда сохранять на диске |
Да |
string |
|
pki.alt_names |
Массив alt names сертификатов, по умолчанию пустое значение |
Нет |
list |
|
kv.kv_dir |
Директория в KV с сертификатом и паролем (Блок pki либо kv должен быть заполнен) |
Да |
string |
|
kv.cert_key |
Ключ к сертификату в KV хранилище |
Да |
string |
|
kv.pass_key |
Ключ к паролю в KV |
Да |
string |
|
kv.cert_format |
Формат сертификата, по умолчанию jks |
Нет |
string |
|
kv.path |
Путь до сертификата куда сохранять на диске |
Да |
string |
Пример заполненного pipelines.yaml:
simple-sample-pipeline:
source:
kafka:
identification_algorithm: "Алгоритм идентификации конечной точки для проверки имени хоста сервера с помощью сертификата сервера HTTPS , по умолчанию пустое значение"
vault_driver:
encryption:
cipher_suites: "<ваше значение> (по умолчанию TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)"
keystore_file_path: "путь на диске, куда сохранять keystore"
truststore_file_path: "путь на диске, куда сохранять truststore"
pki:
role: "навзвание PKI роли для выпуска сертификатов"
method: "метод запроса сертификатов(fetch или issue), по умолчанию fetch"
cert_format: "формат сертификата, по умолчанию jks"
cn_cert: "common name сертификата"
alt_names: "список, который будет добавлен в поле alt_names сертификата"
path: "путь на диске, куда сохранять полученный сертификат"
kv: # если необходимо взять трасты из кв движка
kv_dir: "директория в KV с ключами, где находятся трасты для выкачивания"
cert_key: "ключ в директории 'kv_dir', из которого взять сертификат"
pass_key: "ключ в директории 'kv_dir', из которого взять пароль для сертификата"
cert_format: "формат сертификата, который будет получен. По умолчанию jks"
path: "путь на диске, куда сохранять скачанный сертификат"
sink:
- opensearch:
vault_driver:
authentication:
kv_dir: "директория в KV с ключами, где находятся креды для аутентификации"
user_key: "ключ в директории 'kv_dir', из которого взять имя пользователя"
pass_key: "ключ в директории 'kv_dir', из которого взять пароль пользователя"
encryption:
cipher_suites: "<ваше значение> (по умолчанию TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)"
keystore_file_path: "путь на диске, куда сохранять keystore"
truststore_file_path: "путь на диске, куда сохранять truststore"
pki:
role: "навзвание PKI роли для выпуска сертификатов"
method: "метод доставания сертов(fetch or issue), по умолчанию fetch"
cert_format: "формат сертификата, который будет получен. По умолчанию jks"
cn_cert: "common name сертификата"
alt_names: "список, который будет добавлен в поле alt_names сертификата"
path: "путь на диске, куда сохранять полученный сертификат"
kv: # если необходимо взять трасты из кв движка
kv_dir: "директория в KV с ключами, где находятся трасты для выкачивания"
cert_key: "ключ в директории 'kv_dir', из которого взять сертификат"
pass_key: "ключ в директории 'kv_dir', из которого взять пароль для сертификата"
cert_format: "формат сертификата, который будет получен. По умолчанию jks"
path: "путь на диске, куда сохранять скачанный сертификат"
Создание файла с secman wrapped token#
Для работы dataprepper с secman необходимо создать файл /etc/dataprepper/secman/approle_wrapped_secret_id и поместить в него wrapped-токен, полученный для approle из Secman:
sudo su - dpadmin -c "cat > /etc/dataprepper/usertoken/approle_wrapped_secret_id<<EOF
YOUR_SECMAN_TOKEN_HERE
EOF"
Включение systemd сервиса и его автозапуска#
Чтобы включить сервис systemd и его автозапуск, выполните команду:
sudo systemctl daemon-reload
sudo systemctl enable dataprepper
sudo systemctl start dataprepper
Параметры конфигурации целевого пайплайна source: kafka/sink:PVS#
Пайплайны определены в файле конфигурации YAML.
Каждый пайплайн может содержать следующие элементы:
Поле |
Обязательно к заполнению |
Описание |
|---|---|---|
workers |
Нет |
Количество потоков приложения. Устанавливается равным количеству ядер процессора. По умолчанию - 1 |
delay |
Нет |
Количество миллисекунд, в течение которых рабочие системы ожидают между попытками чтения из буфера. Значение по умолчанию - 3000 |
source |
Да |
входной компонент, который определяет, как пайплайн подготовки данных dataprepper принимает события. Каждый пайплайн имеет один источник, который либо получает события по протоколу HTTP, либо считывает их с внешних конечных точек, таких как Kafka, OpenTelemetry Collector |
processor |
Нет |
описывает компоненты пайплайна подготовки данных dataprepper, которые позволяют фильтровать, преобразовывать и обогащать события с использованием нужного формата перед публикацией записей в компоненте-получателе. Если в конфигурации пайплайна не указан процессор, события публикуются в формате, указанном компонентом-источником |
buffer |
Нет |
Компонент buffer действует как промежуточный уровень между компонентами источника и приемника в пайплайне подготовки данных dataprepper. Он служит временным хранилищем для событий, отделяя источник от последующих процессоров и приемников. Буферы могут быть как в памяти, так и на диске |
sink |
Да |
это выходной компонент, который определяет пункты назначения, в которые пайплайн подготовки данных dataprepper публикует события |
Kafka source parameters#
Поле |
Обязательно к заполнению |
Type |
Описание |
|---|---|---|---|
bootstrap_servers |
Да |
IP address |
Хост/Хост+порт для первоначального подключения к кластеру Kafka. Можно настроить несколько брокеров Kafka, |
topics |
Да |
JSON array |
Kafka топики, из которых DataPrepper будет получать данные. Можно настроить до 10 тем. Дополнительную информацию см. ниже в разделе Topics |
encryption |
Да |
JSON object |
Конфигурация шифрования. Дополнительные сведения см. ниже в разделе Secman encryption |
acknowledgments |
Нет |
Boolean |
Если значение равно true, то позволяет источнику kafka получать сквозные подтверждения при получении событий sink dataprepper. Значение по умолчанию - false |
client_dns_lookup |
Да |
String |
Устанавливает параметр client.dns.lookup для Kafka. Значение по умолчанию - default |
Topics fields#
Поле |
Обязательно к заполнению |
Type |
Описание |
|---|---|---|---|
name |
Да |
String |
Название топика |
group_id |
Да |
String |
Назначить kafka’s group.id |
workers |
Нет |
Integer |
Количество многопоточных пользователей, связанных с каждой темой. Значение по умолчанию равно 2. Максимальное значение - 200 |
serde_format |
Нет |
String |
Указывает формат сериализации и десериализации сообщений в топике. По умолчанию используется обычный plaintext |
auto_commit |
Нет |
Boolean |
Значение false означает, что offset не будет передаваться в Kafka в фоновом режиме. Значение по умолчанию равно false |
commit_interval |
Нет |
Integer |
Если для параметра auto_commit установлено значение true, параметр определяет, как часто в секундах offset автоматически передаются в Kafka с помощью опции Kafka auto.commit.interval.ms. Значение по умолчанию - 5 секунд |
session_timeout |
Нет |
Integer |
Время, в течение которого источник обнаруживает сбои в работе клиента при использовании функций группового управления Kafka. Значение по умолчанию - 45 секунд |
auto_offset_reset |
Нет |
String |
Автоматически восстанавливает offset до более раннего или последнего значения с помощью опции auto.offset.reset в Kafka. По умолчанию используется значение earliest |
thread_waiting_time |
Нет |
Integer |
Время, в течение которого потоки ожидают, пока предыдущий поток завершит выполнение своей задачи и подаст сигнал следующему потоку. Значение тайм-аута опроса Kafka consumer API равно половине этого параметра. По умолчанию - 5 секунд |
max_partition_fetch_bytes |
Нет |
Integer |
Устанавливает максимальное ограничение в мегабайтах для максимального количества данных, возвращаемых из каждого раздела с помощью Kafka max.partition.fetch.bytes. Значение по умолчанию равно 1 Мб |
heart_beat_interval |
Нет |
Integer |
Ожидаемый промежуток времени между передачами сообщений heartbeats координатору пользователей при использовании средств группового управления Kafka с помощью настройки Kafka heartbeat.interval.ms. По умолчанию используется значение 5 секунд |
fetch_max_wait |
Нет |
Integer |
Максимальный промежуток времени, в течение которого сервер блокирует запрос на выборку, если недостаточно данных для выполнения требования fetch_min_bytes с помощью параметра Kafka fetch.max.wait.ms. Значение по умолчанию - 500 мс |
fetch_max_bytes |
Нет |
Integer |
Максимальный размер записи, принятый брокером с помощью настройки Kafka fetch.max.bytes. По умолчанию это 50 Мб |
fetch_min_bytes |
Нет |
Integer |
Минимальный объем данных, который сервер возвращает во время запроса на выборку с помощью параметра Kafka retry.backoff.ms. Значение по умолчанию равно 1b |
retry_backoff |
Нет |
Integer |
Время ожидания, в течение которого необходимо повторить неудачный запрос к данному partition топика. По умолчанию используется значение 10 секунд |
max_poll_interval |
Нет |
Integer |
Максимальная задержка между вызовами функции poll() при использовании группового управления с помощью опции Kafka max.poll.interval.ms. Значение по умолчанию равно 300 секундам |
consumer_max_poll_records |
Нет |
Integer |
Максимальное количество записей, возвращаемых за один вызов функции poll() с помощью параметра max.poll.records в Kafka. Значение по умолчанию - 500 |
key_mode |
Нет |
String |
Указывает, как обрабатывать ключевое поле сообщения Kafka. Значение по умолчанию - include_as_field, которое включает ключ в событии kafka_key. Значение параметра include_as_metadata включает ключ в метаданные события. Настройка сброса приводит к отмене ключа |
Secman encryption#
Root |
Поле |
Обязательно к заполнению |
Type |
Описание |
Пример |
|---|---|---|---|---|---|
kafka.encryption.secman |
|||||
key_store_file_path |
Да |
String |
Путь к кейстор сертификату на диске |
/etc/dataprepper/secman/certs/kafka.jks |
|
trust_store_file_path |
Да |
String |
Путь к траст сертификату на диске |
/etc/dataprepper/secman/certs/kafka.jks |
|
pki |
pki или kv должны быть заполнены |
Map |
Список параметров получаемых сертификатов из PKI. Описание схемы pki см. ниже в таблице PKI fields |
||
kv |
pki или kv должны быть заполнены |
Map |
Список параметров получаемых сертификатов из KV. Описание схемы kv см. ниже в таблице KV fields |
PKI fields
Root |
Поле |
Обязательно к заполнению |
Type |
Описание |
Пример |
|---|---|---|---|---|---|
kafka.encryption.secman.pki |
|||||
role |
Да |
String |
Название PKI роли |
role-ga-secman-srhx |
|
method |
Нет |
String |
метод получения сертов(fetch or issue), по умолчанию fetch |
fetch |
|
cert_format |
Нет |
String |
формат сертификата, по умолчанию jks |
jks |
|
cn_cert |
Да |
String |
Common name сертификата |
kafka-client-prepper |
|
path |
Да |
String |
путь куда будет сохранен сертификат |
/etc/dataprepper/secman/certs/kafka.jks |
|
ttl |
Нет |
String |
срок жизни сертификата, по умолчанию 2592000s |
||
alt_names |
Нет |
String |
Массив SAN сертификата, по умолчанию пустой список |
KV fields
Root |
Поле |
Обязательно к заполнению |
Type |
Описание |
Пример |
|---|---|---|---|---|---|
kafka.encryption.secman.kv |
|||||
cert_kv_path |
Да |
String |
Директория в secman KV с сертификатом |
audit |
|
cert_kv_key |
Да |
String |
Ключ к сертификату в KV хранилище |
jksContent |
|
pass_kv_path |
Да |
String |
Директория в KV с паролем |
audit |
|
pass_kv_key |
Да |
String |
Кюч к паролю в KV |
jksPassword |
|
cert_format |
Нет |
String |
Формат сертификата, по умолчанию jks |
jks |
|
path |
Да |
String |
Путь до сертификата куда сохранять на диске |
/etc/dataprepper/secman/certs/kafkaT.jks |
opensearch sink parameters#
Поле |
Обязательно к заполнению |
Type |
Описание |
|---|---|---|---|
hosts |
Да |
list |
Список хостов OpenSearch для записи |
secman |
Да |
Map |
Конфигурация secman для получения сертификатов Описание схемы authentication см. ниже в таблице Secman fields |
cipher_suites |
Нет |
String |
поддерживаемый тип шифрования (по умолчанию TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) |
authentication |
Да |
Map |
Поле с конфигурацией kv хранилища для получения кредов для auth в PVS. Описание схемы authentication см. ниже в таблице authentication fields |
max_retries |
Нет |
Integer |
Максимальное количество раз, которое приемник opensearch должен попытаться отправить данные на сервер OpenSearch, прежде чем считать это ошибкой. По умолчанию используется значение Integer.MAX_VALUE. Если это не указано, приемник будет пытаться передавать данные на сервер OpenSearch бесконечно, а экспоненциальное замедление увеличит время ожидания перед повторной попыткой |
socket_timeout |
Нет |
Integer |
Значение тайм-аута в миллисекундах при ожидании возврата данных (максимальный период бездействия между двумя последовательными пакетами данных). Значение тайм-аута, равное 0, интерпретируется как бесконечный тайм-аут. Если это значение тайм-аута отрицательное или не задано, то базовый Apache HttpClient будет полагаться на настройки операционной системы для |
connect_timeout |
Нет |
Integer |
Значение тайм-аута в миллисекундах при запросе соединения из диспетчера подключений. Значение тайм-аута, равное 0, интерпретируется как бесконечный тайм-аут. Если это значение тайм-аута отрицательное или не задано, базовый Apache HttpClient будет полагаться на настройки операционной системы для управления тайм-аутами подключения |
index |
Да |
String |
Имя индекса в который будет происходить экспорт данных. Индекс может быть простой строкой (например, |
index_type |
Нет |
String |
Указывает sink plugin, какой тип данных он обрабатывает. Допустимые значения - custom, trace-analytics-raw, trace-analytics-service-map, or management-disabled. Default is custom |
authentication fields
Root |
Поле |
Обязательно к заполнению |
Type |
Описание |
|---|---|---|---|---|
sink.opensearch.authentication.kv |
||||
user_kv_path |
Да |
string |
Secman kv path, где хранится имя пользователя PVS для интеграции |
|
user_kv_key |
Да |
string |
Имя ключа в user_kv_path значение которого будет использоваться в качестве пользователя для подключения к PVS |
|
pass_kv_path |
Да |
string |
Secman kv path, где хранится пароль пользователя PVS для интеграции |
|
pass_kv_key |
Да |
string |
Имя ключа в pass_kv_path значение которого будет использоваться в качестве пароля пользователя для подключения к PVS |
Secman fields
Root |
Поле |
Обязательно к заполнению |
Type |
Описание |
|---|---|---|---|---|
sink.opensearch.secman |
||||
key_store_file_path |
Да |
string |
Путь к кейстор сертификату на диске |
|
trust_store_file_path |
Да |
string |
Путь к траст сертификату на диске |
|
pki |
Да |
Map |
Список параметров получаемых сертификатов из PKI. Описание схемы pki см. выше в разделе 1 в таблице PKI fields |
Параметры конфигурационного файла data-prepper сервера#
Поле |
Описание |
Обязательно к заполнению |
Значение по умолчанию |
|---|---|---|---|
ssl |
bool параметр, указывающий, следует ли использовать TLS для API |
Нет |
false |
key_store_file_path |
Строковый путь к файлу хранилища ключей ( |
Обязательно, если SSL установлен как true |
- |
key_store_password |
Строка с паролем для хранилища ключей |
Нет |
«» |
private_key_password |
Строка с паролем для закрытого ключа внутри хранилища ключей |
Нет |
«» |
server_port |
Номер порта для использования dataprepper API server |
Нет |
4900 |
metric_registries |
Список регистров метрик для публикации генерируемых метрик |
Нет |
Prometheus |
metric_tags |
Маппинг пар ключ-значение тегов метрики, применяемых в качестве общих тегов метрик к регистрам счетчиков. По умолчанию пустой маппинг. Максимальное количество пар ограничено тремя. Обратите внимание, что |
Нет |
{} |
metric_tag_filters |
Список шаблонов и тегов. Для каждой метрики добавляются только те теги из первого шаблона, которые соответствуют имени метрики, в порядке конфигурации. Если ни один из шаблонов не совпадает, то применяются теги из |
Нет |
[] |
extention |
Маппинг, где ключ - имя расширения - значение Map параметров расширения. Поддерживаемые расширения описаны ниже |
Vault driver extention#
Имя расширения: vault_driver
Поле |
Описание |
Обязательно к заполнению |
Значение по умолчанию |
|---|---|---|---|
address |
Адрес secman сервиса |
Да |
|
auth_method |
Путь к движку аутентификации по approle, по умолчанию approle |
Нет |
approle |
namespace |
Secret Management System namespace |
Да |
- |
role_id |
RoleID хранилища Secret Management System |
Должен быть заполнен либо |
- |
wrapped_token |
Объект описывает место хранения wrapped-токена для получения SecretID (см таблицу wrapped_token parameters) |
Да |
- |
pki_mount_path |
Secret Management System путь к движку PKI |
Нет |
- |
kvEngineVersion |
Secret Management System версия KV движкка, по умолчанию 1 |
Нет |
- |
kv_mount_path |
Путь к KV движку |
Нет |
- |
connection_timeout |
Connection timeout при отправке запроса на Secret Management System сервер |
Нет |
5 cек |
request_timeout |
request timeout при отправке чтении ответа от Secman сервера |
Нет |
5 cек |
max_retries |
Максимальное количество повторов каждого запроса к Secret Management System серверу в случае ошибок. По умолчанию 6 попыток |
Нет |
6 |
retry_delay |
Время ожидания между повторами в миллисекундах |
По умолчанию время ожидания между повторами увеличивается экспоненциально с каждой попыткой. Начальное значение - 1с |
|
certificate_config |
Параметр описывает жизненный цикл сертификата (см таблицу certificate_config parameters) |
Нет |
|
trust_filepath |
Место расположение сертификатов, которые позволяют установить доверительное соединение с Secret Management System |
wrapped_token parameters
Root |
Поле |
Описание |
Обязательно к заполнению |
Значение по умолчанию |
|---|---|---|---|---|
extentions.vault_driver.wrapped_token |
||||
path |
Место хранения wrapped-токена для получения SecretID |
Да |
||
ttl |
Время жизни wrapped-токена |
Нет |
86400 секунд (24 часа) |
|
refresh_period |
Период обновления wrapped-токена в секундах |
Нет |
10/35 периода обновления токена на сервере Secret Management System |
certificate_config parameters
Root |
Поле |
Описание |
Обязательно к заполнению |
Значение по умолчанию |
|---|---|---|---|---|
extentions.vault_driver.certificate_config |
||||
refresh_period |
Период запуска проверки обновления сертификата. По умолчанию 3600 секунд (1 час) |
Нет |
3600s, если |
|
ttl |
Время жизни сертификата в секундах |
Нет |
2592000 секунд (1 месяц) |
|
refresh_before |
Интервал времени перед моментом устаревания текущего сертификата, в течении которого производятся попытки обновления сертификата. По умолчанию 86400 секунд (24 часа) |
Нет |
По умолчанию 86400 секунд (24 часа) |
Настройка аудита компонента SRHX#
При старте сервиса компонент Поисковый движок (SRHX) проверяет наличие в директории /etc/opensearch/audit/ файла с настройками аудита audit.yml и при наличии файла применяет его настройки на кластер. Из других директорий применение данного файла невозможно.
Важно
Применение настроек аудита кластера возможно только через файл audit.yml, изменение настроек через файл opensearch.yml, REST-запросы или с помощью скрипта securityadmin.sh заблокировано.
Если файл не найден, то применяются настройки по умолчанию, соответствующие файлу audit.yml ниже:
_meta:
type: "audit"
config_version: 2
config:
# enable/disable audit logging
enabled: true
audit:
# Enable/disable REST API auditing
enable_rest: true
# Categories to exclude from REST API auditing
disabled_rest_categories:
# Enable/disable Transport API auditing
enable_transport: true
# Categories to exclude from Transport API auditing
disabled_transport_categories:
# Users to be excluded from auditing. Wildcard patterns are supported. Eg:
# ignore_users: ["test-user1", "test-user2"]
ignore_users:
# Requests to be excluded from auditing. Wildcard patterns are supported. Eg:
# ignore_requests: ["indices:data/read/*", "SearchRequest"]
ignore_requests: []
# Log individual operations in a bulk request
resolve_bulk_requests: true
# Include the body of the request (if available) for both REST and the transport layer
log_request_body: true
# Logs all indices affected by a request. Resolves aliases and wildcards/date patterns
resolve_indices: true
# Exclude sensitive headers from being included in the logs. Eg: Authorization
exclude_sensitive_headers: true
compliance:
# enable/disable compliance
enabled: true
# Log updates to internal security changes
internal_config: true
# Log external config files for the node
external_config: true
# Log only metadata of the document for read events
read_metadata_only: false
# Map of indexes and fields to monitor for read events. Wildcard patterns are supported for both index names and fields. Eg:
# read_watched_fields: {
# "twitter": ["message"]
# "logs-*": ["id", "attr*"]
# }
read_watched_fields: {"*": ["*"]}
# List of users to ignore for read events. Wildcard patterns are supported. Eg:
# read_ignore_users: ["test-user", "employee-*"]
read_ignore_users:
# Log only metadata of the document for write events
write_metadata_only: false
# Log only diffs for document updates
write_log_diffs: true
# List of indices to watch for write events. Wildcard patterns are supported
# write_watched_indices: ["twitter", "logs-*"]
write_watched_indices: ["*"]
# List of users to ignore for write events. Wildcard patterns are supported. Eg:
# write_ignore_users: ["test-user", "employee-*"]
write_ignore_users:
Описание всех параметров указанных в примере audit.yml:
Имя параметра |
Описание |
Значение по умолчанию |
|---|---|---|
config.enabled |
Включение/отключение регистрации событий аудита |
true |
config.audit.enable_rest |
Включение/отключение регистрации событий аудита REST-уровня |
true |
config.audit.disabled_rest_categories |
Перечень типов событий аудита REST-уровня, которые не нужно регистрировать |
- |
config.audit.enable_transport |
Включение/отключение регистрации событий аудита Transport-уровня |
true |
config.audit.disabled_transport_categories |
Перечень типов событий аудита Transport-уровня, которые не нужно регистрировать |
- |
config.audit.ignore_users |
Перечень пользователей, события аудита которых не нужно регистрировать |
- |
config.audit.ignore_requests |
Перечень запросов, события аудита которых не нужно регистрировать |
- |
config.audit.resolve_bulk_requests |
Параметр, отвечающий за регистрацию одного события при массовой реиндексации индексов. При отключении данного параметра каждая реиндексация будет регистрироваться как отдельное событие |
true |
config.audit.log_request_body |
Параметр, отвечающий за наличие тела запроса в событии аудита |
true |
config.audit.resolve_indices |
Параметр, отвечающий за наличие наименования индекса и его псевдонимов в событии аудита. Может быть отключен только вместе с параметром config.audit.log_request_body |
true |
config.audit.exclude_sensitive_headers |
Параметр, отвечающий за исключение чувствительных заголовков из событий аудита. Например, Authorization |
true |
config.compliance.enabled |
Включение/отключение регистрации событий аудита, связанных с изменением настроек индексов и конфигурационных файлов |
true |
config.compliance.internal_config |
Параметр, отвечающий за регистрацию событий аудита, связанных с изменением параметров плагина Security |
true |
config.compliance.external_config |
Параметр, отвечающий за регистрацию событий аудита, связанных с изменением параметров плагина Security через конфигурационные параметры на сервере |
true |
config.compliance.read_metadata_only |
Параметр, отвечающий за наличие в событии аудита метаданных запроса чтения. |
false |
config.compliance.read_watched_fields |
Перечень индексов и полей индекса, которые могут регистрироваться в событиях аудита чтения |
{ |
config.compliance.read_ignore_users |
Перечень пользователей, события чтения индексов которых не нужно регистрировать |
- |
config.compliance.write_metadata_only |
Параметр, отвечающий за наличие в событии аудита метаданных запроса записи |
true |
config.compliance.write_log_diffs |
Параметр, отвечающий за наличие в событии аудита новых и предыдущих метаданных |
true |
config.compliance.write_watched_indices |
Перечень индексов, которые могут регистрироваться в событиях аудита записи данных |
[ |
config.compliance.write_ignore_users |
Перечень пользователей, события записи в индексы которых не нужно регистрировать |
true |
Настройка интеграции#
Настройка интеграции с Secret Management System#
Для включения интеграции с Secret Management System:
Создайте группу Active Directory экземпляра компонента Поисковый движок (SRHX) в Secret Management System.
Активируйте KV-engine и PKI-engine.
Разместите в KV-engine корневой сертификат.
Выпустите PKI-engine роль с привилегиями:
Allow IP Subject Alternative Names;
Use CSR Subject Alternative Names;
Enforce hostnames;
Require Common Name;
Use CSR Common Name;
Allow localhost;
Allow bare domains;
Allow subdomains;
Server flag;
Client flag.
Получите доступ к методу аутентификации
Approle.Получите из Secret Management System параметры role_id и secret_id при помощи API. secret_id и role_id являются данными для доступа к созданным engine в Secret Management System.
Параметр secret_id отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен. Wrapped-токен – это одноразовый токен (wrapped-token) в виде файла, который необходим для получения secret_id. secret_id и role_id являются данными для доступа к созданному хранилищу в Secret Management System.
Разместите wrapped-токен на файловой системе компонента Поисковый движок (SRHX) в каталоге /etc/opensearch/secman.
Заполните в файле opensearch.yml параметры:
plugins.security.secman.enabled значением true;
Параметры plugins.security.ssl.*
Заполните файл secman.yml. Большинство настроек интеграции с Secret Management System описываются в файле
/etc/opensearch/secman.ymlи считываются при запуске программы. Ниже пример готового файла.# Блок параметров для авторизации в Secman # Адрес сервера SecMan-а plugins.security.secman.address: https://secman.host:secman.port # Пространство имён SecMan-а (HashiCorp enterprise feature) plugins.security.secman.namespace: YOUR_NAME_FOR_NAMESPACE # Значение идентификатора Approle, настроенной в App Role authentication backend plugins.security.secman.role_id: 11111111-1111-1111-1111-111111 # Блок параметров для wrapped-token # Имя файла с wrapped-token-ом plugins.security.secman.wrapped_token.path: /etc/opensearch/secman/approle_wrapped_secret_id # Блок параметров для KV (Получение траст-сертификатов) # Тип сертификатов, получаемых из KV plugins.security.secman.kv.cert.type: pem # Версия KV движка plugins.security.secman.kv.engine_version: 1 # Путь к KV движку plugins.security.secman.kv.mount.path: NAMESPACE/KV/MOUNT/PATH/KV # Наименование папки в KV, где находится ключ(параметр), в котором лежит цепочка трастовых сертификатов plugins.security.secman.kv.dir.path: dir_in_your_kv # Название ключа, в котором находится цепочка трастовых сертификатов в папке "plugins.security.secman.kv.dir.path" plugins.security.secman.kv.truststore_key: key_name_in_your_kv_dir_for_trust_cert # Блок параметров для PKI (Генерация сертификатов для PVS) # Тип сертификатов, получаемых из PKI plugins.security.secman.pki.cert.type: pem # Путь к PKI-движку plugins.security.secman.pki.fetch.mount.path: path_to_PKI_engine # SberCA-роль для выпуска клиент-серверных сертификатов с проверкой CN по DNS plugins.security.secman.pki.fetch.role: PKI-client-server-DNS-role-name # Блок по сертификатам # Common name для транспортных сертификатов plugins.security.secman.transport.cn: vm-fqdn # Common name для сертификата plugins.security.secman.http.cn: vm-fqdn # Блок по сертификатам для audit-а # Common name для сертификата plugins.security.secman.audit.cn: cn_for_audit_certs # SberCA-роль для выпуска клиентских сертификатов plugins.security.secman.audit.pki.role: PKI-client-role-name # Путь, где будут сохранены клиентские-сертификаты для аудита на диске plugins.security.ssl.audit.keystore_filepath: /etc/opensearch/secman/certs/audit.jks # Путь где будут сохранены траст-сертификаты для аудита на диске plugins.security.ssl.audit.kv.truststore_path: /etc/opensearch/secman/certs/audittrust.jks
Описание всех возможных параметров файла secman.yml
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
plugins.security.secman.address |
Хост и порт - Адрес Secret Management System |
Да |
- |
plugins.security.secman.namespace |
Используемый namespace |
Да |
- |
plugins.security.secman.role_id |
role_id хранилища Secret Management System |
Да |
- |
plugins.security.secman.role_id.path |
Путь к значению role_id в файле, если его значение не указано в параметре plugins.security.secman.role_id. |
Нет |
Должен быть заполнен либо plugins.security.secman.role_id.path либо plugins.security.secman.role_id. Если заполнены оба параметра, то по умолчанию используется параметр plugins.security.secman.role_id. |
plugins.security.secman.wrapped_token.path |
Место хранения wrapped-токена для получения secret_id |
Да |
– |
plugins.security.secman.pki.fetch.mount.path |
Путь к PKI-engine |
Нет |
PKI |
plugins.security.secman.pki.fetch.role |
Наименование роли PKI движка Secret Management System, которая позволяет выпускать и обновлять сертификаты |
Да |
– |
plugins.security.secman.pki.fetch.client_role |
Имя клиентской роли для доступа к SberCA |
Нет |
Параметры для использования клиент и серверной роли по отдельности, при невозможности использования клиент-серверной роли. В opensearch.yml должен быть указан параметр «plugins.security.ssl.transport.extended_key_usage_enabled» со значением «true». Нельзя одновременно указывать plugins.security.secman.pki.fetch.role и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней: |
plugins.security.secman.pki.fetch.server_role |
Имя серверной роли для доступа к SberCA |
Нет |
Параметры для использования клиент и серверной роли по отдельности, при невозможности использования клиент-серверной роли. В opensearch.yml должен быть указан параметр «plugins.security.ssl.transport.extended_key_usage_enabled» со значением «true». Нельзя одновременно указывать plugins.security.secman.pki.fetch.role и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней: |
plugins.security.secman.pki.alt_names |
Массив alt names сертификатов |
Да |
– |
plugins.security.secman.pki.cert.type |
Формат PKI сертификатов. Возможные значения pem, pkcs12 и jks. |
Нет |
pkcs12 |
plugins.security.secman.kv.mount.path |
Путь к KV engine |
Да |
– |
plugins.security.secman.kv.engine_version |
Версия KV engine. Возможные варианты заполнения: «1» или «2». Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
1 |
plugins.security.secman.kv.dir.path |
Путь к каталогу с секретами в KV engine. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …filepath |
plugins.security.secman.kv.truststore_key |
Ключ к цепочке KV сертификатов. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …truststore_key |
plugins.security.secman.kv.password_key |
Ключ от пароля к цепочке KV сертификатов. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …password_key |
plugins.security.secman.kv.cert.type |
Формат KV сертификатов. Возможные значения pem, pkcs12 и jks. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
pkcs12 |
plugins.security.secman.token.ttl.sec |
Время жизни wrapped-токена. По умолчанию - 86400 секунд (24 часа). ВАЖНО: если в параметре указано значение больше, чем указано на сервере Secret Management System - SRHX будет использовать значение, которое приходит от сервера Secret Management System. Если в параметре указано значение меньше, чем на сервере Secret Management System - SRHX использует значение в параметре plugins.security.secman.token.ttl.sec |
Нет |
86400s |
plugins.security.secman.token.refresh.period.sec |
Период обновления wrapped-токена в секундах |
Нет |
По умолчанию 10/35 периода обновления токена на сервере Secret Management System |
plugins.security.secman.token.secret.key |
Ключ wrapped-токена |
Нет |
secret_id |
plugins.security.secman.open.timeout.sec |
Connection timeout при отправке запроса на Secret Management System сервер. По умолчанию 5 секунд |
Нет |
5 |
plugins.security.secman.read.timeout.sec |
Read timeout при отправке чтении ответа от Secret Management System сервера. По умолчанию 5 секунд |
Нет |
5 |
plugins.security.secman.retries.max |
Максимальное количество повторов каждого запроса к Secret Management System серверу в случае ошибок. По умолчанию 6 попыток |
Нет |
6 |
plugins.security.secman.retries.interval.ms |
Время ожидания между повторами в миллисекундах. |
Нет |
По умолчанию время ожидания между повторами увеличивается экспоненциально с каждой попыткой. Начальное значение - 1с |
plugins.security.secman.cert.ttl.sec |
Время жизни сертификата в секундах. По умолчанию - 2592000 секунд (1 месяц) |
Нет |
2592000s |
plugins.security.secman.cert.refresh.period.sec |
Период запуска проверки обновления сертификата. По умолчанию 3600 секунд (1 час). Как часто SRHX проверяет, не наступил ли момент времени для обновления сертификата равный значению Даты истечения сертификата в секундах минус значение параметра plugins.security.secman.cert.refresh.before.sec |
Нет |
3600s (если plugins.security.secman.cert.ttl.sec больше данного параметра) иначе 2/3 от значения параметра plugins.security.secman.cert.ttl.sec |
plugins.security.secman.cert.refresh.before.sec |
Интервал времени перед моментом устаревания текущего сертификата, в течении которого производятся попытки обновления сертификата. По умолчанию 86400 секунд (24 часа). Интервал времени в секундах, за который необходимо инициировать процесс обновления сертификата до даты его истечения |
Нет |
24h |
plugins.security.secman.alias.certificate |
Alias клиентского (keystore) сертификата |
Нет |
ee |
plugins.security.secman.alias.root |
Alias корневого сертификата |
Нет |
root |
plugins.security.secman.alias.chain |
Alias цепочки сертификатов |
Нет |
private_key |
plugins.security.secman.base64_certs |
Параметр, отвечающий за необходимость раскодирования сертификатов из кодировки Base64. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
true |
plugins.security.secman.base64_passwords |
Параметр, отвечающий за необходимость раскодирования паролей от сертификатов из кодировки Base64. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
false |
plugins.security.secman.auth_method |
Путь к движку аутентификации по approle |
Нет |
approle |
plugins.security.secman.ssl.verify |
Параметр, отвечающий за проверку сертификата Secret Management System для установки доверительного соединения |
Нет |
false |
plugins.security.secman.ssl.truststore_filepath |
Место расположение сертификатов, которые позволяют установить доверительное соединение с Secret Management System |
Да, если plugins.security.secman.ssl.verify равен true |
- |
Настройка сертификата для шифрования внутрикластерного взаимодействия
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
plugins.security.secman.transport.cn |
CN сертификата транспортного уровня |
Да |
– |
plugins.security.secman.transport.pki.role |
Наименование роли PKI движка Secret Management System для transport уровная |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role |
plugins.security.secman.transport.pki.alt_names |
alt names сертификата транспортного уровня |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names |
Настройки сертификата для шифрования внешнего взаимодействия с кластером
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
plugins.security.secman.http.cn |
CN сертификата http-уровня |
Да |
- |
plugins.security.secman.http.pki.role |
Наименование роли PKI движка Secret Management System для http уровная |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role |
plugins.security.ssl.http.kv.truststore_filepath |
Наименование папки http.truststore в KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path |
plugins.security.ssl.http.kv.truststore_key |
Ключ к цепочке KV http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.truststore_key |
plugins.security.ssl.http.kv.truststore_template |
Шаблон для валидации сертификата из KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.kv.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.kv.base64_certs |
plugins.security.ssl.http.kv.password_filepath |
Путь к хранилищу пароля для KV http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path |
plugins.security.ssl.http.kv.password_key |
Ключ к паролю http.truststore. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.password_key |
plugins.security.ssl.http.kv.password_template |
Шаблон для валидации пароля сертификата из KV. Если plugins.security.secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.base64_passwords |
plugins.security.secman.http.pki.alt_names |
alt names сертификата http уровня |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names |
Настройка сертификата для взаимодействия с провайдером аудита
Важно
Параметры ниже заполняются только в случае, если настроена интеграция с внешним провайдером аудита согласно пункту Настройка интеграции с внешним провайдером аудита. Если интеграция не настроена, то удалите параметры ниже из файла secman.yml.
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
plugins.security.secman.audit.cn |
CN сертификата для шифрования соединения с провайдером аудита |
Да |
- |
plugins.security.secman.audit.pki.role |
Наименование роли PKI движка Secret Management System для сертификата аудита |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра plugins.security.secman.pki.fetch.role |
plugins.security.ssl.audit.keystore_filepath |
Путь к месту хранения сертификата аудита |
Да |
- |
plugins.security.ssl.audit.kv.truststore_path |
Путь к хранилищу audit.truststore сертификата аудита |
Да |
- |
plugins.security.ssl.audit.kv.truststore_filepath |
Наименование папки audit.truststore в KV |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path |
plugins.security.ssl.audit.kv.truststore_key |
Ключ к цепочке KV сертификата аудита |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.truststore_key |
plugins.security.ssl.audit.kv.truststore_template |
Шаблон для валидации сертификата аудита |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.kv.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.kv.base64_certs |
plugins.security.ssl.audit.kv.password_filepath |
Путь к хранилищу пароля для KV сертификата аудита |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.dir.path |
plugins.security.ssl.audit.kv.password_key |
Ключ к паролю сертификата аудита |
Нет |
Если не указано значение, то используется значение параметра plugins.security.secman.kv.password_key |
plugins.security.ssl.audit.kv.password_template |
Шаблон для валидации пароля KV сертификата аудита |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра plugins.security.secman.base64_passwords |
plugins.security.secman.audit.pki.alt_names |
alt names сертификата аудита |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру plugins.security.secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра plugins.security.secman.pki.alt_names |
Интеграция сервиса Dashboards компонента Поисковый движок (SRHX) с Secret Management System#
Для включения интеграции с Secret Management System:
Разместите в KV-engine корневой сертификат для Dashboards (если ранее загружали корневые сертификаты для Server, то можно не загружать новые, а использовать корневые сертификаты Server).
Для PKI-engine используйте ранее выпущенную роль для компонента Поисковый движок (SRHX).
Параметр secret_id отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен.
Разместите wrapped-токен на файловой системе сервиса Dashboards компонента Поисковый движок (SRHX) в каталоге
/etc/opensearch-dashboards/secman.Заполните в файле opensearch-dashboards.yml параметры:
secman.enabled значением true;
параметры
server.ssl.*иopensearch.ssl.*.
Заполните файл secman_dashboards.yml. Большинство настроек интеграции с Secret Management System описываются в файле
/etc/opensearch-dashboards/secman_dashboards.ymlи считываются при запуске программы. Ниже пример готового файла.# Блок параметров для авторизации в Secman # Адрес сервера SecMan-а secman.address: https://secman.host:secman.port # Пространство имён SecMan-а (HashiCorp enterprise feature) secman.namespace: YOUR_NAME_FOR_NAMESPACE # Значение идентификатора Approle, настроенной в App Role authentication backend secman.role_id: 11111111-1111-1111-1111-111111 # Блок параметров для wrapped-token # Имя файла с wrapped-token-ом secman.wrapped_token.path: /etc/opensearch-dashboards/secman/approle_wrapped_secret_id # Блок параметров для KV (Получение траст-сертификатов) # Тип сертификатов, получаемых из KV secman.kv.cert.type: pem # Версия KV движка secman.kv.engine_version: 1 # Путь к KV движку secman.kv.mount.path: NAMESPACE/KV/MOUNT/PATH/KV # Папка в KV secman.kv.dir.path: dir_in_your_kv # Ключ в KV secman.kv.truststore_key: key_name_in_your_kv_dir_for_trust_cert # Блок параметров для PKI (Генерация сертификатов для PVS) # Тип сертификатов, получаемых из PKI secman.pki.cert.type: pem # Путь к PKI-движку secman.pki.fetch.mount.path: path_to_PKI_engine # PKI-роль для выпуска сертификата secman.pki.fetch.role: PKI-client-server-DNS-role-name # Блок по сертификатам для взаимодействия Dashboards с кластером PVS # Common name для сертификата secman.dashboard.opensearch.cn: hostname_fqdn # Блок по сертификатам для взаимодействия Dashboards с клиентом # Common name для сертификата secman.dashboard.server.cn: hostname_fqdn
Описание всех возможных параметров файла secman_dashboards.yml
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
secman.enabled |
Включена интеграция Dashboards с Secret Management System |
Да |
- |
secman.address |
Хост и порт - Адрес Secret Management System |
Да |
- |
secman.namespace |
Используемый namespace |
Да |
- |
secman.role_id |
role_id хранилища Secret Management System |
Да |
- |
secman.role_id.path |
Путь к значению role_id в файле, если его значение не указано в параметре secman.role_id. |
Нет |
Должен быть заполнен либо secman.role_id.path либо secman.role_id. Если заполнены оба параметра, то по умолчанию берется параметр указанный последним. |
secman.wrapped_token.path |
Место хранения wrapped-токена для получения secret_id |
Да |
– |
secman.pki.fetch.mount.path |
Путь к PKI-engine |
Нет |
PKI |
secman.pki.fetch.role |
Наименование роли PKI движка Secret Management System, которая позволяет выпускать и обновлять сертификаты |
Да |
– |
secman.pki.cert.type |
Формат PKI сертификатов. Возможные значения pem, pkcs12 и jks. |
Нет |
pkcs12 |
secman.pki.alt_names |
Массив alt names сертификатов |
Нет |
– |
secman.kv.mount.path |
Путь к KV engine |
Да |
– |
secman.kv.engine_version |
Версия KV engine. Возможные варианты заполнения: «1» или «2». Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
1 |
secman.kv.dir.path |
Путь к каталогу с секретами в KV engine. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах path |
secman.kv.truststore_key |
Ключ к цепочке KV сертификатов. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …truststore_key |
secman.kv.password_key |
Ключ от пароля к цепочке KV сертификатов |
Нет |
Если параметр не заполнен, то для каждого сертификата используется его собственное значение пути, указанное в параметрах …password_key |
secman.kv.cert.type |
Формат KV сертификатов. Возможные значения pem, pkcs12 и jks. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
pkcs12 |
secman.token.ttl.sec |
Время жизни wrapped-токена. По умолчанию - 86400 секунд (24 часа). ВАЖНО: если в параметре указано значение больше, чем указано на сервере Secret Management System - SRHX будет использовать значение, которое приходит от сервера Secret Management System. Если в параметре указано значение меньше, чем на сервере Secret Management System - SRHX использует значение в параметре secman.token.ttl.sec |
Нет |
86400s |
secman.token.refresh.period.sec |
Период обновления wrapped-токена в секундах |
Нет |
По умолчанию 10/35 периода обновления токена на сервере Secret Management System |
secman.token.secret.key |
Ключ wrapped-токена |
Нет |
secret_id |
secman.open.timeout.sec |
Connection timeout при отправке запроса на Secret Management System сервер. По умолчанию 5 секунд |
Нет |
5 |
secman.read.timeout.sec |
Read timeout при отправке чтении ответа от Secret Management System сервера. По умолчанию 5 секунд |
Нет |
5 |
secman.retries.max |
Максимальное количество повторов каждого запроса к Secret Management System серверу в случае ошибок. По умолчанию 6 попыток |
Нет |
6 |
secman.retries.interval.ms |
Время ожидания между повторами в миллисекундах. |
Нет |
По умолчанию время ожидания между повторами увеличивается экспоненциально с каждой попыткой. Начальное значение - 1с |
secman.cert.ttl.sec |
Время жизни сертификата в секундах. По умолчанию - 2592000 секунд (1 месяц) |
Нет |
2592000s |
secman.cert.refresh.period.sec |
Период запуска проверки обновления сертификата. По умолчанию 3600 секунд (1 час). Как часто SRHX проверяет, не наступил ли момент времени для обновления сертификата равный значению «Даты истечения сертификата» в секундах минус значение параметра secman.cert.refresh.before.sec |
Нет |
3600s (если secman.cert.ttl.sec больше данного параметра) иначе 2/3 от значения параметра secman.cert.ttl.sec |
secman.cert.refresh.before.sec |
Интервал времени перед моментом устаревания текущего сертификата, в течении которого производятся попытки обновления сертификата. По умолчанию 86400 секунд (24 часа). Интервал времени в секундах, за который необходимо инициировать процесс обновления сертификата до даты его истечения |
Нет |
24h |
secman.ssl.verify |
Параметр, отвечающий за проверку сертификата Secret Management System для установки доверительного соединения |
Нет |
false |
secman.ssl.truststore_filepath |
Место расположение сертификатов, которые позволяют установить доверительное соединение с Secret Management System |
Да, если secman.ssl.verify равен true |
- |
secman.kv.base64_certs |
Параметр, отвечающий за необходимость раскодирования сертификатов из кодировки Base64. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
true |
secman.kv.base64_passwords |
Параметр, отвечающий за необходимость раскодирования паролей от сертификатов из кодировки Base64. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
false |
secman.auth_method |
Путь к движку аутентификации по approle |
Нет |
approle |
Настройка сертификата для шифрования взаимодействия Dashboards с кластером SRHX
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
secman.dashboard.opensearch.cn |
CN сертификата transport-уровня |
Да |
- |
secman.dashboard.opensearch.pki.role |
Наименование роли PKI движка Secret Management System для внутрикластерного уровня |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра secman.pki.fetch.role |
secman.dashboard.opensearch.kv.truststore_path |
Наименование папки transport.truststore в KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра secman.kv.dir.path |
secman.dashboard.opensearch.kv.truststore_key |
Ключ к цепочке KV transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра secman.kv.truststore_key |
secman.dashboard.opensearch.kv.truststore_template |
Шаблон для валидации сертификата из KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled |
secman.dashboard.opensearch.kv.password_path |
Путь к хранилищу пароля для KV transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра secman.kv.dir.path |
secman.dashboard.opensearch.kv.password_key |
Ключ к паролю transport.truststore. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если не указано значение, то используется значение параметра secman.kv.password_key |
secman.dashboard.opensearch.kv.password_template |
Шаблон для валидации пароля сертификата из KV. Если secman.kv.mount.path не заполнен, то парметр не обязательный |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled |
secman.dashboard.opensearch.pki.alt_names |
alt names сертификата внутрикластерного уровня |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра secman.pki.alt_names |
Настройка сертификата для шифрования взаимодействия Dashboards с клиентом
Параметр |
Описание параметра |
Обязательность |
Значение по умолчанию |
|---|---|---|---|
secman.dashboard.server.cn |
CN сертификата http-уровня |
Да |
- |
secman.dashboard.server.pki.role |
Наименование роли PKI движка Secret Management System для шифрования взаимодействия Dashboards с клиентом |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.fetch.role). Если не заполнен, то значение роли определяется по значению параметра secman.pki.fetch.role |
secman.dashboard.server.kv.truststore_path |
Наименование папки http.truststore в KV |
Нет |
Если не указано значение, то используется значение параметра secman.kv.dir.path |
secman.dashboard.server.kv.truststore_key |
Ключ к цепочке KV http.truststore |
Нет |
Если не указано значение, то используется значение параметра secman.kv.truststore_key |
secman.dashboard.server.kv.truststore_template |
Шаблон для валидации сертификата из KV |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_certs). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled |
secman.dashboard.server.kv.password_path |
Путь к хранилищу пароля для KV http.truststore |
Нет |
Если не указано значение, то используется значение параметра secman.kv.dir.path |
secman.dashboard.server.kv.password_key |
Ключ к паролю http.truststore |
Нет |
Если не указано значение, то используется значение параметра secman.kv.password_key |
secman.dashboard.server.kv.password_template |
Шаблон для валидации пароля сертификата из KV |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.base64_passwords). Если не заполнен, то необходимость раскодирования определяется по значению параметра secman.base64_enabled |
secman.dashboard.server.pki.alt_names |
alt names сертификата взаимодействия Dashboards с клиентом |
Нет |
Если параметр заполнен, то используется значение параметра (даже если значение противоречит параметру secman.pki.alt_names). Если не заполнен, то значение alt names сертификата определяется по значению параметра secman.pki.alt_names |
Настройка интеграции с внешним провайдером аудита#
Установка плагина Аудита#
Плагин Аудита находится в составе плагина Security и устанавливается вместе с ним.
Настройка внешнего провайдера Аудита#
Включение Аудита в SRHX
Для включения аудита и для того, что бы opensearch начал использовать плагин аудита, в opensearch.yml добавьте/измените параметр типа аудита plugins.security.audit.type на ru.sbt.audit.PlatformVAuditSink.
sudo nano /etc/opensearch/opensearch.yml
Пропишите:
plugins.security.audit:
type: ru.sbt.audit.PlatformVAuditSink
Настройка параметров Аудита
Большинство настроек Аудита описываются в файле /etc/opensearch/audt-appl.properties и считываются при запуске программы.
Замените все содержимое файла (удалите весь текст в существующем фале) /etc/opensearch/audt-appl.properties текстом, указанным в готовом образе audt-appl.properties, изменив необходимые значения.
Готовый образец audt-appl.properties
#Шаблон конфигурации аудита для использования в компании
#Подставьте необходимые значения там, где требуется.
#Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.
#Метод балансировки между группами.
#STD - для переключения на вторую группу, при отказе первой. DUP - всегда писать в обе группы одновременно.
union-audit.circuit-breaker.mode=<STD/DUP>
#Код подсистемы
UFS_SUBSYSTEM_CODE=<PLATFORM_V_SEARCH>
#Имя приложения, которое пишет события
EAR_NAME=<PLATFORM_V_SEARCH>
#Версия приложения, которое пишет события
EAR_VERSION=<R1.6.0>
#Заполнять в соответствии с вашим стендом
CHANNEL=<SUPPORT>
SECTOR=<DICT>
audit.sourceSystem=<sourceSystem>
audit.CImodule=<CImodule>
#Если события аудита нужно писать в формате UNION
#Кластер kafka 1
union-audit.kafka.kafka_1.bootstrap.servers=<sample-efs-kafka-server-01:9093>,<sample-efs-kafka-server-02:9093>
union-audit.kafka.kafka_1.security.protocol=SSL
union-audit.kafka.kafka_1.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_1.request.timeout.ms=1500
union-audit.kafka.kafka_1.delivery.timeout.ms=1500
union-audit.kafka.kafka_1.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_1.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_1.topic.audit-metamodel-in=<your.metamodel_topic>
union-audit.balance_group.union_audit.main=true
union-audit.balance_group.union_audit.priority=-1
union-audit.balance_group.union_audit.eventProtocol=UNION
union-audit.balance_group.union_audit.balanceMode=RR
union-audit.balance_group.union_audit.providers=kafka_1
union-audit.balance_group.union_audit.circuit_breaker.failureThreshold=1
#Если события аудита нужно писать в формате AVRO
# Кластер kafka 2
union-audit.kafka.kafka_2.bootstrap.servers=<sample-union-kafka-server-01:9093>
union-audit.kafka.kafka_2.security.protocol=SSL
union-audit.kafka.kafka_2.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_2.request.timeout.ms=1500
union-audit.kafka.kafka_2.delivery.timeout.ms=1500
union-audit.kafka.kafka_2.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_2.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_2.topic.audit-metamodel-in=<your.metamodel_topic>
union-audit.balance_group.union_audit_2.main=false
union-audit.balance_group.union_audit_2.priority=-1
union-audit.balance_group.union_audit_2.eventProtocol=AVRO
union-audit.balance_group.union_audit_2.balanceMode=RR
union-audit.balance_group.union_audit_2.providers=kafka_2
union-audit.balance_group.union_audit_2.circuit_breaker.failureThreshold=1
#Если события аудита нужно писать в формате UFS
# Кластер kafka 3
union-audit.kafka.kafka_3.bootstrap.servers=<sample-kafka-3-server-01:9093>,<sample-kafka-3-server-02:9093>
union-audit.kafka.kafka_3.security.protocol=SSL
union-audit.kafka.kafka_3.ssl.enabled.protocols=TLSv1.2
union-audit.kafka.kafka_3.request.timeout.ms=1500
union-audit.kafka.kafka_3.delivery.timeout.ms=1500
union-audit.kafka.kafka_3.topic.audit-events-crit-in=<your.events_topic>
union-audit.kafka.kafka_3.topic.audit-events-uncrit-in=<your.events_topic>
union-audit.kafka.kafka_3.topic.audit-metamodel-in=<your.metamodel_topic>
# Группа для отправки сообщений в формате AVRO
union-audit.balance_group.union_audit_3.main=false
union-audit.balance_group.union_audit_3.priority=0
union-audit.balance_group.union_audit_3.eventProtocol=UFS
union-audit.balance_group.union_audit_3.balanceMode=RR
union-audit.balance_group.union_audit_3.providers=kafka_3
union-audit.balance_group.union_audit_3.circuit_breaker.failureThreshold=1
**Настройки ниже идут по умолчанию в продукте Platform V Search**
#Если нужно изменить данные настройки, то укажите их в файле audt-appl.properties как показано ниже
#Максимальное количество отправляемых сообщений уровня WARN
#Quota.Threshold.Warn.Count=50000
#Максимальное значение общего размера отправляемых событий уровня WARN
#Quota.Threshold.Warn.TotalSize=50000
#Максимальное количество отправляемых сообщений уровня ERROR
#Quota.Threshold.Error.count=100000
#Максимальное значение общего размера отправляемых событий уровня ERROR
#Quota.Threshold.Error.TotalSize=100000
#Время эскалации с уровня WARN до уровня ERROR в секундах
#Quota.Escalation.Period=2
#Количество попыток отправки batch сообщений уровня WARN
#Batch.Send.Timeout.Warning.Quota=1
#Количество попыток отправки batch сообщений уровня ERROR
#Batch.Send.Timeout.Error.Quota=2
#Параметр, задающий максимальное количество асинхронно выполняемых задач отправки некритичных событий аудита
#Async.SendUncritical.Max.Tasks=1000
#Параметр, задающий таймаут опроса буфера асинхронных задач в мс.
#LocalBuffer.Queue.CheckInterval=50000
#Параметр, задающий размер локального буфера.
#LocalBuffer.Size=52428800
#Параметр, задающий таймаут ожидания асинхронной отправки в мс.
#LocalBuffer.Async.SendTimeout=50000
#Максимальный размер события аудита
#audit.properties.maxRequestSize=1000000
#Максимамльный размер параметра события аудита
#audit.properties.maxBaseParameterSize=1024
#Максимальное количество потоков в threadpool в кме
#audit.ufs.client_module.context.pool.parallelism=30
#Использовать ли валидатор КМа для проверки правильности полей и событий аудита
#ufs.use.validator=false
#Перезаписывать значение userNode значением remote adress
#UserNode.NotOverride=true
#Выключает логи
#disableLogs=false
Описание всех возможных настроек параметров в audt-appl.properties:
Имя параметра |
Описание |
|---|---|
circuit-breaker.mode |
Режим отправки событий (стандартный - STD /дублированный - DUP) |
UFS_SUBSYSTEM_CODE |
Код подсистемы |
EAR_NAME |
Имя приложения, которое пишет события |
EAR_VERSION |
Версия приложения, которое пишет события |
CHANNEL |
Наименование канала. Параметр зависит от стенда. |
SECTOR |
Наименование сектора. Параметр зависит от стенда. |
audit.sourceSystem |
Конфигурационный элемент функциональной подсистемы (КЭ ФП) + знак нижнего подчеркивания ( _ ) + имя модуля (например CI03686561_CFGA_SERVICE). Обязательно для заполнения. Параметр зависит от стенда. |
audit.CImodule |
Название/конфигурационный элемент автомаизированной системы(КЭ АС), которая является источником события. Единый для всех компонентов АС-инсталляции. Рекомендуется заполнять в виде «CI1111111111 Название автоматизированной системы», где CI1111111111 это идентификатор (КЭ) АС. |
Kafka (union-audit.kafka.) |
- |
kafka-1.bootstrap.servers |
Имя хоста и порт для подключения к главному кластеру 1 |
kafka-2.bootstrap.servers |
Имя хоста и порт для подключения к резервному кластеру 2 |
kafka_1.ssl.endpoint.identification.algorithm |
Алгоритм идентификации кластера 1 |
kafka_2.ssl.endpoint.identification.algorithm |
Алгоритм идентификации кластера 2 |
kafka_1.security.protocol |
Протокол безопасности подключения к кластеру 1 |
kafka_2.security.protocol |
Протокол безопасности подключения к кластеру 2 |
kafka_1.ssl.enabled.protocols |
Список протоколов кластеру кластера 1, поддерживающихся SSL |
kafka_2.ssl.enabled.protocols |
Список протоколов кластеру кластера 2, поддерживающихся SSL |
kafka_1.request.timeout.ms |
Максимальное время (в миллисекундах), в течение которого клиент будет ждать ответа от сервера для кластера 1. Если сервер не ответит в течение этого времени, запрос будет считаться неудачным |
kafka_2.request.timeout.ms |
Максимальное время (в миллисекундах), в течение которого клиент будет ждать ответа от сервера для кластера 2. Если сервер не ответит в течение этого времени, запрос будет считаться неудачным |
kafka_1.delivery.timeout.ms |
Максимальное время (в миллисекундах), в течение которого запись будет пытаться доставиться перед тем, как будет считаться неудачной в кластера 1 |
kafka_2.delivery.timeout.ms |
Максимальное время (в миллисекундах), в течение которого запись будет пытаться доставиться перед тем, как будет считаться неудачной в кластера 2 |
kafka_1.topic.audit-events-crit-in |
Наименование topic с событиями уровня CRITICAL для кластера 1 |
kafka_2.topic.audit-events-crit-in |
Наименование topic с событиями уровня CRITICAL для кластера 2 |
kafka_1.topic.audit-events-uncrit-in |
Наименование topic с событиями уровня UNCRITICAL для кластера 1 |
kafka_2.topic.audit-events-uncrit-in |
Наименование topic с событиями уровня UNCRITICAL для кластера 2 |
kafka_1.topic.audit-metamodel-in |
Наименование topic регистрации метамоделей для кластера 1 |
kafka_2.topic.audit-metamodel-in |
Наименование topic регистрации метамоделей для кластера 2 |
kafka_1/kafka_2.batch.size |
Максимально допустимый размер пакета сообщений в байтах для кластера 1/2 |
kafka_1/kafka_2.buffer.memory |
Максимально допустимый объем памяти в байтах, которое КМ кластера 1/2 может использовать для буферизации сообщений, ожидающих отправки на сервер |
kafka_1/kafka_2.compression.type |
Тип сжатия для всех данных для кластера 1/2 (none, gzip, snappy, lz4, zstd) |
kafka_1/kafka_2.connections.max.idle.ms |
Время в миллисекундах, спустя которое будут закрыты все бездействующие соединения для кластера 1/2 |
kafka_1/kafka_2.linger.ms |
Время задержки перед отправкой пакета событий в миллисекундах для кластера 1/2. За это время в пакет могут добавиться дополнительные события |
kafka_1/kafka_2.max.block.ms |
Эта настройка определяет время блокировки методов Kafka кластера 1/2 |
kafka_1/kafka_2.max.request.size |
Максимальный размер запроса в байтах для кластера 1/2 |
kafka_1/kafka_2.metadata.max.age.ms |
Интервал в миллисекундах, после которого происходит принудительное обновление метаданных, для раннего обнаружения новых брокеров и разделов кластера 1/2 |
kafka_1/kafka_2.receive.buffer.bytes |
Размер TCP-буфера для получения данных для кластера 1/2. Если установлено значение -1, будет использоваться значение по умолчанию для операционной системы. |
kafka_1/kafka_2.send.buffer.bytes |
Размер TCP-буфера для отправки данных для кластера 1/2. Если установлено значение -1, будет использоваться значение по умолчанию для операционной системы. |
Группы балансировки (union-audit.balance_group.) |
- |
union_audit.main |
Признак основного провайдера аудита. По умолчанию true |
union_audit_2.main |
Признак основного провайдера аудита. По умолчанию false |
union_audit.providerClass, union_audit_2.providerClass |
Класс провайдера |
union_audit.priority, union_audit_2.priority |
Приоритет отправки сообщений. По умолчанию - 1 |
union_audit.eventProtocol, union_audit_2.eventProtocol |
Формат отправки сообщений. (OPM AC Единый аудит - параметр UNION, back - параметр UFS, front - параметр AVRO) |
union_audit.balanceMode, union_audit_2.balanceMode |
Метод балансировки. По умолчанию - RR. (RR - round robin, WRR - weighted round robin) |
union_audit.circuit_breaker.recoveryTimeout, union_audit_2.circuit_breaker.recoveryTimeout |
Время восстановления соединения |
union_audit.circuit_breaker.successThreshold, union_audit_2.circuit_breaker.successThreshold |
Максимальное количество попыток отправки сообщений |
union_audit.circuit_breaker.mode, union_audit_2.circuit_breaker.mode |
Режим работы circuit breaker. По умолчанию – ERROR_WINDOW |
union_audit.circuit_breaker.failureThreshold, union_audit_2.circuit_breaker.failureThreshold |
Минимальное количество попыток отправки событий |
union_audit.circuit_breaker.failureRateThreshold, union_audit_2.circuit_breaker.failureRateThreshold |
Максимальный процент ошибок в потоке запросов, после превышения которого Circuit breaker перейдет в режим OPEN - поток запросов будет прерван |
union_audit.maxMsgSizeBytes, union_audit_2.maxMsgSizeBytes |
Максимальный размер сообщения |
union_audit.providers, union_audit_2.providers |
Провайдер, к которому применяются настройки.(Значения kafka_1 или kafka_2) |
Quota.Threshold.Warn.Count |
Максимальное количество отправляемых сообщений уровня WARN |
Quota.Threshold.Warn.TotalSize |
Максимальное значение общего размера отправляемых событий уровня WARN |
Quota.Threshold.Error.count |
Максимальное количество отправляемых сообщений уровня ERROR |
Quota.Threshold.Error.TotalSize |
Максимальное значение общего размера отправляемых событий уровня ERROR |
Quota.Escalation.Period |
Время эскалации с уровня WARN до уровня ERROR в секундах |
Batch.Send.Timeout.Warning.Quota |
Количество попыток отправки batch сообщений уровня WARN |
Batch.Send.Timeout.Error.Quota |
Количество попыток отправки batch сообщений уровня ERROR |
Async.SendUncritical.Max.Tasks |
Параметр, задающий максимальное количество асинхронно выполняемых задач отправки некритичных событий аудита |
POOL_PARALLELISM |
Размер пула для асинхронной отправки некритичных сообщений. Минимальное значение - 1. Если указать значение меньше минимального, то будет применено значение по умолчанию (16) |
LocalBuffer.Queue.CheckInterval |
Параметр, задающий таймаут опроса буфера асинхронных задач в мс. |
LocalBuffer.Size |
Параметр, задающий размер локального буфера. |
LocalBuffer.Async.SendTimeout |
Параметр, задающий таймаут ожидания асинхронной отправки в мс. |
audit.properties.maxRequestSize |
Максимальный размер события аудита |
audit.properties.maxBaseParameterSize |
Максимамльный размер параметра события аудита |
audit.ufs.client_module.context.pool.parallelism |
Максимальное количество потоков в threadpool в кме |
ufs.use.validator |
Использовать ли валидатор КМа для проверки правильности полей и событий аудита |
UserNode.NotOverride |
Перезаписывать значение userNode значением remote adress |
disableLogs |
Выключает логи |
Настройка SSL соединения#
При подключении по протоколу SSL укажите плагин месторасположения сертификатов и паролей от них в виде аргументов для java машины в файле /etc/opensearch/audt-appl.properties.
Внимание!
Выполнение данного пункта для компонента SRHX требуется для обеспечения работы при недоступности Secret Management System.
Параметры необходимые для работы плагина аудита по SSL:
# Полный путь к keystore с сертификатами для подключения к kafka
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks
# Полный путь к keystore с корневым сертификатом для подключения к kafka
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks
Для этого откройте файл /etc/opensearch/audt-appl.properties и укажите в нем эти переменные, заменив значения на необходимые.
sudo nano /etc/opensearch/audt-appl.properties
audit.kafka.ssl.keystore.location=/etc/opensearch/secman/certs/keystore.jks
audit.kafka.ssl.truststore.location=/etc/opensearch/secman/certs/truststore.jks
Добавление параметров в opensearch-keystore
Добавьте в opensearch-keystore пароли от keystore с сертификатами шифрования Аудита. Это будут параметры:
plugins.security.ssl.audit.keystore_password_secure. Пароль от keystore с сертификатом для шифрования соединения Аудита. (сертификаты для подключения к kafka).
plugins.security.ssl.audit.truststore_password_secure. Пароль от keystore с корневым сертификатом для шифрования соединения Аудита.
Внимание!
opensearch-keystoreбудет создан для пользователя linux, от которого будут запускаться команды. Не выполняйте команды из-подroot! Используйте для этого пользователяopensearch.
Создайте keystore с помощью параметра create, если он еще не был создан до этого.
Если keystore был создан при конфигурации сервера, перейдите к шагу добавления параметров.
Создание нового хранилища
#создаем хранилище, если оно еще не существует
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore create'
Добавьте необходимые параметры при помощи параметра add.
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.audit.keystore_password_secure'
#после команды будет ожидать ввода данных
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.audit.truststore_password_secure'
#после команды будет ожидать ввода данных
Настройка интеграции с компонентом IAM Proxy/СУДИР (опционально)#
Методы аутентификации настраиваются в файле config.yml, который находится в /etc/opensearch/opensearch-security/.
Пример стандартного config.yml
---
_meta:
type: "config"
config_version: 2
config:
dynamic:
#do_not_fail_on_forbidden: false
http:
anonymous_auth_enabled: false
xff:
enabled: false
internalProxies: '192\.168\.0\.10|192\.168\.0\.11' # regex pattern
#internalProxies: '.*' # trust all internal proxies, regex pattern
#remoteIpHeader: 'x-forwarded-for'
authc:
basic_internal_auth_domain:
description: "Authenticate via HTTP Basic against internal users database"
http_enabled: true
transport_enabled: true
order: 0
http_authenticator:
type: basic
challenge: true
authentication_backend:
type: intern
proxy_auth_domain:
description: "Authenticate via proxy"
http_enabled: false
transport_enabled: false
order: 1
http_authenticator:
type: proxy
challenge: false
config:
user_header: "x-proxy-user"
roles_header: "x-proxy-roles"
authentication_backend:
type: noop
jwt_auth_domain:
description: "Authenticate via Json Web Token"
http_enabled: false
transport_enabled: false
order: 2
http_authenticator:
type: jwt
challenge: false
config:
signing_key: "base64 encoded HMAC key or public RSA/ECDSA pem key"
jwt_header: "Authorization"
jwt_url_parameter: null
jwt_clock_skew_tolerance_seconds: 30
roles_key: null
roles_sub_key: null
subject_key: null
authentication_backend:
type: noop
clientcert_auth_domain:
description: "Authenticate via SSL client certificates"
http_enabled: false
transport_enabled: false
order: 3
http_authenticator:
type: clientcert
config:
username_attribute: cn #optional, if omitted DN becomes username
challenge: false
authentication_backend:
type: noop
Описание основных используемых параметров указанных в примере config.yml:
Имя параметра |
Описание |
|---|---|
config.dynamic: do_not_fail_on_forbidden: false |
Не показывать ошибку или отказ пользователю, если у него нет прав доступа к обращаемому адресу/полю/сегменту |
config.dynamic.http: anonymous_auth_enabled: false |
Разрешить доступ неавторизованным пользователям. По умолчанию false. |
config, dynamic, authc |
Здесь происходит перечисление тех методов аутентификации, которые будут использоваться в данном кластере |
basic_internal_auth_domain: |
Имя метода |
description: |
Краткое описание метода |
http_enabled: true |
Включить работу метода на HTTP-уровне |
transport_enabled: true |
Включить работу метода на транспортном-уровне |
order: 4 |
Порядок вызова данного метода. |
http_authenticator: |
Блок настройки параметров данного метода аутентификации |
type: basic |
Тип используемой аутентификации. |
challenge: true |
Требовать запрос данных при каждом запросе. Сервер будет ожидать заголовки аутентификации в запросе |
authentication_backend: |
Блок настройки проверки аутентификационных данных |
type: intern |
Тип проверки. |
http_authenticator:config:roles_sub_key |
В параметре должно быть установлено значение параметра токена с дополнительными ролями пользователя |
Настройка аутентификации с IAM/СУДИР без проверки токена#
Внимание!
Для соединения с компонентом IAM Proxy в компоненте SRHX должны использоваться сертификаты, подписанные тем же УЦ, что и сертификаты в
Proxy.
Замените все содержимое файла
/etc/opensearch/opensearch-security/config.ymlна текст, указанный ниже:config.yml для Proxy
_meta: type: "config" config_version: 2 config: dynamic: http: anonymous_auth_enabled: false xff: enabled: true remoteIpHeader: "x-forwarded-for" internalProxies: "SRHX-ip-address" authc: proxy_auth_domain: description: "Authenticate via proxy" http_enabled: true transport_enabled: true order: 0 http_authenticator: type: proxy challenge: false config: user_header: "x-proxy-user" roles_header: "x-proxy-roles" authentication_backend: type: noop basic_internal_auth_domain: description: "Authenticate via HTTP Basic against internal users database" http_enabled: true transport_enabled: true order: 1 http_authenticator: type: basic challenge: false authentication_backend: type: internПри заполнении используйте следующие параметры.
Имя параметра |
Описание |
|---|---|
xff: |
|
remoteIpHeader |
В данном заголовке передаются все адреса серверов прокси, которые будут использоваться. Все остальные адреса, которые не будут здесь указаны, система будет считать клиентскими. |
internalProxies |
Вместо |
proxy_auth_domain.http_authenticator: |
|
user_header |
Должно быть указано имя заголовка HTTP-запроса, в котором будет содержаться логин пользователя |
roles_header |
Должно быть указано имя заголовка HTTP-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси |
x-proxy-user и x-proxy-roles – стандартные названия заголовков. Точное значение параметра уточните у владельца прокси.
Внимание!
После редактирования файла
config.yml, примените новые значения, с помощью запуска скриптаsecurityadmin.sh. Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.
Добавьте в файл
opensearch_dashboards.ymlследующие параметры:Пример заполнения файла opensearch_dashboards.yml:
opensearch_dashboards.yml для Proxy
server: host: "имя хоста" port: порт basePath: /pvs rewriteBasePath: true ssl: enabled: true keystore.path: /etc/opensearch/certs/keystore.p12 opensearch: hosts: - https://имя хоста SRHX сервера:порт ssl: alwaysPresentCertificate: true verificationMode: full certificateAuthorities: /etc/opensearch/certs/keystore.p12 keystore.path: /etc/opensearch/certs/keystore.p12 requestHeadersAllowlist: - authorization - securitytenant - x-forwarded-for - x-proxy-user - x-proxy-roles logging: dest: /var/log/opensearch-dashboards.log json: false verbose: true opensearch_security: auth.type: "proxy" proxycache: user_header: "x-proxy-user" roles_header: "x-proxy-roles" cookie.secure: trueДля настройки соединения заполните следующие параметры:
Имя параметра
Описание
opensearch.requestHeadersAllowlist
В данном параметре перечисляются имена заголовков, которые будут считываться из HTTP-запроса.
Должны быть указаны дополнительные значенияx-forwarded-for,x-proxy-user,x-proxy-roles.
Например: opensearch.requestHeadersAllowlist:["authorization", "security_tenant", "x-forwarded-for","x-proxy-user","x-proxy-roles"]opensearch_security.auth.type
Отвечает за разрешенные типы аутентификации - данный параметр должен иметь значение
proxyopensearch_security.proxycache.user_header
Должно быть указано имя заголовка HTTP-запроса, в котором будет содержаться логин пользователя
opensearch_security.proxycache.roles_header
Должно быть указано имя заголовка HTTP-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси
Если подключение происходит к прокси, у которого существует несколько ответвлений, то дополнительно должны быть заполнены следующие параметры:
Имя параметра
Описание
server.basePath
Данный параметр должен содержать адрес ответвления. Например, если ответвление на IAM находится по адресу
https://<server>:<port>/example, то в параметре basePath должно быть указано значение /exampleserver.rewriteBasePath
Данный параметр позволяет вырезать указанный выше дополнительный адрес из запросов к серверу. Должен быть в значении
trueВнимание!
После внесенных изменений перезагрузите компонент SRHX.
Первый вход в компонент SRHX#
Первый вход в компонент SRHX рекомендуется производить под учетной записью с ролью суперадминстратора. Ролью суперадминистратора называется предустановленная роль all_access, которая доступна в ролевой модели по умолчанию.
Данная роль позволяет в полном объеме конфигурировать экземпляр компонента SRHX, а также имеет полный доступ ко всем методам API SRHX.
Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена#
Замените все содержимое файла
/etc/opensearch/opensearch-security/config.ymlна текст, указанный ниже:config.yml для JWT
_meta: config_version: 2 type: config config: dynamic: http: anonymous_auth_enabled: false xff: enabled: false authc: openid_auth_domain: description: Authenticate via proxy http_enabled: true transport_enabled: true order: 0 http_authenticator: type: openid challenge: false config: openid_connect_url: https://your-iam-proxy/auth/realms/PlatformAuth/.well-known/openid-configuration openid_connect_idp: enable_ssl: true verify_hostnames: false pemtrustedcas_filepath: /etc/opensearch/certs/ca.crt jwks_uri: https://your-iam-proxy/auth/realms/PlatformAuth/protocol/openid-connect/certs insider_jwt_field: null insider_jwt_value: null insider_jwt_role: null subject_key: sub roles_key: groups authentication_backend: type: noop basic_internal_auth_domain: description: "Authenticate via HTTP Basic against internal users database" http_enabled: true transport_enabled: true order: 1 http_authenticator: type: basic challenge: false authentication_backend: type: internЗаполните:
Имя параметра
Описание
openid_connect_url
Должна быть указана ссылка на параметры конфигурации OIDC. Обычно ссылка имеет вид
http(s)://<server>:<port>/auth/realms/<realm>/.well-known/openid-configurationopenid_connect_idp.pemtrustedcas_filepath
Должен быть указан путь к корневому сертификату, который использует провайдер
jwks_uri
Должна быть указана ссылка на место хранения публичных ключей конфигурации OIDC
insider_jwt_field
Должен быть указан ключ JWT токена, в котором содержится описание дополнительной роли (если применимо)
insider_jwt_value
Должно быть указано значение поля JWT токена, при котором применяется дополнительная роль (если применимо)
insider_jwt_role
Должно быть указано наименование дополнительной роли (если применимо)
subject_key
Должно быть установлено значение параметра токена с логином пользователя
roles_key
Должно быть установлено значение параметра токена с ролями пользователя
Внимание!
После редактирования файла
config.yml, примените новые значения, с помощью запуска скриптаsecurityadmin.sh. Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.Добавьте в файл
opensearch_dashboards.ymlследующие параметры:Пример заполнения файла opensearch_dashboards.yml:
opensearch_dashboards.yml для JWT
server: host: "имя хоста" port: порт basePath: /pvs rewriteBasePath: true ssl: enabled: true keystore.path: /etc/opensearch/certs/keystore.p12 opensearch: hosts: - https://имя хоста SRHX сервера:порт ssl: alwaysPresentCertificate: true verificationMode: full certificateAuthorities: /etc/opensearch/certs/keystore.p12 keystore.path: /etc/opensearch/certs/keystore.p12 requestHeadersAllowlist: - authorization - securitytenant logging: dest: /var/log/opensearch-dashboards.log json: false verbose: true opensearch_security: auth.type: "jwt" jwt.enabled: true # jwt.url_param: "url_param" cookie.secure: trueДля настройки соединения заполните следующие параметры:
Имя параметра
Описание
opensearch.requestHeadersAllowlist
В данном параметре перечисляются имена заголовков, которые сервис будет считывать из HTTP-запроса.
Должны быть добавлены значенияauthorizationиsecurity_tenant. Например:opensearch.requestHeadersAllowlist: ["authorization", "security_tenant"]opensearch_security.auth.type
Отвечает за разрешенные типы авторизации – данный параметр должен иметь значение
jwtopensearch_security.jwt.enabled
Должен быть в значении
trueopensearch_security.jwt.url_param
Если токен передается не в HTTP-заголовке, а как параметр URL, то нужно указать этот параметр здесь
Внимание!
После внесенных изменений перезагрузите компонент SRHX.
Настройка плагина KNN#
Для работы плагина KNN установите пакет openblas.
sudo yum install openblas
Обновление#
Для обновления на новую версию или переустановки компонента SRHX для каждой node выполните следующие действия:
Остановить node.
Очистите директорию
/usr/share/opensearch/*.Распакуйте новую версию компонента SRHX в эту директорию.
Измените владельца и права на директорию и файлы.
Установите плагины для компонента SRHX.
Запустить node.
Повторите данное действие для всех node кластера.
Важно!
В момент обновления на новую версию кластер SRHX не сможет работать на запись в новые node, пока версии компонента SRHX различаются на node кластера. Как только все node будут обновлены до новой версии, запись снова станет возможна.
Node с ролью
cluster_managerдолжны быть обновлены в последнюю очередь, так как node с данной ролью отвечает за управлени кластером и не сможет вернуть в кластер дата-node со старой версией SRHX.
Каталог /etc/opensearch нет необходимости изменять даже при обновлении версии компонента SRHX. Все настройки сохраняются и автоматически будут обновлены.
Удаление#
Удаление дополнительных средств защиты информации осуществляется в соответствии с документацией к ним. Для удаления компонента SRHX необходимо удалить главную папку opensearch и opensearch-dashboards:
sudo rm -rf /usr/share/opensearch /usr/share/opensearch-dashboards
Проверка работоспособности#
Учетная запись под которой осуществляется проверка, должна иметь достаточно прав, для этих действий. В стандартной ролевой модели можно использовать учетную запись с ролью all_access. Встроенную учетную запись можно поменять при конфигурировании компонента SRHX.
После настройки шифрования работает HTTPs, необходимо подставить используемые сертификаты на сервере в запрос.
Пример запроса через curl с сертификатами:
curl -XGET https://host:ХХХХХ/_cluster/health \
--cacert /etc/opensearch/certs/root.crt \
--cert /etc/opensearch/certs/pvs.crt \
--key /etc/opensearch/certs/pvs.key \
-u admin:admin
Проверка жизнеспособности кластера cluster/health#
GET https://host:ХХХХХ/_cluster/health
Пример ответа:

Проверка доступности компонента SRHX#
GET https://host:ХХХХХ/
Пример ответа:

Проверка работоспособности компонента SRHX#
systemctl status opensearch
systemctl status opensearch-dashboards
Если будут ошибки, то сервис будет в статусе failed.
Системные ошибки можно увидеть в самом статусе или выполнив следующую команду:
cat /var/log/messages
Для Dashboards так же доступен файл /SRHX/logs/opensearch-dashboards/stdout.log.
Ошибки программы можно увидеть в файле:
для компонента Search - /SRHX/logs/opensearch/<имя_кластера>.log;
для компонента Search-Dashboards - /SRHX/logs/opensearch-dashboards/opensearch-dashboards.log.
Если все сервисы успешно запущены, то проверить работоспособность Search можно следующими способами:
Через компонент Search-Dashboards. Во вкладке Инструменты разработки (dev tools) отправьте необходимые запросы к серверу.


Отправьте rest-запросы напрямую к Search, например через insomnia или curl, обязательно подставив в запрос сертификаты и логин/пароль пользователя внутри Search. По умолчанию это пользователь admin с паролем, указанным на форме заказа. Сертификаты можно использовать любые, подписанные тем же УЦ, что и сертификаты Search.
Выполните запросы GET _cluster/health и GET _cat/nodes?v и убедитесь, что доступны все node и кластер имеет статус green.
Пример вывода запроса.
Запрос GET _cluster/health
{
"cluster_name": "DEV_SRHX_TEST",
"status": "green",
"timed_out": false,
"number_of_nodes": 13,
"number_of_data_nodes": 10,
"discovered_master": true,
"discovered_cluster_manager": true,
"active_primary_shards": 73,
"active_shards": 155,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
Запрос GET _cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role node.roles cluster_manager name
ip_node_1 15 91 5 0.43 0.37 0.37 m cluster_manager * master-node-02
ip_node_2 42 99 19 3.96 4.43 4.21 d data - data-node-02
ip_node_3 46 98 26 4.23 4.70 4.86 d data - data-node-05
ip_node_4 10 98 5 0.81 0.74 0.66 m cluster_manager - master-node-01
ip_node_5 25 99 23 6.69 5.20 4.63 d data - data-node-04
ip_node_6 16 98 31 3.79 3.94 3.99 d data - data-node-07
ip_node_7 31 99 22 2.60 3.11 3.68 d data - data-node-10
ip_node_8 74 86 5 0.50 0.42 0.37 m cluster_manager - master-node-03
ip_node_9 50 96 17 4.55 5.40 5.09 d data - data-node-01
ip_node_10 42 97 19 2.36 3.79 4.11 d data - data-node-03
ip_node_11 23 99 23 6.01 5.53 5.30 d data - data-node-06
ip_node_12 16 98 20 4.58 3.81 3.82 d data - data-node-09
ip_node_13 12 97 23 4.70 4.49 4.52 d data - data-node-08
Проверка наличия плагинов#
После успешной установки компонента необходимо проверить, что плагины были установлены.
Проверить в пришедшем списке присутствие всех устанавливаемых плагинов на каждой node.
GET https://host:ХХХХХ/_cat/plugins?v
Пример ответа:

Внимание!
Для работы HealthCheck-плагина необходимо включить возможность анонимных запросов. Это настраивается в
config.ymlи применяется с помощью скриптаsecurityadmin.sh.
Параметр:
config:
dynamic:
http:
anonymous_auth_enabled: true
Плагин HealthCheck отвечает за периодическую отправку запросов к компоненту, проверяющих жизнеспособность. Проверьте, что данный Endpoint работоспособен.
Перейдите в браузере по адресу https://host:ХХХХХ/ufs-healthcheck/test или выполните запрос к healthcheck:
GET https://host:ХХХХХ/ufs-healthcheck/<любой англ текст>
Пример ответа:

Проверка работоспособности плагина Prometheus-exporter#
Плагин Prometheus-exporter отвечает за сбор метрик кластера и создания endpoint с доступом к собранным данными в формате prometheus. Проверьте, что данный endpoint работоспособен.
GET https://host:ХХХХХ/_prometheus/metrics
Пример ответа:

Проверка корректной работоспособности аудита#
Настройте стенд компонента SRHX с плагином Security.
Выполните запрос на проверку включения аудита.
Проверьте, что параметр
enabled: true и параметрenabled: true в объекте compliance.GET https://host:port/_opendistro/_security/api/auditBasic Auth: admin/admin
Пример ответа:
{ "_readonly": [], "config": { "compliance": { "enabled": true, "write_log_diffs": false, "read_watched_fields": {}, "read_ignore_users": [ "kibanaserver" ], "write_watched_indices": [], "write_ignore_users": [ "kibanaserver" ], "read_metadata_only": true, "write_metadata_only": true, "external_config": false, "internal_config": true }, "enabled": true, "audit": { "ignore_users": [ "kibanaserver" ], "ignore_requests": [], "disabled_rest_categories": [ "AUTHENTICATED", "GRANTED_PRIVILEGES" ], "disabled_transport_categories": [ "AUTHENTICATED", "GRANTED_PRIVILEGES" ], "log_request_body": true, "resolve_indices": true, "resolve_bulk_requests": false, "exclude_sensitive_headers": true, "enable_transport": true, "enable_rest": true } } }Выполните запрос на создание индекса
test_auditи загрузку в него документа через пользователяadmin.PUT https://host:port/_bulk
Body:
{ "index" : { "_index" : "test_audit", "_id" : "0001" } } { "technic": "ноут – это моя жизнь в этом мире","furniture": "стол, стул","companies": "mycompany","date": "xxxx-xx-xxT10:30:00","specialists": "лидер разработчик","rating": 2,"status": true,"colors": "Багровый красный изотоп","age": 1,"phrases": "Шел по лесу и увидел дуб"}Basic Auth: admin/admin
Для Postman или аналогичных ПО в запросе требуется оставлять последнюю строчку пустой.
Ответ 200 ОК
{ "acknowledged": true, "shards_acknowledged": true, "index": "test_audit" }Перейдите в Kafka и найдите событие
REST_AUTHENTICATEDпо наименованию индексаtest_audit.Пример события в Kafka:
{ "createdAt": 1700747748148, "id": "4b8ce32c-fd36-4d9a-a52a-3a3d8e715c27", "metamodelVersion": "589F77C656B584E63087FD87C8AC0E6F32B47DC52B8773C186D79B47F8BA0997", "metamodelHash": "3F9F54E6444A91F5BBBABF2D0AC746F5E6E81C55B117952D8C252197AC20D7D9", "module": "PLATFORM_V_SEARCH", "name": "SEARCH_PLUGIN_AUDIT_REST_AUTHENTICATED", "nodeId": "", "requestId": null, "userName": "", "userLogin": "admin", "userNode": "{значение}", "session": "NO SESSION", "sourceSystem": "UFS", "tags": [], "params": [ { "name": "CLUSTER_NAME", "value": "srhx_mono_cluster" }, { "name": "IS_ADMIN_DN", "value": "false" }, { "name": "NODE_HOST_ADDRESS", "value": "{значение}" }, { "name": "NODE_HOST_NAME", "value": "{значение}" }, { "name": "NODE_ID", "value": "Y_MN0sMuT7iRe_fXsbjrlg" }, { "name": "NODE_NAME", "value": "{значение}" }, { "name": "REQUEST_BODY", "value": "{ \"index\" : {\"_id\" : \"0001\" } }\n{ \"technic\": \"Ноут\",\"furniture\": \"стол, стул\",\"companies\": \"mycompany\",\"trees\": \"Дуб\",\"specialists\": \"лидер разработчик\",\"games\": \"Прятки\",\"sports\": \"Футбол\",\"colors\": \"Багровый красный\",\"age\": 1,\"phrases\": \"Шёл по лесу и увидел дуб\",\"location\":\"34.423,58.432\"}\n{ \"index\" : {\"_id\" : \"0002\" } }\n{ \"technic\": \"Комп\",\"furniture\": \"Диван\",\"companies\": \"mycompany\",\"trees\": \"Дубы\",\"specialists\": \"Тестировщик\",\"games\": \"Догонялки\",\"sports\": \"Баскетбол\",\"colors\": \"Багровый\",\"age\":\"1\",\"phrases\": \"На холме росла высокая липа\",\"location\":\"36.683,54.983\"}\n" }, { "name": "REQUEST_EFFECTIVE_USER", "value": "admin" }, { "name": "REQUEST_INITIATING_USER", "value": "admin" }, { "name": "REQUEST_LAYER", "value": "REST" }, { "name": "REST_REQUEST_HEADERS", "value": "{Accept\u003d[*/*], User-Agent\u003d[PostmanRuntime/7.31.3], Connection\u003d[keep-alive], Postman-Token\u003d[0b355216-27ca-427b-83a1-e18f7d441049], Host\u003d[ADDRESS:19200], Accept-Encoding\u003d[gzip, deflate, br], Content-Length\u003d[742], Content-Type\u003d[application/json]}" }, { "name": "REST_REQUEST_METHOD", "value": "PUT" }, { "name": "REST_REQUEST_PARAMS", "value": "{index\u003dtest_audit}" }, { "name": "REST_REQUEST_PATH", "value": "/test_audit/_bulk" }, { "name": "UTC_TIMESTAMP", "value": "2023-11-23T13:55:48.147+00:00" }, { "name": "ufs.auditContextUUID", "value": "8146cb89-dc1b-4303-954d-384394847cdf" }, { "name": "ufs.categoryCode", "value": "OTHER" }, { "name": "ufs.channel", "value": "PVS" }, { "name": "ufs.criticality", "value": "UNCRITICAL" }, { "name": "ufs.earName", "value": "PLATFORM_V_SEARCH" }, { "name": "ufs.earVersion", "value": "R1.2" }, { "name": "ufs.employeeLogin", "value": null }, { "name": "ufs.gosbCode", "value": null }, { "name": "ufs.groupCode", "value": "SEARCH_PLUGIN_AUDIT" }, { "name": "ufs.isInitContext", "value": "true" }, { "name": "ufs.isSuccess", "value": "true" }, { "name": "ufs.orgUid", "value": null }, { "name": "ufs.osbCode", "value": null }, { "name": "ufs.sector", "value": "XXX" }, { "name": "ufs.serverLocation", "value": "{значение}" }, { "name": "ufs.terBankCode", "value": null }, { "name": "ufs.vspCode", "value": null } ], "changedParams": [] }
Проверка работоспособности internal users при настроенной аутентификации OIDC (JWT)#
Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена данного руководства.
Если доступ отсутствует, то обратитесь к администратору стенда, чтобы он настроил параметры для конфигурационных параметров сервера.
Выполните запрос к серверу без выбора параметра авторизации.
GET https://host:port/No Auth
Ответ 401
Отображается ошибка о том, что пользователь не авторизован.
Выполните запрос к серверу с выбором Basic Auth авторизации и пользователем IAM.
GET https://host:port/Basic Auth
user IAM / password IAM
Ответ 401
Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.
Выполните запрос для проверки, что internal user может отправить запрос на сервер.
GET https://host:port/Basic Auth: admin / admin
Ответ 200 ОК
Отображается информация о сервере.
Проверка работоспособности internal users при настроенной аутентификации IAM Proxy#
Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM/СУДИР без проверки токена данного руководства.
Выполните запрос к серверу без выбора параметра авторизации.
GET https://host:port/No Auth
Ответ 401
Отображается ошибка о том, что пользователь не авторизован.
Выполните запрос к серверу с выбором Basic Auth авторизации и пользователя IAM.
GET https://host:port/Basic Auth
Если доступ отсутствует, то обратитесь к администратору стенда.
Ответ 401
Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.
Выполните запрос к серверу, используя
Basic Authи пользователя admin.GET https://host:port/Basic Auth: admin / admin
Ответ 200 ОК
Отображается информация о сервере.
Откат#
Процедура отката предполагает откат максимум до предыдущей версии. Обязательные интеграции осуществляются в соответствии с разделами настоящего документа. При откате на предыдущую версию обязательные интеграции с компонентами Платформы поддерживают обратную совместимость.
Автоматической процедуры отката нет.
Откат к предыдущей версии компонента SRHX представляет собой удаление и установку последней стабильной версии компонента SRHX.
Для отката необходимо выполнить установку предыдущей стабильной версии компонента SRHX в соответствии с разделом Установка текущего документа.
Часто встречающиеся проблемы и пути их устранения#
При возникновении проблемы с отображением страницы конкретного шаблона индекса:
откройте файл .i18nrc.json, вызвав команду sudo nano /usr/share/opensearch-dashboards/.i18nrc.json;
в параметре translations (в стандартном файле - 76 строка) уберите значение в двойных кавычках (например, было
translations:translations/ru.json, сталоtranslations: []);сохраните файл .i18nrc.json;
перезагрузите сервис dashboards, чтобы применить изменения.
Чек-лист валидации установки#
Убедитесь, что выполнена подготовка окружения согласно разделу Подготовка окружения данного документа.
Выполните проверку работоспособности компонента SRHX согласно разделу Проверка работоспособности настоящего документа.