Руководство по установке#
В руководстве приведены инструкции по установке компонента Поисковой движок (SRHX) продукта Platform V Search (SRH).
Расшифровку основных понятий см. в документе "Термины и определения".
Системные требования#
Настройки безопасности окружения и перечень платформенных (дополнительных внешних) продуктов, используемых для установки, настройки и контроля в конечной информационной системе (далее — ИС), выбираются при разработке конечной ИС, исходя из характера обрабатываемой в ней информации и иных требований информационной безопасности (далее — ИБ), предъявляемых к ней.
Системное программное обеспечение#
Ниже представлены категории системного программного обеспечения (далее — ПО), которые обязательны или опциональны для установки, настройки, контроля и функционирования компонента SRHX. В каждой категории перечислены все поддерживаемые продукты сторонних правообладателей. Отдельно обозначены варианты, которые рекомендует АО «СберТех» (маркировка «Рекомендовано» в столбце «Продукт, функциональная совместимость с которым подтверждена»). Клиенту необходимо выбрать один из продуктов в каждой категории, исходя из условий использования конечной ИС.
Категория ПО |
Обязательность установки* |
Наименование ПО |
Версия |
Продукт, функциональная совместимость с которым подтверждена** |
Описание |
|---|---|---|---|---|---|
Операционная система |
Да |
ОС Альт 8 СП |
8.2 и выше |
Рекомендовано |
Среда для запуска модулей компонента |
Red Hat Enterprise Linux |
8 и выше |
Опционально. Правообладателем АО «СберТех» также рекомендован компонент Операционная система INST продукта Platform V SberLinux OS Server SLO, см. раздел «Платформенные зависимости» |
Среда для запуска модулей компонента |
||
Java-машина |
Да |
OpenJDK |
17.0.2 и выше |
Рекомендовано |
Окружение для работы модулей компонента |
Программная платформа |
Да |
NodeJS |
18.16.1 и выше |
Рекомендовано |
Среда выполнения JS |
Система управления доступом к информационным ресурсам |
Нет |
СУДИР |
любая актуальная версия |
Опционально. Правообладателем АО «СберТех» также рекомендован компонент IAM Proxy продукта Platform V IAM SE, см. раздел «Платформенные зависимости» |
Сервис управления доступом и информационными ресурсами |
Брокер сообщений |
Нет |
Kafka |
2.7.0 |
Опционально. Правообладателем АО «СберТех» также рекомендован брокер сообщений, основанный на Kafka, – Platform V Corax, см. раздел «Платформенные зависимости» |
Событийный обмен сообщениями между модулями компонента |
Примечание
*
Да — категория ПО обязательна для функционирования сервиса (это означает, что сервис не может выполнять свои базовые функции без установки данной категории ПО).
Нет — категория ПО необязательна для функционирования сервиса (это означает, что сервис может выполнять свои базовые функции без установки данной категории ПО).
**
Рекомендовано — рекомендованный правообладателем АО «СберТех» продукт.
Опционально — альтернативный по отношению к рекомендованному правообладателем АО «СберТех» продукт.
Платформенные зависимости#
Для настройки, контроля и функционирования компонента реализована интеграция с программными продуктами, правообладателем которых является АО «СберТех»:
Наименование продукта |
Код |
Версия |
Код и наименование компонента |
Обязательность установки (да/нет) |
Описание |
Аналог других производителей |
|---|---|---|---|---|---|---|
Platform V IAM SE |
IAM |
1.7 и выше |
AUTH IAM Proxy |
Нет |
Сервис управления доступом и информационными ресурсами |
СУДИР |
Platform V SberLinux OS Server |
SLO |
8.8 и выше |
INST Операционная система |
Нет |
Операционная система на базе ядра Linux для запуска контейнеризированных приложений |
Red Hat Enterprise Linux, ОС Альт 8 СП |
Platform V Corax |
KFK |
8.340.1 и выше |
KFKA Corax |
Нет |
Программный брокер сообщений, представляющий собой распределенную, отказоустойчивую, реплицированную и легко масштабируемую систему передачи сообщений, рассчитанную на высокую пропускную способность |
Kafka |
Примечание:
***
Да — компонент или продукт необходим для функционирования сервиса (это означает, что сервис не может выполнять свои основные функции без установки данного компонента).
Нет — необязательный для функционирования сервиса компонент или продукт (это означает, что сервис может выполнять свои основные функции без установки данного компонента).
**** Рекомендуется установка программного продукта, правообладателем которого является АО «СберТех», при этом не исключена возможность (допускается правообладателем) использования аналога других производителей. Аналоги, в отношении которых продукт успешно прошел испытания и подтвердил свою работоспособность, указаны в разделе «Системное программное обеспечение».
Аппаратные требования#
Для установки компонента SRHX требуется следующая конфигурация аппаратного обеспечения:
Варианты установки |
CPU |
RAM |
Диск под систему |
|---|---|---|---|
run-test |
2 ядра |
2 GB |
HDD: 15GB |
minimum |
4 ядра |
8 GB |
HDD: 20GB |
medium |
8 ядра |
16 GB |
HDD/SSD: 75GB |
optimal |
16 ядер |
32GB |
SSD/SSD: 200GB |
high-load |
32 ядер |
64GB |
SSD: 300GB |
Требования к окружению для установки программного компонента#
Компонент SRHX не выдвигает требований к настройкам безопасности окружения.
Состав дистрибутива#
Элемент дистрибутива |
Описание |
|---|---|
Search-server |
Компонент SRHX, управляемый посредством REST |
Search-dashboard |
Компонент серверной части, отвечающий за аутентификацию |
Search-healthcheck |
Проверка работоспособности компонента SRHX |
Search-notifications |
Управление уведомлениями от плагинов компонента SRHX |
Search-security |
Безопасность, шифрование и авторизация компонента SRHX |
Search-index-management |
Автоматизация действия по управлению индексами |
Search-job-scheduler |
Создание расписаний для общих задач, выполняемых в кластере |
Search-Prometheus-exporter |
Сбор и отправка метрик в формате prometheus |
Search-audit |
Сбор и отправка событий аудита |
Выбор способа установки#
Единственным и целевым способом установки является ручной способ.
Подготовка окружения#
Пользователи в компоненте SRHX#
Создайте пользователей. Описание создания пользователей выполнено в разделе Создание пользователя данного документа.
opensearch;
opensearch-dashboards.
Добавьте созданных пользователей в группы.
Ниже представлен пример, когда пользователи созданы с таким же паролем, как и их имя. Возможно изменить значения после "passwd -1" на необходимые:
sudo useradd -p $(openssl passwd -1 opensearch) opensearch
sudo useradd -p $(openssl passwd -1 opensearch-dashboards) opensearch-dashboards
sudo usermod -aG opensearch-dashboards opensearch
sudo usermod -aG opensearch opensearch-dashboards
Добавление переменных для работы компонента SRHX#
Пропишите системные переменные в файл ".bashrc". Переменные пользователей, под которыми будет выполнен запуск компонента SRHX:
"OPENSEARCH_JAVA_HOME";
"OPENSEARCH_PATH_CONF";
"OSD_PATH_CONF".
Примените обновленный файл командой source.
Ниже описан алгоритм для пользователей opensearch и opensearch-dashboards:
sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch/.bashrc && source /home/opensearch/.bashrc"
sudo sh -c "echo -e 'export OPENSEARCH_JAVA_HOME=/usr/share/opensearch/jdk\nexport OPENSEARCH_PATH_CONF=/etc/opensearch\nexport OSD_PATH_CONF=/etc/opensearch-dashboards' >> /home/opensearch-dashboards/.bashrc && source /home/opensearch-dashboards/.bashrc"
OPENSEARCH_JAVA_HOME – путь до JAVA, который будет использовать компонент SRHX. При использовании JAVA вместе с дистрибутивом, заранее укажите путь, где будет находиться Java, после распаковки дистрибутива.
OPENSEARCH_PATH_CONF и OSD_PATH_CONF – пути до каталога с конфигурационными файлами для компонента SRHX.
Изменение параметров компонента SRHX#
Установите значение системных параметров "vm.max_map_count = 262144" и "vm.swappiness=0" в файле "/etc/sysctl.conf".
Примените обновленные значения командой "sysctl -p".
Отключите использование swap:
sudo swapoff -a
sudo sh -c "echo -e 'vm.swappiness=0\nvm.max_map_count=262144' >> /etc/sysctl.conf && sysctl -p"
Внимание! Обязательно проверьте значения в данном файле. Если они уже присутствуют, то их необходимо изменить вручную. После применения команды, указанной выше, произойдет дублирование параметров, если они уже существуют.
Проверьте текущее значение или примененные изменения командой:
cat /proc/sys/vm/max_map_count
Изменение лимитов пользователей#
Повысьте лимиты для пользователей, которые будут выполнять запуск компонента SRHX. Это позволит в дальнейшем запускать программы вручную и не получать ошибки от компонента SRHX.
Создайте файлы "/etc/security/limits.d/opensearch.conf" и "/etc/security/limits.d/opensearch-dashboards.conf" и внесите в них данные, используя следующие команды:
#для создания файлов /etc/security/limits.d/opensearch.conf , /etc/security/limits.d/opensearch-dashboards.conf и установки лимитов SRHX
sudo sh -c "echo -e 'opensearch - nproc 65535\nopensearch - nofile 500000\nopensearch - memlock unlimited' >> /etc/security/limits.d/opensearch.conf"
sudo sh -c "echo -e 'opensearch-dashboards - nproc 8096\nopensearch-dashboards - nofile 8096' >> /etc/security/limits.d/opensearch-dashboards.conf"
После исполнения команд файлы должны иметь вид:
#для /etc/security/limits.d/opensearch.conf
opensearch - nofile 500000
opensearch - nproc 65535
opensearch - memlock unlimited
#для /etc/security/limits.d/opensearch-dashboards.conf
opensearch-dashboards - nofile 8096
opensearch-dashboards - nproc 8096
Проверьте, что параметр для пользователя задан верно и его значение равно установленному в предыдущем пункте. Проверка возможна только под пользователем, для которого применяли значение:
sudo su opensearch -c 'ulimit -u -n -l'
sudo su opensearch-dashboards -c 'ulimit -u -n'
Посмотрите полный список лимитов:
sudo su opensearch -c 'ulimit -a'
sudo su opensearch-dashboards -c 'ulimit -a'
Создание необходимых директорий#
Создайте необходимые директории для распаковки дистрибутива:
sudo mkdir /usr/share/opensearch
sudo mkdir /etc/opensearch
sudo mkdir /var/log/opensearch
sudo mkdir /var/lib/opensearch
sudo mkdir /usr/share/opensearch-dashboards
sudo mkdir /etc/opensearch-dashboards
sudo mkdir /var/log/opensearch-dashboards
Установка#
Ручная установка сервиса#
Перед началом установки убедитесь, что выполнена подготовка окружения.
Распаковка дистрибутива#
Внимание! Название и версии дистрибутива будут различаться, внимательно проверьте и укажите необходимые.
Загрузите полученный дистрибутив на сервер, распакуйте его и перейдите в созданную директорию:
unzip srhx-1.2-*-distrib.zip -d /tmp && cd /tmp/srhx/
Выполните следующие команды из директории, где находятся распакованные файлы.
[user@vm-name srhx]$ pwd
/tmp/srhx/
[user@vm-name srhx]$ ls -l
total 443700
-rw-r--r-- 1 user user 5741089 audit.zip
-rw-r--r-- 1 user user 108092858 dashboard-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 1268364 index-management-dashboards-2.7.1.zip
-rw-r--r-- 1 user user 9771017 notifications-dashboards-2.7.1.zip
-rw-r--r-- 1 user user 8276862 opensearch-index-management-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 808897 opensearch-job-scheduler-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 2465905 opensearch-notifications-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 10702700 opensearch-notifications-core-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 40717425 opensearch-security-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 150543 prometheus-exporter-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 46750603 search-healthcheck-plugin-0.0.3.zip
-rw-r--r-- 1 user user 224121025 search-server-2.7.1-SNAPSHOT.zip
-rw-r--r-- 1 user user 1187501 security-dashboards-2.7.1.zip
Установка компонента SRHX#
Выполните команды для распаковки дистрибутива:
sudo unzip -q ./search-server-*-SNAPSHOT.zip -d /usr/share/opensearch/
sudo mv /usr/share/opensearch/config/* /etc/opensearch/ && sudo rm -rf /usr/share/opensearch/config/
sudo mv opensearch-security-*-SNAPSHOT.zip opensearch-index-management-*-SNAPSHOT.zip opensearch-job-scheduler-*-SNAPSHOT.zip opensearch-notifications-*-SNAPSHOT.zip opensearch-notifications-core-*-SNAPSHOT.zip prometheus-exporter-*-SNAPSHOT.zip search-healthcheck-plugin-*.zip /usr/share/opensearch/
sudo unzip -q ./dashboard-*-SNAPSHOT.zip -d /usr/share/opensearch-dashboards/
sudo mv security-dashboards-*.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/
Установка прав. Наделение правами владельца#
После распаковки измените владельцев директорий и выставите необходимые права.
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 775 -R /usr/share/opensearch/jdk/
sudo chmod 750 -R /var/log/opensearch
sudo chmod 750 /etc/opensearch
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
Установка плагинов#
Установка плагинов происходит от пользователя, под которым запускается компонент SRHX. Например, для компонента SRHX – пользователи opensearch и opensearch-dashboards.(Не устанавливайте плагины из под root!).
При распаковке дистрибутива переместите все плагины в корневую директорию программы "/usr/share/opensearch/" или "/usr/share/opensearch-dashboards/". Далее при установке плагинов будет использоваться данный путь. Если плагины находятся в другом месте, укажите полный путь до них и проверьте, имеется ли доступ у пользователя opensearch и opensearch-dashboards.
Внимание! Название и версии плагинов могу различаться, внимательно проверьте и укажите необходимые.
sudo su - opensearch -c 'yes | /usr/share/opensearch/bin/opensearch-plugin install \
file:///usr/share/opensearch/opensearch-security-2.7.1-SNAPSHOT.zip \
file:///usr/share/opensearch/opensearch-job-scheduler-2.7.1-SNAPSHOT.zip \
file:///usr/share/opensearch/opensearch-index-management-2.7.1-SNAPSHOT.zip \
file:///usr/share/opensearch/opensearch-notifications-core-2.7.1-SNAPSHOT.zip \
file:///usr/share/opensearch/opensearch-notifications-2.7.1-SNAPSHOT.zip \
file:///usr/share/opensearch/search-healthcheck-plugin-0.0.3.zip \
file:///usr/share/opensearch/prometheus-exporter-2.7.1-SNAPSHOT.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/security-dashboards-2.7.1.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/notifications-dashboards-2.7.1.zip'
sudo su - opensearch-dashboards -c 'yes | /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin install file:///usr/share/opensearch-dashboards/index-management-dashboards-2.7.1.zip'
После установки плагина безопасности появятся скрипты:
securityadmin.sh;
hash.sh;
audit_config_migrater.sh,
которые находятся по пути "/usr/share/opensearch/plugins/opensearch-security/tools". Необходимо сделать их исполняемыми.
sudo chmod +x \
/usr/share/opensearch/plugins/opensearch-security/tools/securityadmin.sh \
/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh \
/usr/share/opensearch/plugins/opensearch-security/tools/audit_config_migrater.sh
После установки плагина безопасности потребуется настройка шифрования. Для тестового запуска можно временно отключить плагин безопасности, и проверить работоспособность программы. Для этого в файл "/etc/opensearch/opensearch.yml" добавьте строку 'plugins.security.disabled: true'.
sudo sh -c "echo -e 'plugins.security.disabled: true' >> /etc/opensearch/opensearch.yml"
Создание Unit services и их запуск#
Убедитесь, что все пути указаны корректно.
Создайте Unit services для Server:
sudo nano /etc/systemd/system/opensearch.service
Добавьте:
[Unit]
Description=Platform V Search
Wants=network-online.target
After=network-online.target
[Service]
Type=forking
RuntimeDirectory=opensearch
PrivateTmp=true
Environment=MAX_LOCKED_MEMORY=unlimited
Environment=OPENSEARCH_PATH_CONF=/etc/opensearch
Environment=PID_DIR=/var/run/opensearch
WorkingDirectory=/usr/share/opensearch
ExecStart=/usr/share/opensearch/bin/opensearch -d -p ${PID_DIR}/opensearch.pid
User=opensearch
Group=opensearch
StandardOutput=journal
StandardError=inherit
# Service restart - 5 times with an interval of 30 seconds for 200 seconds
Restart=on-failure
RestartSec=30
StartLimitInterval=200
StartLimitBurst=5
# Unlimited memory lock for service
LimitMEMLOCK=infinity
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
# Specifies the maximum number of processes
LimitNPROC=4096
# Specifies the maximum size of virtual memory
LimitAS=infinity
# Specifies the maximum file size
LimitFSIZE=infinity
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0
# SIGTERM signal is used to stop the Java process
KillSignal=SIGTERM
# Send the signal only to the JVM rather than its control group
KillMode=process
# Java process is never killed
SendSIGKILL=no
# When a JVM receives a SIGTERM signal it exits with code 143
SuccessExitStatus=143
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout
TimeoutStartSec=75
[Install]
WantedBy=multi-user.target
Создайте следующий Unit services:
sudo nano /etc/systemd/system/opensearch-dashboards.service
Добавьте в Unit services:
[Unit]
Description=Platform V Search 2
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=opensearch-dashboards
Group=opensearch-dashboards
Environment=OSD_PATH_CONF=/etc/opensearch-dashboards
WorkingDirectory=/usr/share/opensearch-dashboards/
ExecStart=/bin/bash -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards &> /var/log/opensearch-dashboards/stdout.log'
StandardOutput=journal
StandardError=inherit
# Service restart - 5 times with an interval of 30 seconds for 200 seconds
Restart=on-failure
RestartSec=30
StartLimitInterval=200
StartLimitBurst=5
[Install]
WantedBy=multi-user.target
Выполните перезагрузку systemd:
sudo systemctl daemon-reload
Добавьте сервисы в автозагрузку:
sudo systemctl enable opensearch.service
sudo systemctl enable opensearch-dashboards.service
Запустите сервисы:
sudo systemctl start opensearch
sudo systemctl start opensearch-dashboards
Настройка компонента SRHX#
Настройка параметров в 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=admin, O=SBT
Сертификаты должны быть в формате PKCS#8. Замените все содержимое файла (удалите весь текст в существующем фале) "/etc/opensearch/opensearch.yml".
### Шаблон безопасной конфигурации сервера для использования в компании.
### Подставьте необходиме значения там, где требуется.
### Символы < > указывают значения, которые требуется заменить. При подстановке необходимых значений символы < > использовать не нужно.
bootstrap.memory_lock: true
# Настройки хоста
network.host: <FQDN или IP текущего хоста>
http.port: ХХХХХ
transport.port: ХХХХХ
# Настройки кластера
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 в кластере>:ХХХХХ
- <FQDN или IP node 2 в кластере>:ХХХХХ
- <FQDN или IP node 3 в кластере>:ХХХХХ
# Настройки для хранения данных и логов текущей node
path.data: /var/lib/opensearch
path.logs: /var/log/opensearch
# Настройки плагина Security
plugins.security.disabled: false
plugins.security.ssl.http:
enabled: true
pemcert_filepath: "<путь к сертификату для шифрования http-уровня и rest-запросов>"
pemkey_filepath: "<путь к приватному ключу от сертификата для шифрования http-уровня и rest-запросов>"
pemtrustedcas_filepath: "<путь к корневому сертификату, для шифрования http-уровня и rest-запросов>"
enabled_protocols: ["TLSv1.2", "TLSv1.3"]
enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
clientauth_mode: REQUIRE
plugins.security.ssl.transport:
enabled: true
pemcert_filepath: "<путь к сертификату для межкластерного шифрования>"
pemkey_filepath: "<путь к приватному ключу от сертификата для межкластерного шифрования>"
pemtrustedcas_filepath: "<путь к корневому сертификату, для межкластерного шифрования>"
enabled_protocols: ["TLSv1.2", "TLSv1.3"]
enabled_ciphers: ["TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"]
enforce_hostname_verification: true
plugins.security.authcz.admin_dn:
- 'CN=<Common Name сертификата администратора>,O=<организация которая подписала>'
plugins.security.nodes_dn:
- 'CN=<Common Name межкластерного сертификата>,O=<организация которая подписала>'
plugins.security.audit:
type: internal_opensearch
config.disabled_rest_categories: NONE
config.disabled_transport_categories: NONE
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: |
Роли данной node в кластере. |
cluster.initial_cluster_manager_nodes: |
Перечисление всех заданных ранее имен node (node.name) в кластере |
discovery.seed_hosts: |
Перечисление адресов и портов всех node, которые будут находится в кластере |
path.data: /var/lib/opensearch |
Директория для хранения данных node |
path.logs: /var/log/opensearch |
Директория для хранения логов node |
plugins.security.disabled: false |
Принудительное включение плагина безопасности |
plugins.security.ssl.http.enabled: true |
Включение шифрования http-уровня |
plugins.security.ssl.http.pemcert_filepath: "<путь к сертификату для шифрования http-уровня и rest-запросов>" |
Путь к сертификату для шифрования http-уровня, rest-запросов и корневой сертификат. Для раскрытия запароленного приватного ключа от сертификата, необходимо добавить параметр "plugins.security.ssl.http.pemkey_password_secure" в opensearch-keystore и указать в нем пароль от приватного ключа |
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.pemcert_filepath: "<путь к сертификату для межкластерного шифрования>" |
Путь к сертификату для межкластерного шифрования и корневой сертификат |
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: |
Здесь необходимо указать CN сертификата, который будет использоваться для доступа с правами полного администратора. В основном используется для применения изменений методов аутентификации/авторизации и ролевой модели, указывается при вызове скрипта securityadmin.sh. |
plugins.security.nodes_dn: |
Здесь необходимо указать CN сертификата, который будет использоваться для межкластерного шифрования между node и доступа к API сервера. Все REST запросы необходимо осуществлять с данными сертификатами. |
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" |
Настройка JVM Heap Size параметров#
Для быстрой и стабильной работы рекомендуется выделять компоненту SRHX 50 процентов оперативной памяти сервера.
Для этого:
Unit services компонент SRHX в Linux должен содержать параметры: "Environment=MAX_LOCKED_MEMORY=unlimited" и "LimitMEMLOCK=infinity" (прописывается при создании unit service). В лимитах для пользователя "opensearch" – должен быть установлен параметр "opensearch - memlock unlimited" (описано в разделе Изменение лимитов пользователей данного документа).
В "opensearch.yml" должен быть прописан параметр "bootstrap.memory_lock:" со значением "true".
Укажите нужное значение в параметрах Java. Для этого откройте файл "/etc/opensearch/jvm.options", найдите параметры -Xms и -Xmx и укажите значение в гигабайтах, равное половине оперативной памяти текущего сервера, но не более 32766 Мб.
Узнайте размер оперативной памяти на текущем сервере с помощью команды:
free -g | grep Mem: | awk '{print $2}'
23
Отредактируйте параметры в файле с настройками JVM и укажите округленные значения, равные половине числа, полученного в предыдущей команде.
sudo nano /etc/opensearch/jvm.options
# JVM configuration
################################################################
## IMPORTANT: JVM heap size
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms11g
-Xmx11g
Добавление параметров в opensearch-keystore#
Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует opensearch-keystore. Хранение логина и пароля выполняется в opensearch.yml. Для работы с opensearch-keystore нужно запустить /usr/share/opensearch/bin/opensearch-keystore <параметр> (–help, чтобы увидеть все доступные параметры).
Список часто используемых параметров
Параметр |
Описание |
|---|---|
create |
Создание нового keystore хранилища (дополнительный параметр -p позволит создать keystore, защищенный паролем) |
add |
Добавление нового параметра в созданный keystore |
list |
Просмотр параметров, которые хранятся в данный момент в keystore |
remove |
Удалить существующий параметр из текущего keystore |
Для продолжения установки добавьте в opensearch-keystore пароли от приватных ключей для сертификатов. Это будут параметры:
plugins.security.ssl.http.pemkey_password_secure. Пароль для приватного ключа от сертификата используемого для шифрования http-уровня.
plugins.security.ssl.transport.pemkey_password_secure. Пароль для приватного ключа от сертификата используемого для шифрования транспортного-уровня.
Внимание! opensearch-keystore будет создан для пользователя linux, от которого будут запускаться команды. Не выполняйте команды из под "root"! Используйте для этого пользователя "opensearch".
Создайте keystore с помощью параметра "create". Добавьте необходимые параметры при помощи параметра "add".
#создайе хранилище, если оно еще не существует
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore create'
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.http.pemkey_password_secure'
#после команды будет ожидать ввода данных
sudo su - opensearch -c '/usr/share/opensearch/bin/opensearch-keystore add plugins.security.ssl.transport.pemkey_password_secure'
#после команды будет ожидать ввода данных
Настройка параметров в 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 текущего хоста>"
port: 15601
ssl:
enabled: true
certificate: <путь к сертификату, который будет использоваться для шифрования соединений к самому dashboards>
key: <путь к приватному ключу от сертификата для шифрования соединений к самому dashboards>
certificateAuthorities: <путь к корневому сертификату>
# Настройки для соединения dashboards с сервером OpenSearch
opensearch:
hosts:
- https://<FQDN или IP node 1 в кластере>:ХХХХХ
- https://<FQDN или IP node 2 в кластере>:ХХХХХ
- https://<FQDN или IP node 3 в кластере>:ХХХХХ
ssl:
alwaysPresentCertificate: true
verificationMode: full
certificate: <путь к межкластерному сертификату, который будет использоваться для соединения dashboards с сервером>
key: <путь к приватному ключу от сертификата для соединения dashboards с сервером>
certificateAuthorities: <путь к корневому сертификату>
requestHeadersAllowlist:
- authorization
- securitytenant
# Настройки логгирования
logging:
dest: /var/log/opensearch-dashboards/opensearch-dashboards.log
json: false
verbose: true
# Настройки плагина Security
opensearch_security:
auth.type: "basicauth"
cookie.secure: true
session.keepalive: true
# Указанны значения в миллисекундах
opensearch_security.cookie.ttl: 86400000
opensearch_security.session.ttl: 1200000
Описание всех параметров указанных в примере opensearch_dashboards.yml представлено в таблице ниже.
Имя параметра |
Описание |
|---|---|
server.host: <FQDN или IP текущего хоста> |
Сетевой адрес текущего хоста, на котором будет доступен сервер |
server.port: 15601 |
Порт, на котором будет доступен API сервера. Используется для доступа к серверу по HTTP. По умолчанию 5601 |
server.ssl.enabled: true |
Включить HTTP шифрование |
server.ssl.certificate: <путь к сертификату для запуска на https> |
Путь до сертификата для шифрования и корневого. |
opensearch.hosts: |
Перечисление адресов и портов всех серверов в кластере. Порт по умолчанию 9200 |
opensearch.requestHeadersAllowlist: |
Перечисление заголовков, которые сервер будет считывать, при отправке запросов к нему |
opensearch.ssl.alwaysPresentCertificate: true |
Всегда передавать сертификат при запросах к компоненту SRHX |
opensearch.ssl.verificationMode: full |
Тип проверки при аутентификации соединения с сервером. "full" – требовать сертификат и проверять, содержится ли имя хоста в сертификате |
opensearch.ssl.certificate: <путь до межкластерного сертификата> |
Путь до сертификата для шифрования и корневого. |
logging: |
Директория для хранения логов и настройка параметров логгирования |
opensearch_security.auth.type: "basicauth" |
Тип аунтентификации. "basicauth" - использование пары логин/пароль |
opensearch_security.cookie.secure: true |
Шифрование cookies. Необходимо при включении HTTPS |
opensearch_security.session.keepalive: true |
Поддерживать сессию, пока действуют cookies. |
#specified values are in milliseconds |
Время хранения cookies в миллисекундах. Может быть равно 0 для сессии cookie. По умолчанию – 1 час |
opensearch_security.session.ttl: 1200000 |
Время жизни установленной сессии с пользователем. Если установлено, пользователю будет предложено снова войти в систему через заданное время, независимо от файла cookie. По умолчанию: 1 час |
Добавление параметров в opensearch-dashboards-keystore#
Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует "opensearch-dashboards-keystore".
Для работы с "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.ssl.keyPassphrase |
Пароль для приватного ключа от сертификата |
server.ssl.keyPassphrase |
Пароль для приватного ключа от сертификата |
Внимание! Параметры "opensearch.ssl.keyPassphrase" и "server.ssl.keyPassphrase" при добавлении в "opensearch-dashboards-keystore" необходимо вводить в кавычках. Иначе возможно получить ошибку неправильного типа данных.
Создайте 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'
#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add opensearch.ssl.keyPassphrase'
#После команды будет ожидать ввода данных
sudo su - opensearch-dashboards -c '/usr/share/opensearch-dashboards/bin/opensearch-dashboards-keystore add server.ssl.keyPassphrase'
На этом настройка сервера может быть завершена. Для первого запуска можно использовать ролевую модель по умолчанию с пользователями из internal_users.yml.
Настройка методов аутентификации/авторизации и ролевой модели#
В разделе приведена информация для ознакомления с возможностями ролевой модели компонента SRHX.
Ролевая модель настраивается в файлах "internal_users.yml", "roles.yml", "roles_mapping.yml", которые находятся в "/etc/opensearch/opensearch-security/".
Методы аутентификации настраиваются в файле "config.yml", который находятся в "/etc/opensearch/opensearch-security/".
При старте компонента SRHX в первый раз подгружаются данные из этих файлов. Поэтому на сервере уже будут стандартные пользователи из этих файлов и метод аутентификации "basicauth", который указан в "config.yml". Редактирование файлов выполняется при необходимости.
Создание шифрованного пароля для пользователя#
Все пароли в "internal_users.yml" хранятся в зашифрованном виде. Для шифрования пароля есть скрипт "hash.sh".
Запустите скрипт от пользователя "opensearch".
sudo su - opensearch -c '/usr/share/opensearch/plugins/opensearch-security/tools/hash.sh'
После загрузки скрипта он будет ожидать ввода пароля, который будет зашифрован. В примере используйте пароль "der_parol".
**************************************************************************
** This tool will be deprecated in the next major release of OpenSearch **
**************************************************************************
[Password:]
После ввода данных и нажатия Enter, получите введенный пароль в зашифрованном виде.
$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW
Создание пользователя#
В файл "internal_users.yml" добавьте блок нового пользователя:
sudo nano /etc/opensearch/opensearch-security/internal_users.yml
Добавьте, подставив необходимые данные:
pvs_admin:
hash: "$2y$12$MnTVuoi0Ue.Bbn47Np.xFuPjNcGGrazvgAZDkfSDMzSSd69Y3H6SW"
reserved: false
description: "Demo pvs_admin user, using internal role mapping"
Создание роли#
Создайте роль с возможностями администрирования в файле "roles.yml".
sudo nano /etc/opensearch/opensearch-security/roles.yml
Добавьте:
super_administrator:
cluster_permissions:
- 'cluster:admin/*'
- 'cluster:monitor/*'
index_permissions:
- index_patterns:
- '*'
allowed_actions:
- 'indices:admin/*'
- 'indices:data/*'
- 'indices:monitor/*
Связывание созданной роли и пользователя#
Присвойте роль созданному пользователю в файле "roles_mapping.yml".
sudo nano /etc/opensearch/opensearch-security/roles_mapping.yml
Добавьте:
super_administrator:
reserved: false
users:
- "pvs_admin"
description: "Maximum access to everything"
Применение данных к кластеру#
Внимание! После применения новой конфигурации к кластеру, предыдущие параметры будут перезаписаны без возможности восстановления. Для сохранения текущих параметров используйте опцию "-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: 2.7.1
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
Настройка интеграции#
Настройка интеграции с внешним провайдером аудита#
Установка плагина Аудита#
В составе дистрибутива есть архив с плагином аудита "audit.zip". Распакуйте его содержимое во временную директорию и переместите файлы в нужные директории.
unzip audit.zip -d /tmp/audit && cd /tmp/audit
Содержание архива:
Название компонента |
Описание |
|---|---|
plugin_audit-1.0-SNAPSHOT.jar |
Плагин аудита |
plugin-security.policy |
Файл с привилегиями для Security-plugin |
Файлы указанные выше переместите в плагин Security. "/usr/share/opensearch/plugins/opensearch-security/"
Название компонента |
Описание |
|---|---|
audt-appl.properties |
Файл с настройками аудита |
audt-appl.properties переместите в директорию с файлами конфигурации для opensearch. "/etc/opensearch/
Переместите распакованные файлы и измените владельца на opensearch.
sudo cp plugin_audit-1.0-SNAPSHOT.jar plugin-security.policy /usr/share/opensearch/plugins/opensearch-security/ && cp audt-appl.properties /etc/opensearch/
sudo chown opensearch:opensearch \
/usr/share/opensearch/plugins/opensearch-security/plugin_audit-1.0-SNAPSHOT.jar \
/usr/share/opensearch/plugins/opensearch-security/plugin-security.policy \
/etc/opensearch/audt-appl.properties
Настройка внешнего провайдера Аудита#
Включение Аудита в 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
config.disabled_rest_categories: NONE
config.disabled_transport_categories: NONE
Настройка параметров Аудита
Большинство настроек Аудита описываются в файле "/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.2>
#Заполнять в соответствии с вашим стендом
CHANNEL=<SUPPORT>
SECTOR=<DICT>
#Если события аудита нужно писать в формате 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,TLSv1.1
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,TLSv1.1
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,TLSv1.1
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
#Максимальное количество асинхронно выполняемых задач отправки событий аудита
#MAX_ASYNC_SEND_TASKS=1001
Описание всех параметров указанных в примере audt-appl.properties:
Имя параметра |
Описание |
|---|---|
circuit-breaker.mode |
Режим отправки событий (стандартный - STD /дублированный - DUP) |
UFS_SUBSYSTEM_CODE |
Код подсистемы |
EAR_NAME |
Имя приложения, которое пишет события |
EAR_VERSION |
Версия приложения, которое пишет события |
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 |
Наименование топика с событиями уровня CRITICAL для кластера 1 |
kafka_2.topic.audit-events-crit-in |
Наименование топика с событиями уровня CRITICAL для кластера 2 |
kafka_1.topic.audit-events-uncrit-in |
Наименование топика с событиями уровня UNCRITICAL для кластера 1 |
kafka_2.topic.audit-events-uncrit-in |
Наименование топика с событиями уровня UNCRITICAL для кластера 2 |
kafka_1.topic.audit-metamodel-in |
Наименование топика регистрации метамоделей для кластера 1 |
circuit-breaker.mode |
Наименование топика регистрации метамоделей для кластера 2 |
Группы балансировки (union-audit.balance_group.) |
Наименование топика регистрации метамоделей для кластера 2 |
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, ЕФС - параметр UFS, ППРБ - параметр 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.providers, union_audit_2.providers |
Провайдер, к которому применяются настройки.(Значения kafka_1 или kafka_2) |
Режим отправки сообщений (union-audit.) |
Провайдер, к которому применяются настройки.(Значения 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 |
MAX_ASYNC_SEND_TASKS |
Максимальное количество асинхронно выполняемых задач отправки событий аудита |
Настройка SSL соединения#
При подключении по протоколу SSL, укажите плагин месторасположение сертификатов и паролей от них в виде аргументов для java машины в файле "/etc/opensearch/jvm.options".
Параметры необходимые для работы плагина аудита по SSL:
# Полный путь до keyStore с сертификатами для подключения к kafka
-Djavax.net.ssl.keyStore=/etc/opensearch/certs/<crets-for-kafka>.keystore.jks
# Полный путь до keyStore с корневым сертификатом для подключения к kafka
-Djavax.net.ssl.trustStore=/etc/opensearch/certs/<crets-for-kafka>.truststore.jks
# Игнорировать имена хостов
-Dweblogic.security.SSL.ignoreHostnameVerify
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
Для этого откройте файл "/etc/opensearch/jvm.options", и укажите в нем переменные, заменив значения на необходимые.
sudo nano /etc/opensearch/jvm.options
-Djavax.net.ssl.keyStore=/etc/opensearch/certs/audit.keystore.jks
-Djavax.net.ssl.trustStore=/etc/opensearch/certs/audit.truststore.jks
-Dweblogic.security.SSL.ignoreHostnameVerify
-Dcom.ibm.mq.cfg.useIBMCipherMappings=false
## JVM configuration
################################################################
## IMPORTANT: JVM heap size
################################################################
Добавление параметров в opensearch-keystore
Для сокрытия чувствительных данных (например логин/пароль) в компоненте SRHX существует opensearch-keystore. Добавьте в opensearch-keystore пароли от keystore с сертификатами шифрования Аудита. Это будут параметры:
plugins.security.ssl.audit.keystore_password_secure. Пароль от keystore с сертификатом для шифрования соединения Аудита. (сертификаты для подключения к kafka).
plugins.security.ssl.audit.truststore_password_secure. Пароль от keystore с корневым сертификатом для шифрования соединения Аудита.
Внимание!
Для работы с opensearch-keystore используйте для этого пользователя opensearch.
Добавьте необходимые параметры при помощи параметра 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'
#после команды будет ожидать ввода данных
Настройка Java permissions
Для работы плагина аудита требуются повышенные привилегии java машины.
В каталоге, где находится Java, по пути: "path_to_java/lib/security" – отредактируйте файл "default.policy". Добавьте дополнительные привилегии. Откройте файл "default.policy":
sudo nano /usr/share/opensearch/jdk/lib/security/default.policy
В самом конце файла, под комментарием "//permissions needed by applications using java.desktop module" замените содержание на текст из блока ниже:
// permissions needed by applications using java.desktop module
grant {
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.io.FilePermission "<<ALL FILES>>", "read,write,delete";
permission java.net.SocketPermission "*", "connect,accept,resolve,listen";
permission java.util.PropertyPermission "javax.net.ssl.keyStorePassword", "write";
permission java.util.PropertyPermission "javax.net.ssl.trustStorePassword", "write";
permission javax.management.MBeanPermission "*", "*";
permission javax.management.MBeanTrustPermission "register";
permission javax.management.MBeanServerPermission "createMBeanServer";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "getClassLoader";
permission java.lang.RuntimePermission "modifyThreadGroup";
permission java.lang.RuntimePermission "setContextClassLoader";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "accessClassInPackage.com.apple.*";
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.beans";
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.beans.*";
permission java.lang.RuntimePermission "accessClassInPackage.com.sun.java.swing.plaf.*";
};
Настройка интеграции с компонентом IAM Proxy/СУДИР (опционально)#
Методы аутентификации настраиваются в файле "config.yml", который находятся в "/etc/opensearch/opensearch-security/".
Пример стандартного config.yml
---
_meta:
type: "config"
config_version: 2
config:
dynamic:
#do_not_fail_on_forbidden: false
http:
anonymous_auth_enabled: false
xff:
enabled: false
internalProxies: '192\.168\.0\.10|192\.168\.0\.11' # regex pattern
#internalProxies: '.*' # trust all internal proxies, regex pattern
#remoteIpHeader: 'x-forwarded-for'
authc:
basic_internal_auth_domain:
description: "Authenticate via HTTP Basic against internal users database"
http_enabled: true
transport_enabled: true
order: 0
http_authenticator:
type: basic
challenge: true
authentication_backend:
type: intern
proxy_auth_domain:
description: "Authenticate via proxy"
http_enabled: false
transport_enabled: false
order: 1
http_authenticator:
type: proxy
challenge: false
config:
user_header: "x-proxy-user"
roles_header: "x-proxy-roles"
authentication_backend:
type: noop
jwt_auth_domain:
description: "Authenticate via Json Web Token"
http_enabled: false
transport_enabled: false
order: 2
http_authenticator:
type: jwt
challenge: false
config:
signing_key: "base64 encoded HMAC key or public RSA/ECDSA pem key"
jwt_header: "Authorization"
jwt_url_parameter: null
jwt_clock_skew_tolerance_seconds: 30
roles_key: null
roles_sub_key: null
subject_key: null
authentication_backend:
type: noop
clientcert_auth_domain:
description: "Authenticate via SSL client certificates"
http_enabled: false
transport_enabled: false
order: 3
http_authenticator:
type: clientcert
config:
username_attribute: cn #optional, if omitted DN becomes username
challenge: false
authentication_backend:
type: noop
Описание основных используемых параметров указанных в примере config.yml:
Имя параметра |
Описание |
|---|---|
config.dynamic: do_not_fail_on_forbidden: false |
Не показывать ошибку или отказ пользователю, если у него нет прав доступа к обращаемому адресу/полю/сегменту |
config.dynamic.http: anonymous_auth_enabled: false |
Разрешить доступ неавторизованным пользователям. По умолчанию false. |
config, dynamic, authc |
Здесь происходит перечисление тех методов аутентификации, которые будут использоваться в данном кластере |
basic_internal_auth_domain: |
Имя метода |
description: "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 |
Настройка аутентификации с IAM/СУДИР с проверкой токена#
Внимание! Для соединения с компонентом IAM Proxy в компоненте SRHX должны использоваться сертификаты, подписанные тем же УЦ, что и сертификаты в "Proxy".
Замените все содержимое файла "/etc/opensearch/opensearch-security/config.yml" на текст, указанный ниже:
config.yml для Proxy
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: true
remoteIpHeader: "x-forwarded-for"
internalProxies: "SRHX-ip-address"
authc:
proxy_auth_domain:
description: "Authenticate via proxy"
http_enabled: true
transport_enabled: true
order: 0
http_authenticator:
type: proxy
challenge: false
config:
user_header: "x-proxy-user"
roles_header: "x-proxy-roles"
authentication_backend:
type: noop
basic_internal_auth_domain:
description: "Authenticate via HTTP Basic against internal users database"
http_enabled: true
transport_enabled: true
order: 1
http_authenticator:
type: basic
challenge: false
authentication_backend:
type: intern
При заполнении используйте следующие параметры.
Имя параметра |
Описание |
|---|---|
xff: |
|
remoteIpHeader |
В данном заголовке передаются все адреса серверов прокси, которые будут использоваться. Все остальные адреса, которые не будут здесь указаны, система будет считать клиентскими. |
internalProxies |
Вместо |
proxy_auth_domain.http_authenticator: |
|
user_header |
Должно быть указано имя заголовка http-запроса, в котором будет содержаться логин пользователя |
roles_header |
Должно быть указано имя заголовка http-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси |
"x-proxy-user" и "x-proxy-roles" – стандартные названия заголовков. Точное значение параметра уточните у владельца прокси.
Внимание! После редактирования файла "config.yml", примените новые значения, с помощью запуска скрипта "securityadmin.sh". Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.
Добавьте в файл "opensearch_dashboards.yml" следующие параметры:
Пример заполнения файла opensearch_dashboards.yml:
opensearch_dashboards.yml для Proxy
server:
host: "имя хоста"
port: порт
basePath: /pvs
rewriteBasePath: true
ssl:
enabled: true
keystore.path: /etc/opensearch/certs/keystore.p12
opensearch:
hosts:
- https://имя хоста SRHX сервера:порт
ssl:
alwaysPresentCertificate: true
verificationMode: full
certificateAuthorities: /etc/opensearch/certs/keystore.p12
keystore.path: /etc/opensearch/certs/keystore.p12
requestHeadersAllowlist:
- authorization
- securitytenant
- x-forwarded-for
- x-proxy-user
- x-proxy-roles
logging:
dest: /var/log/opensearch-dashboards.log
json: false
verbose: true
opensearch_security:
auth.type: "proxy"
proxycache:
user_header: "x-proxy-user"
roles_header: "x-proxy-roles"
cookie.secure: true
Для настройки соединения заполните следующие параметры:
Имя параметра |
Описание |
|---|---|
opensearch.requestHeadersAllowlist |
В данном параметре перечисляются имена заголовков, которые будут считываться из HTTP-запроса. |
opensearch_security.auth.type |
Отвечает за разрешенные типы аутентификации - данный параметр должен иметь значение "proxy" |
opensearch_security.proxycache.user_header |
Должно быть указано имя заголовка http-запроса, в котором будет содержаться логин пользователя |
opensearch_security.proxycache.roles_header |
Должно быть указано имя заголовка http-запроса, в котором будут содержаться роли пользователя. Роли отправляются самим прокси |
Если подключение происходит к прокси, у которого существует несколько ответвлений, то дополнительно должны быть заполнены следующие параметры:
Имя параметра |
Описание |
|---|---|
server.basePath |
Данный параметр должен содержать адрес ответвления. Например, если ответвление на IAM находится по адресу "https:// |
server.rewriteBasePath |
Данный параметр позволяет вырезать указанный выше дополнительный адрес из запросов к серверу. Должен быть в значении "true" |
Внимание! После внесенных изменений перезагрузите компонент SRHX.
Настройка аутентификации с IAM Proxy/СУДИР без проверки токена#
Замените все содержимое вашего файла "/etc/opensearch/opensearch-security/config.yml" на текст, указанный ниже:
config.yml для JWT
_meta:
config_version: 2
type: config
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: false
authc:
openid_auth_domain:
description: Authenticate via proxy
http_enabled: true
transport_enabled: true
order: 0
http_authenticator:
type: openid
challenge: false
config:
openid_connect_url: https://your-iam-proxy/auth/realms/PlatformAuth/.well-known/openid-configuration
openid_connect_idp:
enable_ssl: true
verify_hostnames: false
pemtrustedcas_filepath: /etc/opensearch/certs/ca.crt
jwks_uri: https://your-iam-proxy/auth/realms/PlatformAuth/protocol/openid-connect/certs
subject_key: sub
roles_key: groups
authentication_backend:
type: noop
basic_internal_auth_domain:
description: "Authenticate via HTTP Basic against internal users database"
http_enabled: true
transport_enabled: true
order: 1
http_authenticator:
type: basic
challenge: false
authentication_backend:
type: intern
Заполните:
Имя параметра |
Описание |
|---|---|
openid_connect_url |
Должна быть указана ссылка на параметры конфигурации OIDC. Обычно ссылка имеет вид "http(s):// |
openid_connect_idp.pemtrustedcas_filepath |
Должен быть указан путь к корневому сертификату, который использует провайдер |
jwks_uri |
Должна быть указана ссылка на место хранения публичных ключей конфигурации OIDC |
subject_key |
Должно быть установлено значение параметра токена с логином пользователя |
roles_key |
Должно быть установлено значение параметра токена с ролями пользователя |
Внимание!
После редактирования файла "config.yml", примените новые значения, с помощью запуска скрипта "securityadmin.sh". Этот процесс подробно описан в разделе Настройка методов аутентификации/авторизации и ролевой модели в пункте Применение данных к кластеру данного документа.
Добавьте в файл "opensearch_dashboards.yml" следующие параметры:
Пример заполнения файла opensearch_dashboards.yml:
opensearch_dashboards.yml для JWT
server:
host: "имя хоста"
port: порт
basePath: /pvs
rewriteBasePath: true
ssl:
enabled: true
keystore.path: /etc/opensearch/certs/keystore.p12
opensearch:
hosts:
- https://имя хоста SRHX сервера:порт
ssl:
alwaysPresentCertificate: true
verificationMode: full
certificateAuthorities: /etc/opensearch/certs/keystore.p12
keystore.path: /etc/opensearch/certs/keystore.p12
requestHeadersAllowlist:
- authorization
- securitytenant
logging:
dest: /var/log/opensearch-dashboards.log
json: false
verbose: true
opensearch_security:
auth.type: "jwt"
jwt.enabled: true
# jwt.url_param: "url_param"
cookie.secure: true
Для настройки соединения заполните следующие параметры:
Имя параметра |
Описание |
|---|---|
opensearch.requestHeadersAllowlist |
В данном параметре перечисляются имена заголовков, которые сервис будет считывать из HTTP-запроса. |
opensearch_security.auth.type |
Отвечает за разрешенные типы авторизации - данный параметр должен иметь значение "jwt" |
opensearch_security.jwt.enabled |
Должен быть в значении "true" |
opensearch_security.jwt.url_param |
Если токен передается не в http-заголовке, а как параметр URL, то нужно указать этот параметр здесь |
Внимание! После внесенных изменений перезагрузите компонент SRHX.
Обновление#
Для обновления на новую версию или переустановки компонента SRHX:
Очистите директорию "/usr/share/opensearch/*".
Распакуйте новую версию компонента SRHX в эту директорию.
Измените владельца и права на директорию и файлы.
Установите плагины для компонента SRHX. Каталог "/etc/opensearch" нет необходимости изменять, даже при обновлении версии компонента SRHX. Все настройки сохраняются и автоматически будут обновлены.
Удаление#
Удаление дополнительных средств защиты информации осуществляется в соответствии с документацией к ним. Для удаления компонента SRHX необходимо удалить главную папку opensearch и opensearch-dashboards:
sudo rm -rf /usr/share/opensearch /usr/share/opensearch-dashboards
Проверка работоспособности#
Учетная запись под которой осуществляется проверка, должна иметь достаточно прав, для этих действий. В стандартной ролевой модели можно использовать "admin/admin".
После настройки шифрования работает 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:ХХХХХ/
Пример ответа:

Проверка наличия плагинов#
После успешной установки компонента необходимо проверить, что плагины были установлены.
Проверить в пришедшем списке присутствие всех устанавливаемых плагинов на каждой node.
GET https://host:ХХХХХ/_cat/plugins?v
Пример ответа:

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

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

Проверка корректной работоспособности аудита#
Настройте стенд компонента SRHX с плагином Audit.
Выполните запрос на проверку включения аудита.
Проверьте, что параметр "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
}
}
}
Выполните запрос на создание индекса "test_audit" и загрузку в него документа через пользователя "admin".
PUT https://host:port/_bulk
Body:
{ "index" : { "_index" : "test_audit", "_id" : "0001" } }
{ "technic": "ноут это моя жизнь в этом мире","furniture": "стол, стул","companies": "Сбертех","date": "2023-06-13T10:30:00","specialists": "лидер разработчик","rating": 2,"status": true,"colors": "Багровый красный изотоп","age": 1,"phrases": "Шёл по лесу и увидел дуб"}
Basic Auth: admin/admin
p.s. Для Postman или аналогичных по, в запросе требуется оставлять последнюю строчку пустой
Ответ 200 ОК
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "test_audit"
}
Перейдите в kafka и найдите событие "REST_AUTHENTICATED" по наименованию индекса "test_audit".
Пример события в kafka:
{
"createdAt": 1700747748148,
"id": "4b8ce32c-fd36-4d9a-a52a-3a3d8e715c27",
"metamodelVersion": "589F77C656B584E63087FD87C8AC0E6F32B47DC52B8773C186D79B47F8BA0997",
"metamodelHash": "3F9F54E6444A91F5BBBABF2D0AC746F5E6E81C55B117952D8C252197AC20D7D9",
"module": "PLATFORM_V_SEARCH",
"name": "SEARCH_PLUGIN_AUDIT_REST_AUTHENTICATED",
"nodeId": "",
"requestId": null,
"userName": "",
"userLogin": "admin",
"userNode": "{значение}",
"session": "NO SESSION",
"sourceSystem": "UFS",
"tags": [],
"params": [
{
"name": "CLUSTER_NAME",
"value": "srhx_mono_cluster"
},
{
"name": "IS_ADMIN_DN",
"value": "false"
},
{
"name": "NODE_HOST_ADDRESS",
"value": "{значение}"
},
{
"name": "NODE_HOST_NAME",
"value": "{значение}"
},
{
"name": "NODE_ID",
"value": "Y_MN0sMuT7iRe_fXsbjrlg"
},
{
"name": "NODE_NAME",
"value": "{значение}"
},
{
"name": "REQUEST_BODY",
"value": "{ \"index\" : {\"_id\" : \"0001\" } }\n{ \"technic\": \"Ноут\",\"furniture\": \"стол, стул\",\"companies\": \"Сбертех\",\"trees\": \"Дуб\",\"specialists\": \"лидер разработчик\",\"games\": \"Прятки\",\"sports\": \"Футбол\",\"colors\": \"Багровый красный\",\"age\": 1,\"phrases\": \"Шёл по лесу и увидел дуб\",\"location\":\"34.423,58.432\"}\n{ \"index\" : {\"_id\" : \"0002\" } }\n{ \"technic\": \"Комп\",\"furniture\": \"Диван\",\"companies\": \"Сбертехи\",\"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[10.23.132.69: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": "DZO"
},
{
"name": "ufs.serverLocation",
"value": "{значение}"
},
{
"name": "ufs.terBankCode",
"value": null
},
{
"name": "ufs.vspCode",
"value": null
}
],
"changedParams": []
}
Проверка работоспособности internal users при настроенной аутентификации OIDC (JWT)#
Произведите настройку в opensearch-security/config.yml.
Добавьте параметры для аутентификации по OIDC.
---
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: true
remoteIpHeader: "x-forwarded-for"
internalProxies: "opensearch-dashboards-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
Если доступ отсутствует, то обратитесь к администратору стенда, чтобы он настроил параметры для конфигурационных параметров сервера.
Отображается пример заполненного корректного конфигурационного файла (в зависимости от стендов, значения могут различаться):
---
_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://platformauth-ift3.sc.dev.sbt/auth/realms/PlatformAuth/.well-known/openid-configuration
openid_connect_idp:
enable_ssl: true
verify_hostnames: false
pemtrustedcas_filepath: /etc/opensearch/certs/pd10-ca.crt
jwks_uri: https://platformauth-ift3.sc.dev.sbt/auth/realms/PlatformAuth/protocol/openid-connect/certs
subject_key: preferred_username
roles_key: realm_access
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
Выполните запрос к серверу без выбора параметра авторизации.
GET https://host:port/ No Auth
Ответ 401
Отображается ошибка о том что пользователь не авторизован.
Выполните запрос к серверу с выбором Basic Auth авторизации и пользователем IAM.
GET https://host:port/
Basic Auth
user IAM / password IAM
Ответ 401
Отображается ошибка о том что пользователь не авторизован, так как пользователь не существует на сервере.
Выполните запрос для проверки, что internal user может отправить запрос на сервер.
GET https://host:port/
Basic Auth: admin / admin
Ответ 200 ОК
Отображается информация о сервере.
Проверка работоспособности internal users при настроенной аутентификации IAM Proxy#
Произведите настройку в opensearch-security/config.yml.
Добавьте параметры для аутентификации по IAM Proxy.
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: true
remoteIpHeader: "x-forwarded-for"
internalProxies: "opensearch-dashboards-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
Отображается пример заполненного корректного конфигурационного файла (в зависимости от стендов, значения могут различаться):
_meta:
type: "config"
config_version: 2
config:
dynamic:
http:
anonymous_auth_enabled: false
xff:
enabled: true
remoteIpHeader: "x-forwarded-for"
internalProxies: 10.23.132.78
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: "iv-user"
roles_header: "iv-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
config:
openid_connect_url: https: //platformauth-ift3.sc.dev.sbt/auth/realms/PlatformAuth/.well-known/openid-configuration
openid_connect_idp:
enable_ssl: true
verify_hostnames: false
pemtrustedcas_filepath: /etc/opensearch/certs/pd10-ca.crt
jwks_uri: https: //platformauth-ift3.sc.dev.sbt/auth/realms/PlatformAuth/protocol/openid-connect/certs
subject_key: preferred_username
roles_key: realm_access
roles_sub_key: roles
authentication_backend:
type: intern
Выполните запрос к серверу без выбора параметра авторизации.
GET https://host:port/
No Auth
Ответ 401
Отображается ошибка о том, что пользователь не авторизован.
Выполните запрос к серверу с выбором Basic Auth авторизации и пользователя IAM.
GET https://host:port/
Basic Auth
Если доступ отсутствует, то обратитесь к администратору стенда.
Ответ 401
Отображается ошибка о том, что пользователь не авторизован, так как пользователь не существует на сервере.
Выполните запрос к серверу используя "Basic Auth" и пользователя admin.
GET https://host:port/
Basic Auth: admin / admin
Ответ 200 ОК
Отображается информация о сервере.
Откат#
Автоматической процедуры отката нет.
Откат к предыдущей версии компонента SRHX представляет собой удаление и установку последней стабильной версии компонента SRHX.
Для отката необходимо выполнить установку предыдущей стабильной версии компонента SRHX в соответствии с разделом Установка текущего документа.
Чек-лист валидации установки#
Убедитесь, что выполнена подготовка окружения согласно разделу Подготовка окружения данного документа.
Выполните проверку работоспособности компонента SRHX согласно разделу Проверка работоспособности настоящего документа.