1 Описание межкомпонентного и межсистемного взаимодействия#
1.1 Схема межкомпонентного и межсистемного взаимодействия#
1.2 Перечень компонентов#
- Описание протоколов межкомпонентного взаимодействия
Наименование | Описание | Используемый порт |
---|---|---|
Web-интерфейс “Спектра” | Предоставляет пользователю интерфейс для управления МБД.П | 8092 |
nginx | Маршрутизация входящего от конечных пользователей трафика до ядра “Спектра”, отдача статических веб-страниц. | 8092 |
spectrum-api | Ядро “Спектра”, предоставляет REST API для остальных компонентов “Спектра”. | 8000 |
spectrum-tasks | Служба выполнения фоновых заданий (операций), созданных пользователем. | - |
spectrum-scheduler | Служба фонового обновления информации об объектах управления. | - |
PostgreSQL | СУБД, используемая служебной spectrum-api для постоянного хранения информации об объектах управления и их статусе. | 5432 |
“Геном.БР” | Предоставляет REST API для получения информации о кластерах PostgreSQL в МБД.П. | 50888 |
“Визион” | Предоставляет REST API для получения метрик, используемых для отображения дашбордов в “Спектре”. | 8092 |
Система аутентификации и авторизации (Keycloak / Avanpost FAM) | Используется для аутентификации и авторизации пользователей веб-интерфейсов “Спектра”, “Генома”, “Визиона”. | Определяется инсталляционной картой. |
Агент “Спектра” | Служба на узлах кластера, используемая “Спектром” для управления кластером, получения информации о кластере и формирования метрик для “Визиона”. | 9000 |
Pacemaker / Corosync | Служба, управляющая кластером PostgreSQL в МБД.П. Используется “Спектром” для управления кластером. | |
Экземпляр PostgreSQL | СУБД в кластере МБД.П, является объектом управления с точки зрения “Спектра”. | Определяется инсталляционной картой, по умолчанию 5432. |
1.3 Описание протоколов межкомпонентного взаимодействия#
Инициатор | Цель | Протокол | Средство аутентификации |
---|---|---|---|
Конечный пользователь (браузер) | nginx | HTTPS | Логин / пароль. Вводятся на странице внешней системы аутентификации, используется Authorization code flow. Сlient secret для spectrum-api хранится на узле “Спектра” в зашифрованном виде. |
spectrum-api | Keycloak / Avanpost FAM | HTTPS | Логин / пароль. Вводятся на странице внешней системы аутентификации, используется Authorization code flow. Сlient secret для spectrum-api хранится на узле “Спектра” в зашифрованном виде. |
nginx | spectrum-api | HTTP | - |
spectrum-api | postgresql “Спектра” | протокол Postgres | Логин / пароль. Доступ только для локальных подключений. |
spectrum-api | spectrum-agent | HTTPS | Bearer token, опционально – проверка сертификата клиента. |
spectrum-api | “Визион” | HTTPS | Bearer token, опционально – проверка сертификата клиента. |
spectrum-api | “Геном” | HTTPS | Bearer token, опционально – проверка сертификата клиента. |
spectrum-api | postgresql в Кластере | протокол Postgres | Логин / пароль. |
spectrum-task-daemon | spectrum-api | HTTP | Отсутствует, используется только локальное взаимодействие внутри узла “Спектра”. |
spectrum-task-daemon | spectrum-agent | HTTPS | Bearer token, опционально – проверка сертификата клиента. |
spectrum-task-daemon | postgresql в Кластере | протокол Postgres | Логин / пароль. |
spectrum-scheduler | spectrum-api | HTTP | Отсутствует, используется только локальное взаимодействие внутри узла “Спектра”. |
spectrum-scheduler | spectrum-agent | HTTPS | Bearer token, опционально – проверка сертификата клиента. |
spectrum-scheduler | postgresql в Кластере | протокол Postgres | Логин / пароль. |
spectrum-agent | postgresql в Кластере | протокол Postgres | Логин / пароль. |
spectrum-agent | Pacemaker / Corosync | Запуск shell-команд, только локально на узле МБД.П под пользователем с ограниченными привилегиями (postgres). | |
spectrum-agent | postgresql в Кластере | протокол Postgres | Логин / пароль. |
2 Аутентификация при межкомпонентном взаимодействии#
2.1 Аутентификация для пользователей веб-интерфейса “Спектра”#
Для аутентификации и авторизации пользователей в ПО Скала^р Спектр используется внешние системы аутентификации и авторизации, совместимые с OpenID Connect.
Поддерживаемые системы аутентификации и авторизации:
• Keycloak;
• Avanpost FAM.
Учетные записи пользователей и их пароли настраиваются во внешней системе аутентификации и авторизации, за инструкциями можно обратиться к документации указанных продуктов.
Ролевая модель
Пользователи Спектра могут обладать ролями “Читатель” (spectrum-ro) либо “Писатель” (spectrum-rw). Пользователи с ролью “Читатель” могут войти в веб-интерфейс “Спектра”, просматривать информацию об объектах управления и их статусе, но не могут выполнять никаких действий над объектами управления.
Пользователи с ролью “Писатель” могут войти в веб-интерфейс “Спектра”, просматривать информацию об объектах управления и их статусе, а также выполнять любые действия над объектами управления, предусмотренные ПО Скала^р Спектр.
2.2 Настройка интеграции с KeyCloak#
2.2.1 Настройка пользователей#
![]() |
---|
Пользовательский интерфейс консоли администратора KeyCloak может отличаться от приведенного в данном руководстве. |
Для работы со "Спектром" при включённой авторизации необходимо настроить пользователей в KeyCloak.
Сначала необходимо выбрать нужный Realm (рабочее пространство) в выпадающем списке над меню или создать новый (на примере ниже выбрано значение "test-docs-realm").
После задания нужного Realm перейти в раздел "Клиенты" (Clients) и нажать на кнопку "Создать клиента" (Create client):
В поле "Client ID" ввести идентификатор клиента и нажать кнопку "Далее" (Next). Заданный ID клиента будет в дальнейшем использоваться в параметрах конфигурации “Спектра”:
На следующей странице:
-
включить переключатель "Аутентификация клиента" (Client authentication),
-
выставить флаг "Standart Flow",
-
выставить флаг "Direct access grants",
после чего нажать кнопку "Сохранить" (Save).
Эти параметры позднее можно изменить в настройках клиента.
Перейти во вкладку "Настройки" (Settings), в поле "Валидация URI перенаправления" (Valid redirect URIs) добавить IP-адрес "Спектра" в формате:
PROTO://IP:XXXX/*
где
-
PROTO - HTTP или HTTPS, в зависимости от настроек TLS "Спектра";
-
IP – IP-адрес "Спектра";
-
XXXX - порт "Спектра" для доступа к веб-интерфейсу.
Нажать кнопку "Сохранить" (Save).
Во вкладке "Учетные данные" (Credentials) есть поле "Секрет" (Client secret), значение которого будет в дальнейшем использоваться в параметрах конфигурации "Спектра".
Значение можно скопировать в буфер обмена, нажав на соответствующую кнопку возле поля:
Перейти во вкладку "Роли" (Roles), нажать кнопку "Создать роль" (Create role):
На экране создания роли ввести имя роли и нажать "Сохранить" (Save):
В примере, приведенном в данном руководстве, должны быть созданы две роли: spectrum-ro и spectrum-rw.
Перейти в пункт меню "Пользователи" (Users) и на странице "Пользователи" (User list) нажать кнопку "Создать пользователя" (Create new user):
На экране создания пользователя:
-
ввести желаемое имя пользователя,
-
включить "E-mail подтвержден" (Email verified),
-
нажать кнопку "Создать" (Create).
В примере, приведенном в данном руководстве, будет создано два пользователя: sprtest и sprtest-rw.
Перейти в пункт меню "Пользователи" и выбрать созданного пользователя, нажав на его имя:
Перейти во вкладку "Учетные данные" (Credentials), нажать на кнопку "Установить пароль" (Set password):
В появившемся окне задать пароль, повторить пароль и выключить признак "Временный" (Temporary), если не требуется смена пароля пользователем при первом входе. Нажать кнопку "Сохранить" (Save):
Перейти во вкладку "Сопоставление ролей" (Role mapping), нажать кнопку "Назначить роль" (Assign role):
На экране назначения ролей:
-
в выпадающем списке фильтра выбрать "Отсортировать по клиентам" (Filter by client),
-
ввести полностью или частично имя необходимой роли / общей части имени ролей, созданной ранее,
-
выбрать роли для назначения данному пользователю, выставив соответствующие флаги,
-
нажать кнопку "Назначить" (Assign).
В примере, приведенном в данном руководстве, пользователю sprtest назначается роль spectrum-ro, а пользователю sprtest-rw - spectrum-ro и spectrum-rw.
После настройки необходимо включить настроенный Realm, если этого не было сделано ранее.
Для этого нужно перейти в пункт меню "Настройки реалма" ("Realm settings") и включить переключатель "Включён" (Enabled):
2.2.2 Настройка конфигурации#
В файле конфигурации spectrum-api заполнить секцию аутентификации согласно примеру:
[auth]
auth_server=https://192.168.1.2:8080 # Адрес хоста, на котором расположен identy provider
realm=spectrum # Название realm, который был выбран в процессе настройки
client_id=spectrum-users # ID клиента, который был создан в процессе настройки
cert=/opt/skala-r/spectrum/certs/keycloak-chain.pem # Путь к файлу сертификата. Опциональный параметр
enabled=1 # Указать 1 для включения аутентификации, 0 для отключения
Также необходимо сохранить значение поля Client secret, полученное после создания клиента, в файл зашифрованного хранилища .vault_store.
Для этого выполнить следующие команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store
Далее необходимо ввести пароль хранилища, после чего будет открыт текстовый редактор.
Добавить следующую строчку, где secret – значение поля Client secret из KeyCloak:
client_secret: secret
и сохранить файл.
Пример файла .vault_store с зашифрованными секретами:
spectrum_db_pass: xx
password_db: x
client_secret: xxx
variable: value
После этого нужно перезапустить сервис API, введя команду:
systemctl restart spectrum-api
2.3 Настройка интеграции с Avanpost FAM#
2.3.1 Настройка пользователей#
![]() |
---|
Пользовательский интерфейс консоли администратора Avanpost FAM может отличаться от приведенного в данном руководстве. |
- Создать приложение.
Перейти во вкладку "Приложения" и нажать кнопку “+ Добавить приложение”:
- В окнах 1–3 выбрать / указать следующие данные:
- Выбрать тип Open ID:
Указать secret и необходимые Redirect URLs (их можно будет изменить в дальнейшем):
На шаге 3 выбрать фактор аутентификации Password:
Сохранить приложение:
После сохранения приложения перейти в раздел "Приложения", выбрать созданное приложение и во вкладке "Настройки" задать дополнительные параметры:
-
В разделе "Allowed grant types" активировать пункты "Authorization code", "Refresh token".
-
В разделе "Scope" (default) указать "openid profile email permissions groups".
В результате будет создано приложение, которое отобразится в списке на странице "Приложения".
Пример настроенного приложения Spectrum, с возможностью запускать веб-приложение на localhost:
- Нажать на имя приложения и перейти на вкладку "Модель доступа":
Задать следующие параметры:
-
Код;
-
Описание;
-
Права.
Нажать на кнопку "Сохранить".
- Перейти на вкладку "Сервис":
- Перейти в раздел "Настройки ролей и прав" и нажать кнопку "+ Добавить":
- Указать наименование и описание:
- Для создаваемой роли выбрать необходимые права:
- Создать группы для добавления пользователей.
Перейти на вкладку "Группы" и нажать на кнопку "+ Добавить группу":
- На вкладке "Приложения" указать приложение, для которого будет активна создаваемая группа:
- На вкладке "Роли" выбрать роли, которыми будут обладать пользователи, входящие в создаваемую группу:
- Создать пользователя.
Перейти на вкладку "Пользователи" и нажать кнопку "+ Добавить пользователя":
Указать следующие данные:
-
Логин;
-
Фамилия;
-
Имя;
-
Адрес электронной почты.
Нажать на кнопку "Сохранить".
- Настроить пароль.
Перейти на вкладку "Пользователи" и нажать на имя требуемого пользователя:
Перейти на вкладку "Безопасность" и нажать на ссылку "Задать новый пароль":
Ввести новый пароль, подтверждение пароля и нажать на кнопку "Сохранить":
- Добавить пользователя в созданную группу.
Перейти на вкладку "Группы" и нажать на имя созданной группы:
Отобразится вкладка "Пользователи" созданной группы.
Нажать на кнопку "Добавить пользователей":
Выбрать в списке требуемого пользователя и нажать на кнопку "Сохранить":
- Проверка.
Перейти во вкладки "Приложения" и "Группы и роли" и убедиться, что добавленный пользователь присутствует в созданных в процессе выполнения шагов 1-5 приложении и группе.
2.3.2 Настройка конфигурации#
Шаги по настройке аналогичны шагам п. 2.2.2, за исключением содержания секции аутентификации в файле конфигурации spectrum-api:
[auth]
auth_server=http://192.168.1.3:8080 # Адрес хоста, на котором расположен identy provider
client_id=spectrum-users # ID клиента, который был создан в процессе настройки
enabled=1 # Указать 1 для включения аутентификации, 0 для отключения
В зашифрованном хранилище в поле client_secret нужно указать значение поля secret, совпадающее с заданным при создании "приложения" в Avanpost FAM.
3 Настройка аутентификации для взаимодействия с внешними компонентами#
В своей работе ядро "Спектра" использует данные от внешних систем, а именно:
-
Агент "Спектра". Устанавливается на все узлы кластера МБД.П. Используется для управления кластером МБД.П и формирования некоторых метрик для мониторинга.
-
ПО "Визион". Используется для получения метрик, для отображения данных мониторинга в "Спектре".
-
ПО "Геном.У". Используется для получения данных о кластерах в Машине МБД.П
Для безопасной передачи данных между компонентами АС используется протокол HTTPS и аутентификация компонентов.
3.1 Настройка аутентификации в Агенте “Спектра”#
При взаимодействии ядра "Спектра" с Агентом "Спектра" используется аутентификация по токену.
Для настройки аутентификации в агенте "Спектра" нужно выполнить следующие действия:
- На узле "Спектра" перейти в каталог распакованного дистрибутива и выполнить команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
python3 spectrum-tools/update_agent_auth_token.py -i путь_к_файлу_inventory
где файл inventory – файл в формате .yml, содержащий данные об узлах кластера, на которых настраивается аутентификация с Агентом "Спектра".
Пример файла можно найти в распакованном дистрибутиве "Спектра" по пути inventory_samples/cluster.yml.
-
После выполнения последней команды нужно ввести токен аутентификации, который должен представлять из себя строку, содержащую латинские буквы и цифры.
-
Далее будет предложено ввести пароль, используемый для подключения к узлам кластера по SSH.
![]() |
---|
В результате выполнения этой команды Агенты “Спектра” на указанных узлах будут перезагружены. |
На узлах кластера значение токена хранится в защищенном (хэшированном) виде в конфигурационном файле Агента "Спектра" /opt/skala-r/etc/spectrum/spectrum-agent/config.conf.
На хосте Спектра значение токена хранится в зашифрованном файле /opt/skala-r/spectrum/.vault_store и записывается в него автоматически при выполнении команды из п. 1.
Для изменения ранее настроенного токена на новый необходимо повторить процедуру настройки аутентификации в Агенте "Спектра".
3.2 Настройка аутентификации в "Визионе"#
При взаимодействии ядра "Спектра" с API "Визиона" используется аутентификация по токену. Для настройки аутентификации необходимо выполнить следующие действия:
- Получить токен аутентификации "Визиона". Для этого нужно выполнить API-запрос с типом POST на адрес:
URL_ВИЗИОНА/vision/api/v1/auth/token/?name=ИМЯ_ТОКЕНА
Имя токена можно выбрать произвольное.
Ответ на успешный запрос должен иметь следующее содержание:
{
"status": "success",
"data": {
"jti": "03a4...",
"name": "ИМЯ_ТОКЕНА",
"created_at": "2024-06-04T11:15:05.809707+03:00",
"token": "ТОКЕН_АУТЕНТИФИКАЦИИ"
},
"pagination": null,
"message": null,
"error": null
}
- Если токен отсутствует, его можно создать через интерфейс "Визиона".
Для создания токена необходимо в интерфейсе пользователя "Визион" перейти в раздел "Безопасность" → "Токены доступа":
Необходимо ввести имя токена и нажать кнопку “Сгенерировать”, которая становится активной после ввода имени токена. Будет отображено поле со значением сгенерированного токена:
Сгенерированный токен необходимо сразу скопировать и использовать в дальнейшем при настройке "Спектра", так как впоследствии он не будет отображаться, в разделе “Токены доступа” будут отображаться только имена созданных токенов.
Подробнее о создании токенов см. Руководство Пользователя "Визион", раздел "Токены для внешних систем → Создание токена".
- Сохранить значение токена в файле с секретами.
В файл с зашифрованными секретами, расположенный на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store, необходимо добавить строку:
vision_token: ТОКЕН_АУТЕНТИФИКАЦИИ
Для этого выполнить следующие команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store
- Ввести пароль хранилища, после чего будет открыт текстовый редактор.
После сохранения файла нужно проверить корректность настройки секции "Визион" в файле конфигурации spectrum-api /opt/skala-r/etc/spectrum/spectrum-api/config.conf. Секция "Визион" должна иметь вид:
[vision_config]
host=192.168.191.61
port=8088
base_url=/vision/api/v1/tsdb
cert=
;client_cert=/opt/skala-r/spectrum/certs/client.crt
;client_key=/opt/skala-r/spectrum/certs/client.key
- Перезапустить сервис spectrum-api с помощью команды:
systemctl restart spectrum-api.service
3.3 Настройка TLS#
"Спектр" поддерживает возможность использования TLS для шифрования данных, передаваемых между хостом "Спектра" и Агентом "Спектра" на узлах кластеров, а также хостами "Генома" и "Визиона". Для корректной работы TLS необходимо предоставить подписанные корневой и серверный с ключами, а также внести изменения в конфигурационные файлы модулей "Спектра", Агента "Спектра" и Агента уведомлений "Спектра".
При использовании TLS при взаимодействии с "Геномом" или "Визионом" потребуется также настроить соответствующее ПО на узлах "Генома" и "Визиона". Инструкция по настройке TLS представлена в документации соответствующих продуктов.
При первой установке "Спектра" генерируются ключ и самоподписанный серверный сертификат для доступа к веб-интерфейсу "Спектра" по протоколу HTTPS.
Для полноценной настройки защищенного взаимодействия между всеми компонентами необходимо иметь также и корневой сертификат, которым будут подписаны все остальные сертификаты. Сертификаты могут иметь цепочки любой длины, должны иметь формат PEM с расширением файла .pem или .crt и могут быть самоподписанными. Ключ сертификата должен иметь расширение файла .key.
![]() |
---|
Если серверные сертификаты для “Спектра”, Агентов “Спектра”, “Визиона”, “Генома” были выпущены от общего корневого сертификата, то корневой сертификат, используемый для настройки защищенного взаимодействия с указанными компонентами – это один и тот же файл /opt/skala-r/spectrum/certs/ca.crt. |
3.3.1 Настройка TLS для веб-интерфейса “Спектра”#
![]() |
---|
Названия и расположение файлов и ключей сертификатов может отличаться от приведенных в данном руководстве. |
Для настройки TLS на хосте "Спектра" должны присутствовать:
-
серверный сертификат spectrum_server.crt;
-
ключ серверного сертификата spectrum_server.key;
Ключи расположены в директории /etc/nginx/ssl.
Необходимо удостовериться, что в конфигурации файле конфигурации nginx для "Спектра" (/etc/nginx/sites-available.d/spectrum.conf) в блоке server присутствуют следующие директивы с корректно указанными путями:
listen 8092 ssl;
TLS_certificate /etc/nginx/ssl/spectrum.crt;
TLS_certificate_key /etc/nginx/ssl/spectrum.key;
TLS_protocols TLSv1.2 TLSv1.3;
TLS_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
TLS_prefer_server_ciphers off;
TLS_ecdh_curve secp384r1;
TLS_session_tickets off;
# Можно убрать т.к. пока нет клиентов API Спектра
#ssl_verify_client optional;
#ssl_client_certificate /opt/skala-r/spectrum/certs/ca.crt;
3.3.2 Настройка TLS для взаимодействия с Агентом "Спектра"#
На узлах кластеров МБД.П должны присутствовать:
-
серверный сертификат node_server.crt;
-
ключ серверного сертификата node_server.key.
![]() |
---|
Серверные сертификаты и ключи должны быть выписаны от одного корневого сертификата. |
В файлах конфигурации Агента "Спектра" /opt/skala-r/etc/spectrum/spectrum-agent/config.conf и Агента уведомлений "Спектра" на узлах кластера должны быть указаны пути к серверному сертификату и ключу.
Пример секции с указанными путями к сертификатам в конфигурации Агента "Спектра":
"cert": {
"server_cert": "/opt/skala-r/spectrum/certs/server.crt",
"server_key": "/opt/skala-r/spectrum/certs/server.key",
}
На узле "Спектра" должен присутствовать корневой сертификат, а также в файлах конфигураций для служб spectrum-api, spectrum-tasks, spectrum-scheduler необходимо указать путь к корневому сертификату в секции agent_config.
Пути к файлам конфигураций соответствующих служб на хосте "Спектра":
-
/opt/skala-r/etc/spectrum/spectrum-api/config.conf,
-
/opt/skala-r/etc/spectrum/spectrum-tasks/config.conf,
-
/opt/skala-r/etc/spectrum/spectrum-sheduler/config.conf.
Пример секции с указанными путями к сертификатам в конфигурации spectrum-api:
[agent_config]
port=9000
cert=/opt/skala-r/spectrum/certs/ca.crt
3.3.3 Настройка TLS для взаимодействия с "Визионом"#
Если для "Визиона" настроено использование защищённого взаимодействия для внешних систем, то на стороне "Спектра" необходимо выполнить дополнительные настройки.
-
На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Визиона".
-
В файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции vision_config указать путь к корневому сертификату.
Пример секции:
[vision_config]
host=172.29.224.179
port=8428
base_url=/vision/victoriametrics/api/v1
cert=/opt/skala-r/spectrum/certs/ca.crt
3.3.4 Настройка TLS для взаимодействия с "Геном.У"#
Если для "Геном.У" настроено использование защищенного взаимодействия для внешних систем, то на стороне "Спектра" также необходимо выполнить дополнительные настройки.
-
На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Геном.У".
-
В файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции genome_config указать путь к корневому сертификату.
Пример секции:
[genome_config]
host=192.168.190.100
port=52888
base_url=/api/genome/v001/spectrum
username_db=genome
cert=/opt/skala-r/spectrum/certs/ca.crt
3.4 Проверка сертификатов клиента#
В качестве дополнительной меры защиты может использоваться проверка клиентских сертификатов при межкомпонентном взаимодействии. Эта функция по умолчанию отключена.
Для настройки этой функции необходимо получить корневой сертификат и клиентские сертификаты и ключи для каждого компонента, участвующего во взаимодействии, а также выполнить дополнительные настройки в файлах конфигурации "Спектра", Агента "Спектра", а также "Генома" и "Визиона", если проверка клиентских сертификатов выполняется и в них.
![]() |
---|
Клиентские сертификаты и ключи должны выписываться от общего корневого. |
3.4.1 Проверка клиентского сертификата в Агенте "Спектра"#
- На узлах кластера МБД.П разместить корневой сертификат, который использовался для генерации клиентских сертификатов в /opt/skala-r/spectrum/certs/ca.crt.
В файле конфигурации Агента "Спектра" (/opt/skala-r/etc/spectrum/spectrum-agent/config.conf) в секции auth добавить параметр ca_cert, в котором указать путь к корневому сертификату.
Пример секции auth с настроенным TLS и проверкой клиентских сертификатов:
"cert": {
"server_cert": "/opt/skala-r/spectrum/certs/server.crt",
"server_key": "/opt/skala-r/spectrum/certs/server.key",
"ca_cert": "/opt/skala-r/spectrum/certs/ca.crt"
}
Далее перезапустить службу Агента "Спектра":
systemctl restart spectrum-agent
![]() |
---|
После активации функции проверки клиентских сертификатов доступ к API Агента будет возможен только с использованием сертификатов клиента. |
- На узле "Спектра" в каталоге /opt/skala-r/spectrum/certs разместить клиентские сертификаты и внести изменения в файлы конфигурации служб spectrum-api, spectrum-scheduler, spectrum-tasks в секции agent_config, указав пути к сертификату и ключу клиента.
Пример секции agent_config для службы spectrum-api:
[agent_config]
port=9000
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/client.crt
client_key=/opt/skala-r/spectrum/certs/client.key
3.4.2 Проверка клиентского сертификата в "Визионе"#
Если в "Визионе" настроена функция проверки клиентских сертификатов, то на узле "Спектра" необходимо в каталоге /opt/skala-r/spectrum/certs/ разместить клиентские сертификат и ключ для взаимодействия с "Визионом", в файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции vision_config указать пути к этим файлам.
Пример секции vision_config:
[vision_config]
host=172.29.224.179
port=8428
base_url=/vision/victoriametrics/api/v1
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/vision_client.crt
client_key=/opt/skala-r/spectrum/certs/vision_client.key
3.4.3 Проверка клиентского сертификата в "Геном.У"#
Если в "Геном.У" настроена функция проверки клиентских сертификатов, то на узле "Спектра" необходимо в каталоге /opt/skala-r/spectrum/certs/ разместить клиентские сертификат и ключ для взаимодействия с "Геном.У" и в файле конфигурации службы spectrum-api (/opt/skala-r/etc/spectrum/spectrum-api/config.conf) в секции genome_config указать пути к этим файлам.
Пример секции genome_config:
[genome_config]
host=192.168.190.100
port=52888
base_url=/api/genome/v001/spectrum
username_db=genome
cert=/opt/skala-r/spectrum/certs/ca.crt
client_cert=/opt/skala-r/spectrum/certs/genome_client.crt
client_key=/opt/skala-r/spectrum/certs/genome_client.key
4 Используемые учетные записи#
4.1 Учетные записи ОС#
4.1.1 Учетные записи на узле "Спектра"#
На узле "Спектра" для запуска служб ПО Скала^ Спектр используется учетная запись spectrum, которая создается при установке "Спектра". Пользователь spectrum включается в группы:
-
spectrum,
-
wheel.
Данный пользователь используется только для запуска служб "Спектра" (systemd-сервисов), вход в систему с использованием этой учетной записи невозможен.
Для корректной работы всех функций "Спектра" настраиваются следующие правила повышения привилегий в файле /etc/sudoers.d/80-spectrum:
spectrum ALL=(root) NOPASSWD: /usr/bin/docker ps, /usr/bin/docker exec *
Пользователь spectrum имеет права на чтение и запись к следующим каталогам ОС:
-
/opt/skala-r/spectrum,
-
/opt/skala-r/etc/spectrum,
-
/opt/skala-r/var/log/spectrum.
Для смены пароля пользователя необходимо использовать команду passwd:
passwd spectrum
Команда запросит ввод нового пароля и подтверждение ввода пароля.
![]() |
---|
Пользователь spectrum создается только для запуска служб “Спектра”, по умолчанию пользователь spectrum создается без пароля и без возможности войти в систему. |
4.1.2 Учетные записи на узлах МБД.П#
На узлах МБД.П для запуска Агента "Спектра" используется учетная запись postgres. Пользователь postgres создается при установке ПО СУБД и дополнительно настраивается при установке Агента "Спектра". Пользователь включается в группы:
-
postgres,
-
wheel,
-
haclient.
Для корректной работы всех функций "Спектра" настраиваются следующие правила повышения привилегий в фале /ets/sudoers.d/spectrum:
Cmnd_Alias CLUSTERCTL = /usr/bin/pg_controldata *, /usr/sbin/corosync-quorumtool *, /usr/sbin/pcs *
postgres ALL=(root) NOPASSWD: CLUSTERCTL
Пользователь postgres имеет права на чтение и запись к следующим каталогам ОС:
-
/opt/skala-r/spectrum,
-
/opt/skala-r/etc/spectrum,
-
/opt/skala-r/var/log/spectrum.
а также каталогам, необходимым для корректной работы СУБД Postgres.
Для смены пароля пользователя необходимо использовать команду passwd:
passwd postgres
Команда запросит ввод нового пароля и подтверждение ввода пароля.
4.2 Учетные записи СУБД#
- На узле "Спектра" для работы служб ПО Скала^ Спектр используется служебная БД spectrum под управлением СУБД PosgreSQL.
БД создается при установке "Спектра", также для доступа служб "Спектра" в СУБД создается пользователь admin со случайным паролем. Пароль для доступа к СУБД postgres хранится в зашифрованном виде в файле /opt/skala-r/spectrum/.vault_store.
Возможно только локальное подключение к служебной БД "Спектра".
Для доступа к СУБД Кластера МБД.П используется техническая учетная запись genome, которая создается по умолчанию при создании сервисов СУБД при помощи ПО "Геном.БР".
Пароль от учетной записи genome хранится в зашифрованном виде в файле /opt/skala-r/spectrum/.vault_store.
- На узлах МБД.П Агент "Спектра" также использует учетную запись genome для доступа к СУБД Кластера МБД.П.
Пароль от учетной записи genome хранится в хэшированном виде в файле /opt/skala-r/etc/spectrum/spectrum-agent/config.conf
4.3 Смена паролей учетных записей#
4.3.1 Смена пароля от БД в конфигурации Агента "Спектра" на узле кластера#
В случае изменения пароля от БД на узлах кластера необходимо изменить пароль в конфигурации Агента "Спектра".
Для этого нужно перейти в каталог распакованного дистрибутива "Спектра" и выполнить следующие команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
python3 spectrum-tools/update_agent_db_password.py -i путь_к_файлу_inventory
Файл inventory – файл в формате .yml, содержащий данные об узлах кластера, на которых настраивается аутентификация с Агентом "Спектра".
Пример файла можно найти в распакованном дистрибутиве Спектра по пути inventory_samples/cluster.yml.
После выполнения последней команды пользователю будет предложено ввести пароль от БД, используемый на указанных узлах.
Далее пользователю будет предложено ввести пароль, используемый для подключения к узлам кластера по SSH.
![]() |
---|
В результате выполнения этой команды Агенты “Спектра” на указанных узлах будут перезагружены. |
Также нужно изменить пароль от БД на узлах кластера в файле с зашифрованными секретами, расположенном на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store. Для этого нужно выполнить следующие команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store
Далее необходимо ввести пароль хранилища, после чего будет открыт текстовый редактор.
Нужно изменить значение в строке:
password_db: ПАРОЛЬ_ОТ_БД_НА_УЗЛАХ
После сохранения файла нужно перезапустить сервис spectrum-api с помощью команды:
systemctl restart spectrum-api.service
4.3.2 Смена пароля от БД на хосте "Спектра"#
В случае изменения пароля от БД на хосте "Спектра" необходимо изменить пароль в файле с зашифрованными секретами, расположенный на хосте "Спектра" по пути /opt/skala-r/spectrum/.vault_store.
Для этого выполнить следующие команды:
source /opt/skala-r/spectrum/python-modules/bin/activate
ansible-vault edit /opt/skala-r/spectrum/.vault_store
Далее необходимо ввести пароль хранилища, после чего будет открыт текстовый редактор.
Нужно изменить значение в строке:
spectrum_db_pass: ПАРОЛЬ_ОТ_БД_НА_ХОСТЕ_СПЕКТРА
После сохранения файла перезапустить сервис spectrum-api с помощью команды:
systemctl restart spectrum-api.service
5 Журналирование и аудит#
В ПО Скала^р Спектр ведется аудит следующих событий.
Событие | Примечание |
---|---|
Вход пользователя в систему | Событие аудита записывается после успешного ввода логина и пароля пользователя в системе аутентификации (Keycloak / Avanpost) и перенаправления пользователя на страницу “Спектра”. |
Выход пользователя из системы | Событие аудита записывается после успешного ввода логина и пароля пользователя в системе аутентификации (Keycloak / Avanpost) и перенаправления пользователя на страницу “Спектра”. |
Чтение объекта | Событие аудита создается при просмотре детальной информации об объектах: - кластер; - узел; - сервис СУБД. |
Изменение объекта | Событие аудита записывается при выполнении следующих операций: - редактировании конфигурации Postgres; - редактирование параметров аутентификации; - редактирование параметров pg_proaudit; - смена владельца БД; - переименование БД; - переименование площадки; - редактирование параметров PgBouncer. |
Создание объекта | Событие аудита записывается при выполнении следующих операций: - импорт кластера; - создание сервиса; - создание резервной копии. |
Удаление объекта | Событие аудита записывается при выполнении следующих операций: - удаление кластера из “Спектра”; - удаление сервиса; - удаление резервной копии. |
Межкомпонентное взаимодействие | Событие аудита записывается при выполнении операций, которые запускаются из “Спектра”, но выполняются в “Геном.У”: - создание / удаление сервиса СУБД; - добавление / удаление PgBouncer. |
Также ведётся журнал системных событий:
-
начало работы (запуск) системы;
-
окончание работы (остановка системы).
Файлы с информацией о событиях аудита расположены на узле "Спектра" в каталоге /opt/skala-r/var/log/spectrum/audit. Запись происходит в двух форматах: CEF и JSON.
Имена файлов аудита в формате CEF имеют вид audit_cef-<дата создания файла>.log и ротируются по датам.
Пример записи в файле аудита в формате CEF:
CEF:0|Skala-r|spectrum|1.4.1.159|200|Пользователь admin3 вошел в систему|3|externalId=69 msg=Пользователь admin3 вошел в систему deviceProcessName=spectrum-api outcome=success start=1725455485 suser=admin3 app=http dhost=spectrum-136 dst=192.168.186.136 dpt=8092 src=localhost shost=localhost spt=8000
Имена файлов аудита в формате JSON имеют вид audit-< дата создания файла\ >.log и ротируются по датам.
Пример записи в файле аудита в формате JSON:
{"createdAt":"1726030907701", "userNode": "spectrum-test-stand-0", "metamodelVersion": "1", "module": "spectrum", "name": "login", "userLogin": "test-rw", "userName": "Test Test", "params": [{"name": "message", "value": "Пользователь test-rw вошел в систему" }, {"name": "serviceVersion", "value": "1.5.0.189"}]}
Файлы с информацией о системных событиях расположены на узле "Спектра" в директории /opt/skala-r/var/log/spectrum/journal. Запись происходит в двух форматах: CEF и syslog.
Имена файлов журналов в формате CEF имеют вид journal_cef-< дата создания файла\ >.log и ротируются по датам.
Пример записи в файле журнала системных событий в формате CEF:
CEF:0|Skala-r|spectrum|1.4.1.157|100|Сервис spectrum-api запущен|3|externalId=0 msg=Сервис spectrum-api запущен deviceProcessName=spectrum-api outcome=success start=1725453183 dhost=spectrum-136
Имена файлов журналов в формате JSON имеют вид journal-< дата создания файла\ >.log и ротируются по датам.
Пример записи в файле журнала системных событий в формате syslog:
024-09-10T17:23:58.022320+03:00 spectrum-test-stand-0 SPR_JOURNAL: info Запущена задача "Подготовка бэкапа 192.168.190.117"
6 Контроль целостности файлов конфигурации "Спектра"#
6.1 РЕД ОС Муром 7.3#
Используется утилита afick в соответствии с https://redos.red-soft.ru/base/manual/redos-manual/safe-redos/afick/ .
Все действия выполняются от имени администратора (root).
6.1.1 Включение контроля целостности#
-
Установить утилиту контроля целостности dnf install afick.
-
Добавить список файлов и директорий для контроля в конфигурационный файл /etc/afick.conf в раздел # files to scan с необходимыми опциями.
-
Запустить утилиту с ключом –update afick –update для обновления и формирования базы контролируемых файлов.
Регулярная проверка целостности обеспечивается запуском cron-задачи. Задача создается при установке утилиты с регулярностью раз в сутки.
Результатом выполнения является сформированный отчет, который будет отправлен на электронный адрес, указанный в конфигурационном файле в секции @@define MAILTO root.
6.1.2 Периодичность запуска#
Bash-скрипт, отвечающий за проверку целостности и отправки отчета, находится в /etc/cron.daily/afick_cron.
Настройка периодичности проверки целостности может быть изменена в соответствии с механизмом работы cron.
6.1.3 Проверка механизма контроля целостности#
Для проверки того, что контроль целостности осуществляется:
-
Используя команду afick -k провести проверку целостности: ожидаемый результат – отсутствие изменений.
-
Изменить контролируемый файл или создать новый в контролируемой директории.
-
Провести повторную проверку: ожидаемый результат – сообщение о нарушении целостности.
![]() |
---|
После настройки и постановки файлов на контроль целостности любые изменения конфигурации компонентов должны происходить через службу ИБ с последующим обновлением внутренней БД утилиты. |
После внесения изменений в контролируемые файлы и их фиксирования необходимо от имени администратора запустить afick –update.
6.2 Альт СП 8 р9 и СП 8 р10#
Используется утилита osec в соответствии с руководством по комплексу средств защиты от «Базальт СПО» ("Руководство по комплексу средств защиты.pdf"). Если утилита не установлена, установка производится командой:
apt-get install osec
Все действия выполняются от имени администратора (root).
6.2.1 Включение контроля целостности#
- Проверить, что сервис контроля целостности при загрузке активирован (enabled). Для этого выполнить команду:
# systemctl is-enabled integalert
Если в результате запуска команды будет получен ответ "disabled", выполнить команду для активации сервиса контроля целостности:
# systemctl enable integalert*
-
Определить каталоги для проверки целостности osec (см. п. 6.2.2 "Определение каталогов для контроля целостности").
-
Выполнить запуск osec:
- выполнить команду:
# integalert fix
- или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:
# osec -f /etc/osec/dirs.conf -D /var/lib/osec/
- Для фиксации изменений и проверки конфигурации выполнить команду:
# systemctl restart osec
Проверка целостности системы при помощи osec выполняется командой integalert.
При необходимости можно настроить / изменить периодичность запуска osec.
6.2.2 Определение / изменение каталогов для проверки целостности#
По умолчанию отслеживаются изменения в папках /bin, /sbin, /usr/bin, /usr/sbin.
Для того, чтобы определить или изменить список каталогов для проверки целостности, например, /bin, /sbin, /lib, /lib64, нужно отредактировать список каталогов, который хранится в файле /etc/osec/dirs.conf (строки, начинающиеся со знака «#», игнорируются):
# vim /etc/osec/dirs.conf
После внесения изменений в файл /etc/osec/dirs.conf необходимо выполнить запуск osec.
6.2.3 Периодичность запуска osec#
Кроме пакета программного комплекса osec в систему устанавливается пакет osec-timerunit. Он позволяет задать способ и периодичность запуска osec (файлы /lib/systemd/system/osec.service, /lib/systemd/system/osec.timer). В пакете osec-timerunit есть файл с заданием для демона cron и конфигурационные файлы (dirs.conf).
Для проверки статуса периодического контроля целостности выполнить команду:
# systemctl status osec.timer
Для активации периодического контроля целостности выполнить команды:
# systemctl enable osec.timer
# systemctl start osec.timer
По умолчанию в osec.timer задан запуск проверки ежедневно в полночь.
Если необходимо задавать другие периоды запуска osec, то необходимо создать файл /etc/systemd/system/osec.timer с измененными периодами и перезагрузить демон systemd:
# cp /lib/systemd/system/osec.timer /etc/systemd/system/osec.timer
# vim /etc/systemd/system/osec.timer
# systemctl daemon-reload
6.2.4 Проверка механизма контроля целостности#
Для проведения теста необходимо авторизоваться в системе от имени администратора.
- Подготовить каталог для базы данных:
# mkdir /tmp/base
# chown osec:osec /tmp/base
# cp -ar /var/lib/osec/* /tmp/base
-
Сформировать контрольные суммы объектов (список путей к ним хранится в файле /etc/osec/dirs.conf) и занести их в базу данных /tmp/base.
-
Результат работы osec выводится на консоль, поэтому для перенаправления вывода результата в текстовый файл /tmp/report1 нужно выполнить команду:
# osec -f /etc/osec/dirs.conf -D /tmp/base/ –r >/tmp/report1
- Не производя никаких изменений в системе, запустить osec повторно и вывести результат работы в текстовый файл /tmp/report2:
# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r >/tmp/report2
- Сравнить два результирующих файла /tmp/report1 и /tmp/report2:
# diff -u0 /tmp/report1 /tmp/report2
Два отчета должны совпадать, в консоли не должно быть выведено никаких различий.
-
Выполнить изменения в контролируемых файлах / директориях (добавить, удалить и т.д.)
-
Запустить osec в режиме «только чтение» и перенаправить вывод в текстовый файл /tmp/report3:
# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r > /tmp/report3
- Сравнить два результирующих файла /tmp/report2 и /tmp/report3:
# diff -u0 /tmp/report2 /tmp/report3
Ожидаемые результаты: сведения об изменениях, сделанных выше с конфигурационными файлами, должны выводиться на консоль.
6.2.5 Порядок восстановления целостности системы#
В случае выявления нарушения целостности:
-
при проверке целостности системы командой integalert;
-
при загрузке ОС – вывод визуального оповещения с обязательным подтверждением дальнейшей загрузки ОС. Система загружается в однопользовательском режиме с запросом пароля суперпользователя.
Порядок восстановления:
-
От имени администратора (root) выполнить просмотр лога аудита и найти нарушение целостности.
-
Восстановить объект с нарушенной целостностью – заменить на эталон / переустановить или пропустить при подтверждении корректности внесенного в объект изменения.
-
Запустить восстановление целостности системы. Если система контроля целостности IMA / EVM не инициализирована, выполнить команду:
# integalert fix
или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:
# osec -f /etc/osec/dirs.conf –D /var/lib/osec
- Перезагрузить систему.
![]() |
---|
После настройки и постановки файлов на контроль целостности любые изменения конфигурации компонентов должны происходить через службу ИБ с последующим обновлением внутренней БД утилиты. |
6.3 Перечень файлов и директорий "Спектра" для контроля целостности#
Директория | Примечание |
---|---|
/opt/skala-r/spectrum/.vault_store | |
/opt/skala-r/etc/spectrum/ | |
/opt/skala-r/spectrum/certs | |
/etc/nginx/ /etc/systemd/system/multi-user.target.wants/nginx.service /usr/sbin/nginx | /etc/systemd/system/multi-user.target.wants/nginx.service символическая ссылка на: · в Astra - /lib/systemd/system/nginx.service · в Alt - /lib/systemd/system/nginx.service · в RedOS - /usr/lib/systemd/system/nginx.service |
/var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_ident.conf | Для Altlinux Server 8 СП p9, Altlinux Server 8 СП p10, RedOS 7.3 |
/usr/bin/postgres /etc/systemd/system/multi-user.target.wants/postgresql.service | /etc/systemd/system/multi-user.target.wants/postgresql.service символическая ссылка на: · в Astra - /lib/systemd/system/postgresql.service · в Alt - /lib/systemd/system/postgresql.service · в RedOS - /usr/lib/systemd/system/postgresql.service |
/etc/systemd/system/spectrum-api.service /etc/systemd/system/spectrum-tasks.service /etc/systemd/system/spectrum-scheduler.service /etc/systemd/system/spectrum-agent.service |