Руководство по установке#

В руководстве приведены инструкции по установке компонента Поисковый движок (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 не выдвигает требований к настройкам безопасности окружения.

Подготовка окружения#

Создание пользователей на сервере#

  1. Создайте пользователей:

    • opensearch – для сервера opensearch;

    • opensearch-dashboards – для сервера opensearch-dashboards в том случае, если он будет устанавливаться на данном сервере.

  2. Добавьте созданных пользователей в необходимые группы.

    Ниже представлен пример, когда пользователи созданы с таким же паролем, как и их имя. Возможно изменить значения после 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#

  1. Пропишите системные переменные в файл .bashrc. Переменные пользователей, под которыми будет выполнен запуск компонента SRHX:

    • OPENSEARCH_JAVA_HOME;

    • OPENSEARCH_PATH_CONF;

    • OSD_PATH_CONF.

  2. Примените обновленный файл командой 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#

  1. Установите значение системных параметров vm.max_map_count = 262144 и vm.swappiness=0 в файле /etc/sysctl.conf.

  2. Примените обновленные значения командой sysctl -p.

  3. Отключите использование swap:

    sudo swapoff -a
    sudo sh -c "echo -e 'vm.swappiness=0\nvm.max_map_count=262144' >> /etc/sysctl.conf && sysctl -p"
    

    Внимание!

    Обязательно проверьте значения в данном файле. Если они уже присутствуют, то их необходимо изменить вручную. После применения команды, указанной выше, произойдет дублирование параметров, если они уже существуют. Команда swapoff -a работает только до перезагрузки.

  4. Проверьте текущее значение или примененные изменения командой:

    cat /proc/sys/vm/max_map_count
    

Изменение лимитов пользователей#

Повысьте лимиты для пользователей, которые будут выполнять запуск компонента SRHX. Это позволит в дальнейшем запускать программы вручную и не получать ошибки от компонента SRHX.

  1. Создайте файлы /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
    
  2. Проверьте, что параметр для пользователя задан верно и его значение равно установленному в предыдущем пункте. Проверка возможна только под пользователем, для которого применяли значение:

    sudo su opensearch -c 'ulimit -u -n -l'
    sudo su opensearch-dashboards -c 'ulimit -u -n'
    
  3. Посмотрите полный список лимитов:

    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, которую нужно указать в настройках opensearch.yml

/var/lib/opensearch

Директория для данных кластера, которую нужно указать в настройках opensearch.yml

/etc/opensearch/secman/certs

Директория, где будут храниться зашифрованные JKS-архивы с сертификатами, получаемые из Secret Management System

/etc/opensearch/usertoken

Директория для перекладки wrapped-токена компонента SRHX

/usr/share/opensearch-dashboards

Директория, куда будет установлен opensearch-dashboards

/etc/opensearch-dashboards

Директория, где будут размещены конфигурационные файлы opensearch-dashboards

/var/log/opensearch-dashboards

Директория для хранения логов opensearch-dashboards, которую нужно указать в настройках opensearch_dashboards.yml

/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, которые необходимы для работы компонента:

Название

Разрешение

Описание

permission java.lang.reflect.ReflectPermission

"suppressAccessChecks"

Позволяет приложению использовать Reflect для доступа к закрытым полям и методам классов. Это может потребоваться для динамического вызова методов или изменения состояния объектов, даже если они недоступны через обычный интерфейс класса

permission java.io.FilePermission

"<<ALL FILES>>", "read,write,delete"

Предоставляет приложению полный доступ ко всем файлам на файловой системе. Приложение сможет читать, записывать и удалять любые файлы. Такой уровень доступа обычно требуется для приложений, работающих с большими объемами данных или требующих сохранения конфигурации и логов

permission java.net.SocketPermission

"*", "connect,accept,resolve,listen"

Разрешает приложению создавать сетевые сокеты и подключаться к удаленным серверам (connect), принимать входящие соединения (accept), разрешать доменные имена (resolve) и слушать порты (listen). Это необходимо для взаимодействия с внешними сервисами, которые работают через HTTP/HTTPS-соединения

permission javax.management.MBeanPermission

"", ""

Дает право управлять MBeans (Managed Beans), которые являются компонентами JMX (Java Management Extensions). Она позволяет регистрировать новые MBeans, изменять их свойства и вызывать методы. Поле "*" означает, что приложение имеет неограниченный доступ ко всем MBeans

permission javax.management.MBeanTrustPermission

"register"

Разрешает регистрацию новых MBeans в среде выполнения. Без этой java-permission приложение не сможет зарегистрировать свои собственные управляемые компоненты в JMX

permission javax.management.MBeanServerPermission

"createMBeanServer"

Позволяет создать новый экземпляр сервера MBean. Сервер MBean необходим для регистрации и управления MBeans в приложении

permission java.util.PropertyPermission

"SECMAN_FILE", "write"

Управляет доступом к системным свойствам Java. Например, дает разрешение на запись файла безопасности

"javax.net.ssl.keyStorePassword" и "javax.net.ssl.trustStorePassword"

Разрешения на изменение паролей хранилищ ключей и сертификатов SSL/TLS

"opensearch.networkaddress.cache.ttl"

Разрешение на чтение настройки времени жизни кеша DNS-адресов для Platform V Search

permission java.lang.RuntimePermission

"setFactory"

Дает различные права на выполнение операций уровня среды выполнения. Например, возможность устанавливать фабрики потоков

"modifyThread"

Модификация существующих потоков

"shutdownHooks"

Добавление обработчиков завершения работы приложения

"getClassLoader"

Получение загрузчика классов

"modifyThreadGroup"

Управление группами потоков

"setContextClassLoader"

Установка контекстного загрузчика классов

"accessDeclaredMembers"

Доступ к объявленным членам классов (полям и методам)

"accessClassInPackage.com.apple.*"

Доступ к классам внутри пакета com.apple

"accessClassInPackage.com.sun.beans"

Доступ к классам пакета com.sun.beans

"accessClassInPackage.com.sun.beans.*"

Доступ к классам внутри пакета com.sun.beans

"accessClassInPackage.com.sun.java.swing.plaf.*"

Доступ к классам внутри пакета com.sun.java.swing.plaf

"accessUserInformation"

Разрешает доступ к информации о пользователе, такой как имя пользователя, домашний каталог и другие параметры системы

permission java.security.SecurityPermission

"getProperty.org.bouncycastle.pkcs12.default"

Разрешает получить значение свойства безопасности, связанного с библиотекой Bouncy Castle, которая используется для криптографических операций

Данные java-permissions используются только для компонента SRHX и не меняют безопасность Java.

Необходимый софт на сервере#

Внимание!

Установить:

  • node.js – требуется для работы и запуска dashboards;

  • unzip (если не установлен по умолчанию в системе);

  • nano (или любой другой редактор текста).

Установка#

Ручная установка сервиса#

Перед началом установки убедитесь, что выполнена подготовка окружения.

Распаковка дистрибутива#

Внимание!

Название и версии дистрибутива будут различаться, внимательно проверьте и укажите необходимые.

  1. Загрузите полученный дистрибутив на сервер, распакуйте его и перейдите в созданную директорию:

    unzip srhx-1.6.0-*-distrib.zip -d /tmp && cd /tmp/srhx/
    
  2. Выполните следующие команды из директории, где находятся распакованные файлы.

    [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,
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

Установка компонента 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/

Описание общего списка команд#

  1. Распакуйте сервер в директорию /usr/share/opensearch:

    sudo unzip -q ./search-server-1.6.0.zip -d /usr/share/opensearch/
    
  2. Переместите конфигурационные файлы из /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/
    
  3. Укажите директории в конфигурационном файле 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"
    
  4. Переместите плагины в домашнюю директорию компонента Поисковый движок (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/

Описание общего списка команд выше#

  1. Распакуйте сервер в директорию /usr/share/opensearch-dashboards:

    sudo unzip -q ./dashboards-1.6.0.zip -d /usr/share/opensearch-dashboards/
    
  2. Переместите плагины для 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/
    
  3. Переместите конфигурационные файлы /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#
  1. При распаковке дистрибутива все плагины перемещены в корневую директорию программы /usr/share/opensearch/. Далее при установке плагинов будет использоваться указанный путь.

  2. Если плагины находятся в другом месте, укажите полный путь к них и проверьте, имеется ли доступ туда у пользователя 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'
    
  3. После установки плагина безопасности появятся скрипты:

    • 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
    
  4. После установки плагина безопасности потребуется настройка шифрования. Для тестового запуска можно временно отключить плагин безопасности и проверить работоспособность программы. Для этого в файл /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#
  1. При распаковке дистрибутива все плагины перемещены в корневую директорию программы usr/share/opensearch-dashboards/. Далее при установке плагинов будет использоваться указанный путь.

  2. Если плагины находятся в другом месте, укажите полный путь к ним и проверьте, имеется ли доступ туда у пользователя 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 и их запуск#

  1. Убедитесь, что все пути указаны корректно.

  2. Создайте точки монтирования в RAM для Server:

    sudo nano /etc/systemd/system/etc-opensearch-secman-secrets.mount
    
  3. Добавьте:

    [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
    
  4. Создайте точки монтирования в RAM для Dashboards:

    sudo nano /etc/systemd/system/etc-opensearch\\x2ddashboards-secman-secrets.mount
    
  5. Добавьте:

    [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
    
  6. Создайте Unit services для Server:

    sudo nano /etc/systemd/system/opensearch.service
    
  7. Добавьте:

    [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
    
  8. Создайте Unit services для Dashboards (Если на данном сервере установлен opensearch-dashboards):

    sudo nano /etc/systemd/system/opensearch-dashboards.service
    
  9. Добавьте:

    [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
    
  10. Выполните перезагрузку systemd:

    sudo systemctl daemon-reload
    
  11. Добавьте точку монтирования в автозагрузку и запустите:

    sudo systemctl enable etc-opensearch-secman-secrets.mount --now
    sudo systemctl enable etc-opensearch\\x2ddashboards-secman-secrets.mount --now
    
  12. Добавьте opensearch-services в автозагрузку и запустите:

    sudo systemctl enable opensearch.service --now
    
  13. Добавьте opensearch-dashboards-services в автозагрузку и запустите:

    sudo systemctl enable opensearch-dashboards.service --now
    

Настройка компонента SRHX#

Описание файлов для настройки компонента SRHX

Файл

Описание

Расположение

opensearch.yml

Основные параметры для конфигурации Server

Директория /etc/opensearch/ для Server

secman.yml

Параметры для настройки прямой интеграции Server с Secman

Директория /etc/opensearch/ для Server

audt-appl-properties.yml

Параметры для настройки интеграции с Единым Аудитом

Директория /etc/opensearch/ для Server

jvm.options

Параметры для запуска JVM

Директория /etc/opensearch/ для Server

log4j2.properties

Параметры логирования для Server

Директория /etc/opensearch/ для Server

opensearch_dashboards.yml

Основные параметры для конфигурации Dashboards

Директория /etc/opensearch-dashboards/ для Dashboards

secman_dashboards.yml

Параметры для настройки прямой интеграции Dashboards с Secman

Директория /etc/opensearch-dashboards/ для Dashboards

Настройка параметров в 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

Позволяет программе блокировать на сервере определенное количество оперативной памяти, которое указано в файле jvm.options в параметрах -Xms и -Xmx. Необходимо предварительно настроить параметры -Xms и -Xmx в jvm.options (производится в следующих пунктах). По умолчанию false

network.host: <FQDN или IP текущего хоста>

Сетевой адрес текущего хоста, на котором будет доступен сервер

http.port: ХХХХХ

Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 9200

transport.port: ХХХХХ

Порт, на котором будет доступен сервер на транспортном уровне. Используется для связи серверов между собой в кластере. По умолчанию 9300

cluster.name: <ваше имя кластера>

Произвольное имя текущего кластера, в котором будет находится данная node

node.name: <ваше имя текущей node>

Произвольное имя текущего сервера в кластере

node.roles:
- cluster_manager
- data

Роли данной node в кластере.
cluster_manager – означает, что данная node участвует в кворуме при выборе нового мастера, если потерян текущий и может стать новым мастером. Оставляйте данную роль на всех серверах. Мастер всегда будет только один.
data – означает, что текущая node хранит и обрабатывает данные

cluster.initial_cluster_manager_nodes:
- <имя вашей node 1>
- <имя вашей node 2>
- <имя вашей node 3>

Перечисление всех заданных ранее имен node (node.name) в кластере

discovery.seed_hosts:
- <FQDN или IP node 1 в кластере>:ХХХХХ
- <FQDN или IP node 2 в кластере>:ХХХХХ
- <FQDN или IP node 3 в кластере>:ХХХХХ

Перечисление адресов и портов всех 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: TLSv1.2, TLSv1.3

Позволяет использовать только указанные методы шифрования для HTTP-уровня

plugins.security.ssl.http.enabled_ciphers: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Позволяет использовать только указанные шифры для 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: 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

Проверка имени хоста на транспортном уровне. Необязательный. По умолчанию 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

Метод хранения данных аудита. internal_opensearch - все данные хранятся на node во внутреннем журнале сервера

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: all_access

Имя роли, которая может осуществлять системные вызовы через REST-запросы к API плагина безопасности. all_access - системная роль, которая изначально присвоена только пользователю admin

plugins.security.system_indices.enabled: true

Включить защиту системных индексов указанных в следующем параметре plugins.security.system_indices.indices

plugins.security.system_indices.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

Время хранения данных кеша пользователей в минутах. При использовании внешних систем аутентификации/авторизации необходимо установить 0

plugins.security.secman.enabled: true

Включение интеграции с Secret Management System

Настройка JVM Heap Size параметров#

Для быстрой и стабильной работы рекомендуется выделять компоненту SRHX 50 процентов оперативной памяти сервера.

Для этого:

  1. Unit services компонента SRHX в Linux должен содержать параметры: Environment=MAX_LOCKED_MEMORY=unlimited и LimitMEMLOCK=infinity (прописывается при создании unit service). В лимитах для пользователя opensearch – должен быть установлен параметр opensearch - memlock unlimited (описано в разделе Изменение лимитов пользователей данного документа).

  2. В opensearch.yml должен быть прописан параметр bootstrap.memory_lock: со значением true.

Укажите нужное значение в параметрах Java. Для этого откройте файл /etc/opensearch/jvm.options, найдите параметры -Xms и -Xmx и укажите значение в гигабайтах, равное половине оперативной памяти текущего сервера, но не более 32766 Мб.

  1. Узнайте размер оперативной памяти на текущем сервере с помощью команды:

    free -g | grep Mem: | awk '{print $2}'
    23
    
  2. Отредактируйте параметры в файле с настройками 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:
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 1 в кластере>:ХХХХХ

Перечисление адресов и портов всех серверов в кластере. Порт по умолчанию 9200. Вместо ХХХХХ необходимо указать нужный порт

opensearch.requestHeadersAllowlist:
- authorization
- securitytenant

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

opensearch.ssl.alwaysPresentCertificate: true

Всегда передавать сертификат при запросах к компоненту SRHX

opensearch.ssl.verificationMode: full

Тип проверки при аутентификации соединения с сервером. 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: basicauth

Тип аутентификации. basicauth - использование пары логин/пароль

opensearch_security.cookie.secure: true

Шифрование cookies. Необходимо при включении HTTPs

opensearch_security.session.keepalive: true

Поддерживать сессию, пока действуют cookies.
Логическое значение. Если установлено значение true, время жизни сеанса (opensearch_security.session.ttl) продлевается при каждом запросе. По умолчанию: true

#specified values are in milliseconds
opensearch_security.cookie.ttl: 86400000

Время хранения cookies в миллисекундах. Может быть равно 0 для сессии cookie. По умолчанию – 1 час

opensearch_security.session.ttl: 1200000
#specified values are in milliseconds

Время жизни установленной сессии с пользователем. Если установлено, пользователю будет предложено снова войти в систему через заданное время, независимо от файла 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

Логин пользователя. Должен присутствовать в internal_users.yml. Стандартное значение kibanaserver

opensearch.password

Пароль от логина, указанного в предыдущем пункте. Должен присутствовать в internal_users.yml. Стандартное значение kibanaserver

Внимание!

Обязательно требуется добавление параметров 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.

  1. Ролевая модель настраивается в файлах internal_users.yml, roles.yml, roles_mapping.yml, которые находятся в /etc/opensearch/opensearch-security/.

  2. Методы аутентификации настраиваются в файле 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.

  1. Запустите скрипт от пользователя opensearch.

     sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh'
    
  2. После загрузки скрипта он будет ожидать ввода пароля, который будет зашифрован. В примере используйте пароль der_parol.

    **************************************************************************
    ** This tool will be deprecated in the next major release of OpenSearch **
    **************************************************************************
    [Password:]
    
  3. После ввода данных и нажатия Enter, получите введенный пароль в зашифрованном виде.

    $2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW
    

Создание пользователя#

  1. В файл internal_users.yml добавьте блок нового пользователя:

    sudo nano /etc/opensearch/opensearch-security/internal_users.yml
    
  2. Добавьте, подставив необходимые данные:

    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. Не обязательный. По умолчанию - false

description

Описание созданного пользователя. Не обязательный

Создание роли#

  1. Создайте роль с возможностями администрирования в файле roles.yml.

    sudo nano /etc/opensearch/opensearch-security/roles.yml
    
  2. Добавьте:

     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. Не обязательное. По умолчанию - false

hidden

Параметр скрывает возможность увидеть роль через UI Dashboards или через REST API. Не обязательное. По умолчанию - false

cluster_permissions

Перечень возможных разрешений на действия с кластером

index_patterns

Описание паттернов на названия индексов, к которым у роли будет доступ. Запись "*" означает, что роль имеет доступ к индексам с любым наименованием

allowed_actions

Перечень возможных разрешений на действия с индексами

Связывание созданной роли и пользователя#

  1. Присвойте роль созданному пользователю в файле roles_mapping.yml.

    sudo nano /etc/opensearch/opensearch-security/roles_mapping.yml
    
  2. Добавьте:

    example_role:
    reserved: false
    users:
    - "example_user"
    description: "Maximum access to everything"
    

Параметр

Описание

example_role

Наименование роли, с которой необходимо связать пользователя

reserved

Параметр блокирует запись о связи на изменение через UI Dashboards и через REST API. Не обязательное. По умолчанию - false

hidden

Параметр скрывает возможность увидеть запись о связи роли и пользователя через UI Dashboards или через REST API. Не обязательное. По умолчанию - false

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

http://secman-host:8200

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 топиков. Дополнительные сведения о параметрах конфигурации топиков приведены на странице описания параметров pipeline.yaml

Да

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

Имя индекса в который будет происходить экспорт данных. Индекс может быть простой строкой (например, my-index-name), содержать шаблоны даты и времени Java (например, my-index-%{yyyy.MM.dd} или my-%{yyyy-MM-dd-HH}-index)

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

Строковый путь к файлу хранилища ключей (.jks или .p12)

Обязательно, если SSL установлен как true

-

key_store_password

Строка с паролем для хранилища ключей

Нет

«»

private_key_password

Строка с паролем для закрытого ключа внутри хранилища ключей

Нет

«»

server_port

Номер порта для использования dataprepper API server

Нет

4900

metric_registries

Список регистров метрик для публикации генерируемых метрик

Нет

Prometheus

metric_tags

Маппинг пар ключ-значение тегов метрики, применяемых в качестве общих тегов метрик к регистрам счетчиков. По умолчанию пустой маппинг. Максимальное количество пар ограничено тремя. Обратите внимание, что serviceName является зарезервированным ключом тега со значением тега по умолчанию DataPrepper. Его значение также может быть задано через переменную окружения DATAPREPPER_SERVICE_NAME. Если serviceName определен в metric_tags, его значение заменит те значения, которые были установлены через вышеописанный механизм

Нет

{}

metric_tag_filters

Список шаблонов и тегов. Для каждой метрики добавляются только те теги из первого шаблона, которые соответствуют имени метрики, в порядке конфигурации. Если ни один из шаблонов не совпадает, то применяются теги из metricTags. По умолчанию пустой список.
- pattern: строка, представляющая шаблон стиля Ant для совмещения метрик. Разделитель путей для пути Ant — это «.», является разделителем, используемым во всех метриках;
- tags: Map пар ключ-значение, применяемая к метрикам, соответствующим шаблону. Максимальное количество пар ограничено тремя. Обратите внимание, что serviceName является зарезервированным ключом тега со значением тега по умолчанию DataPrepper. Его значение также может быть задано через переменную окружения DATAPREPPER_SERVICE_NAME. Если serviceName определен в metricTags, его значение заменит те значения, которые были установлены через вышеописанный механизм

Нет

[]

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

Должен быть заполнен либо path либо plugins.security.secman.role_id. Если заполнены оба параметра, то по умолчанию используется параметр plugins.security.secman.role_id

-

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, если vault_driver.certificate_config.ttl больше данного параметра, иначе – 2/3 от значения параметра vault_driver.certificate_config.ttl

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:

  1. Создайте группу Active Directory экземпляра компонента Поисковый движок (SRHX) в Secret Management System.

  2. Активируйте KV-engine и PKI-engine.

  3. Разместите в KV-engine корневой сертификат.

  4. Выпустите 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.

  5. Получите доступ к методу аутентификации Approle.

  6. Получите из Secret Management System параметры role_id и secret_id при помощи API. secret_id и role_id являются данными для доступа к созданным engine в Secret Management System.

  7. Параметр secret_id отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен. Wrapped-токен – это одноразовый токен (wrapped-token) в виде файла, который необходим для получения secret_id. secret_id и role_id являются данными для доступа к созданному хранилищу в Secret Management System.

  8. Разместите wrapped-токен на файловой системе компонента Поисковый движок (SRHX) в каталоге /etc/opensearch/secman.

  9. Заполните в файле opensearch.yml параметры:

  • plugins.security.secman.enabled значением true;

  • Параметры plugins.security.ssl.*

  1. Заполните файл 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 и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней:
- transport - client и server
- http - server
- audit - client

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 и эти параметры.При включении параметров будут автоматически подставлены роли для следующих уровней:
- transport - client и server
- http - server
- audit - client

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 месяц)
Важно:
1. Если в параметре указано значение больше, чем указано на сервере Secret Management System – SRHX будет использовать значение, которое приходит от сервера.
2. Если в параметре указано значение меньше, чем на сервере – SRHX использует значение в параметре plugins.security.secman.cert.ttl.sec

Нет

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:

  1. Разместите в KV-engine корневой сертификат для Dashboards (если ранее загружали корневые сертификаты для Server, то можно не загружать новые, а использовать корневые сертификаты Server).

  2. Для PKI-engine используйте ранее выпущенную роль для компонента Поисковый движок (SRHX).

  3. Параметр secret_id отправьте по методу wrap Secret Management System с ключом secret_id для получения wrapped-токен.

  4. Разместите wrapped-токен на файловой системе сервиса Dashboards компонента Поисковый движок (SRHX) в каталоге /etc/opensearch-dashboards/secman.

  5. Заполните в файле opensearch-dashboards.yml параметры:

    • secman.enabled значением true;

    • параметры server.ssl.* и opensearch.ssl.*.

  6. Заполните файл 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 месяц)
ВАЖНО:
1. Если в параметре указано значение больше, чем указано на сервере Secret Management System – SRHX будет использовать значение, которое приходит от сервера.
2. Если в параметре указано значение меньше, чем на сервере – SRHX использует значение в параметре secman.cert.ttl.sec

Нет

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.
Используется только для работы плагина HealthCheck. Для работы плагина необходимо установить значение true и создать роль anonymous без каких-либо прав

config, dynamic, authc

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

basic_internal_auth_domain:

Имя метода

description: Authenticate via HTTP Basic against internal users database

Краткое описание метода

http_enabled: true

Включить работу метода на HTTP-уровне

transport_enabled: true

Включить работу метода на транспортном-уровне

order: 4

Порядок вызова данного метода.
Если включено сразу несколько методов аутентификации, то у них должен быть настроен порядок вызова. Сервер сначала будет пробовать метод, у которого данный параметр меньше. Если он не сработает, то сервер попробует метод со следующим числом

http_authenticator:

Блок настройки параметров данного метода аутентификации

type: basic

Тип используемой аутентификации. basic – по логин/паролю

challenge: true

Требовать запрос данных при каждом запросе. Сервер будет ожидать заголовки аутентификации в запросе

authentication_backend:

Блок настройки проверки аутентификационных данных

type: intern

Тип проверки. intern – проверка происходит по внутренней базе компонента SRHX

http_authenticator:config:roles_sub_key

В параметре должно быть установлено значение параметра токена с дополнительными ролями пользователя

Настройка аутентификации с IAM/СУДИР без проверки токена#

Внимание!

Для соединения с компонентом IAM Proxy в компоненте SRHX должны использоваться сертификаты, подписанные тем же УЦ, что и сертификаты в Proxy.

  1. Замените все содержимое файла /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
    
  2. При заполнении используйте следующие параметры.

Имя параметра

Описание

xff:

remoteIpHeader

В данном заголовке передаются все адреса серверов прокси, которые будут использоваться. Все остальные адреса, которые не будут здесь указаны, система будет считать клиентскими.
x-forwarded-for - стандартное название. Точное значение параметра уточните у владельца прокси

internalProxies

Вместо <SRHX-ip-address> указывается IP-адрес, на котором запущен компонент SRHX. Внимание! Обязательно указывать именно IP адрес

proxy_auth_domain.http_authenticator:

user_header

Должно быть указано имя заголовка HTTP-запроса, в котором будет содержаться логин пользователя

roles_header

Должно быть указано имя заголовка HTTP-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси

x-proxy-user и x-proxy-roles – стандартные названия заголовков. Точное значение параметра уточните у владельца прокси.

Внимание!

После редактирования файла config.yml, примените новые значения, с помощью запуска скрипта securityadmin.sh. Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.

  1. Добавьте в файл 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
    
  2. Для настройки соединения заполните следующие параметры:

    Имя параметра

    Описание

    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

    Отвечает за разрешенные типы аутентификации - данный параметр должен иметь значение proxy

    opensearch_security.proxycache.user_header

    Должно быть указано имя заголовка HTTP-запроса, в котором будет содержаться логин пользователя

    opensearch_security.proxycache.roles_header

    Должно быть указано имя заголовка HTTP-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси

    Если подключение происходит к прокси, у которого существует несколько ответвлений, то дополнительно должны быть заполнены следующие параметры:

    Имя параметра

    Описание

    server.basePath

    Данный параметр должен содержать адрес ответвления. Например, если ответвление на IAM находится по адресу https://<server>:<port>/example, то в параметре basePath должно быть указано значение /example

    server.rewriteBasePath

    Данный параметр позволяет вырезать указанный выше дополнительный адрес из запросов к серверу. Должен быть в значении true

    Внимание!

    После внесенных изменений перезагрузите компонент SRHX.

Первый вход в компонент SRHX#

Первый вход в компонент SRHX рекомендуется производить под учетной записью с ролью суперадминстратора. Ролью суперадминистратора называется предустановленная роль all_access, которая доступна в ролевой модели по умолчанию.

Данная роль позволяет в полном объеме конфигурировать экземпляр компонента SRHX, а также имеет полный доступ ко всем методам API SRHX.

Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена#

  1. Замените все содержимое файла /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
    
  2. Заполните:

    Имя параметра

    Описание

    openid_connect_url

    Должна быть указана ссылка на параметры конфигурации OIDC. Обычно ссылка имеет вид http(s)://<server>:<port>/auth/realms/<realm>/.well-known/openid-configuration

    openid_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. Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.

  3. Добавьте в файл 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
    
  4. Для настройки соединения заполните следующие параметры:

    Имя параметра

    Описание

    opensearch.requestHeadersAllowlist

    В данном параметре перечисляются имена заголовков, которые сервис будет считывать из HTTP-запроса.
    Должны быть добавлены значения authorization и security_tenant. Например: opensearch.requestHeadersAllowlist: ["authorization", "security_tenant"]

    opensearch_security.auth.type

    Отвечает за разрешенные типы авторизации – данный параметр должен иметь значение jwt

    opensearch_security.jwt.enabled

    Должен быть в значении true

    opensearch_security.jwt.url_param

    Если токен передается не в HTTP-заголовке, а как параметр URL, то нужно указать этот параметр здесь

    Внимание!

    После внесенных изменений перезагрузите компонент SRHX.

Настройка плагина KNN#

Для работы плагина KNN установите пакет openblas.

sudo yum install openblas

Обновление#

Для обновления на новую версию или переустановки компонента SRHX для каждой node выполните следующие действия:

  1. Остановить node.

  2. Очистите директорию /usr/share/opensearch/*.

  3. Распакуйте новую версию компонента SRHX в эту директорию.

  4. Измените владельца и права на директорию и файлы.

  5. Установите плагины для компонента SRHX.

  6. Запустить node.

  7. Повторите данное действие для всех node кластера.

Важно!

  1. В момент обновления на новую версию кластер SRHX не сможет работать на запись в новые node, пока версии компонента SRHX различаются на node кластера. Как только все node будут обновлены до новой версии, запись снова станет возможна.

  2. 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 можно следующими способами:

  1. Через компонент Search-Dashboards. Во вкладке Инструменты разработки (dev tools) отправьте необходимые запросы к серверу.

  2. Отправьте 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

Пример ответа:

Проверка корректной работоспособности аудита#

  1. Настройте стенд компонента SRHX с плагином Security.

  2. Выполните запрос на проверку включения аудита.

  3. Проверьте, что параметр enabled: true и параметр enabled: true в объекте compliance.

    GET https://host:port/_opendistro/_security/api/audit
    

    Basic 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
            }
        }
    }
    
  4. Выполните запрос на создание индекса 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"
    }
    
  5. Перейдите в 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)#

  1. Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM Proxy/СУДИР с проверкой токена данного руководства.

Если доступ отсутствует, то обратитесь к администратору стенда, чтобы он настроил параметры для конфигурационных параметров сервера.

  1. Выполните запрос к серверу без выбора параметра авторизации.

    GET https://host:port/
    

    No Auth

    Ответ 401

    Отображается ошибка о том, что пользователь не авторизован.

  2. Выполните запрос к серверу с выбором Basic Auth авторизации и пользователем IAM.

    GET https://host:port/
    

    Basic Auth

    user IAM / password IAM

    Ответ 401

    Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.

  3. Выполните запрос для проверки, что internal user может отправить запрос на сервер.

    GET https://host:port/
    

    Basic Auth: admin / admin

    Ответ 200 ОК

    Отображается информация о сервере.

Проверка работоспособности internal users при настроенной аутентификации IAM Proxy#

  1. Произведите настройку в opensearch-security/config.yml в соответствии с разделом Настройка аутентификации с IAM/СУДИР без проверки токена данного руководства.

  2. Выполните запрос к серверу без выбора параметра авторизации.

    GET https://host:port/
    

    No Auth

    Ответ 401

    Отображается ошибка о том, что пользователь не авторизован.

  3. Выполните запрос к серверу с выбором Basic Auth авторизации и пользователя IAM.

    GET https://host:port/
    

    Basic Auth

    Если доступ отсутствует, то обратитесь к администратору стенда.

    Ответ 401

    Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.

  4. Выполните запрос к серверу, используя Basic Auth и пользователя admin.

    GET https://host:port/
    

    Basic Auth: admin / admin

    Ответ 200 ОК

    Отображается информация о сервере.

Откат#

Процедура отката предполагает откат максимум до предыдущей версии. Обязательные интеграции осуществляются в соответствии с разделами настоящего документа. При откате на предыдущую версию обязательные интеграции с компонентами Платформы поддерживают обратную совместимость.

Автоматической процедуры отката нет.

  1. Откат к предыдущей версии компонента SRHX представляет собой удаление и установку последней стабильной версии компонента SRHX.

  2. Для отката необходимо выполнить установку предыдущей стабильной версии компонента SRHX в соответствии с разделом Установка текущего документа.

Часто встречающиеся проблемы и пути их устранения#

При возникновении проблемы с отображением страницы конкретного шаблона индекса:

  • откройте файл .i18nrc.json, вызвав команду sudo nano /usr/share/opensearch-dashboards/.i18nrc.json;

  • в параметре translations (в стандартном файле - 76 строка) уберите значение в двойных кавычках (например, было translations: translations/ru.json, стало translations: []);

  • сохраните файл .i18nrc.json;

  • перезагрузите сервис dashboards, чтобы применить изменения.

Чек-лист валидации установки#

  1. Убедитесь, что выполнена подготовка окружения согласно разделу Подготовка окружения данного документа.

  2. Выполните проверку работоспособности компонента SRHX согласно разделу Проверка работоспособности настоящего документа.