Руководство администратора информационной безопасности Спектр Rel.1.5.1

1 Описание межкомпонентного и межсистемного взаимодействия#

1.1 Схема межкомпонентного и межсистемного взаимодействия#

1.2 Перечень компонентов#

  1. Описание протоколов межкомпонентного взаимодействия
Наименование Описание Используемый порт
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):

На экране назначения ролей:

  1. в выпадающем списке фильтра выбрать "Отсортировать по клиентам" (Filter by client),

  2. ввести полностью или частично имя необходимой роли / общей части имени ролей, созданной ранее,

  3. выбрать роли для назначения данному пользователю, выставив соответствующие флаги,

  4. нажать кнопку "Назначить" (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. Создать приложение.

Перейти во вкладку "Приложения" и нажать кнопку “+ Добавить приложение”:

  1. В окнах 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. Нажать на имя приложения и перейти на вкладку "Модель доступа":

Задать следующие параметры:

  • Код;

  • Описание;

  • Права.

Нажать на кнопку "Сохранить".

  1. Перейти на вкладку "Сервис":

  1. Перейти в раздел "Настройки ролей и прав" и нажать кнопку "+ Добавить":

  1. Указать наименование и описание:

  1. Для создаваемой роли выбрать необходимые права:

  1. Создать группы для добавления пользователей.

Перейти на вкладку "Группы" и нажать на кнопку "+ Добавить группу":

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

  1. На вкладке "Роли" выбрать роли, которыми будут обладать пользователи, входящие в создаваемую группу:

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

Перейти на вкладку "Пользователи" и нажать кнопку "+ Добавить пользователя":

Указать следующие данные:

  • Логин;

  • Фамилия;

  • Имя;

  • Адрес электронной почты.

Нажать на кнопку "Сохранить".

  1. Настроить пароль.

Перейти на вкладку "Пользователи" и нажать на имя требуемого пользователя:

Перейти на вкладку "Безопасность" и нажать на ссылку "Задать новый пароль":

Ввести новый пароль, подтверждение пароля и нажать на кнопку "Сохранить":

  1. Добавить пользователя в созданную группу.

Перейти на вкладку "Группы" и нажать на имя созданной группы:

Отобразится вкладка "Пользователи" созданной группы.

Нажать на кнопку "Добавить пользователей":

Выбрать в списке требуемого пользователя и нажать на кнопку "Сохранить":

  1. Проверка.

Перейти во вкладки "Приложения" и "Группы и роли" и убедиться, что добавленный пользователь присутствует в созданных в процессе выполнения шагов 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 Настройка аутентификации в Агенте “Спектра”#

При взаимодействии ядра "Спектра" с Агентом "Спектра" используется аутентификация по токену.

Для настройки аутентификации в агенте "Спектра" нужно выполнить следующие действия:

  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.

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

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

Примечание
В результате выполнения этой команды Агенты “Спектра” на указанных узлах будут перезагружены.

На узлах кластера значение токена хранится в защищенном (хэшированном) виде в конфигурационном файле Агента "Спектра" /opt/skala-r/etc/spectrum/spectrum-agent/config.conf.

На хосте Спектра значение токена хранится в зашифрованном файле /opt/skala-r/spectrum/.vault_store и записывается в него автоматически при выполнении команды из п. 1.

Для изменения ранее настроенного токена на новый необходимо повторить процедуру настройки аутентификации в Агенте "Спектра".

3.2 Настройка аутентификации в "Визионе"#

При взаимодействии ядра "Спектра" с API "Визиона" используется аутентификация по токену. Для настройки аутентификации необходимо выполнить следующие действия:

  1. Получить токен аутентификации "Визиона". Для этого нужно выполнить 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
}
  1. Если токен отсутствует, его можно создать через интерфейс "Визиона".

Для создания токена необходимо в интерфейсе пользователя "Визион" перейти в раздел "Безопасность" → "Токены доступа":

Необходимо ввести имя токена и нажать кнопку “Сгенерировать”, которая становится активной после ввода имени токена. Будет отображено поле со значением сгенерированного токена:

Сгенерированный токен необходимо сразу скопировать и использовать в дальнейшем при настройке "Спектра", так как впоследствии он не будет отображаться, в разделе “Токены доступа” будут отображаться только имена созданных токенов.

Подробнее о создании токенов см. Руководство Пользователя "Визион", раздел "Токены для внешних систем → Создание токена".

  1. Сохранить значение токена в файле с секретами.

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

После сохранения файла нужно проверить корректность настройки секции "Визион" в файле конфигурации 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
  1. Перезапустить сервис 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 для взаимодействия с "Визионом"#

Если для "Визиона" настроено использование защищённого взаимодействия для внешних систем, то на стороне "Спектра" необходимо выполнить дополнительные настройки.

  1. На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Визиона".

  2. В файле конфигурации службы 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 для взаимодействия с "Геном.У"#

Если для "Геном.У" настроено использование защищенного взаимодействия для внешних систем, то на стороне "Спектра" также необходимо выполнить дополнительные настройки.

  1. На узле "Спектра" разместить в /opt/skala-r/spectrum/certs/ca.crt корневой сертификат, от которого был выписан сертификат "Геном.У".

  2. В файле конфигурации службы 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 Включение контроля целостности#

  1. Установить утилиту контроля целостности dnf install afick.

  2. Добавить список файлов и директорий для контроля в конфигурационный файл /etc/afick.conf в раздел # files to scan с необходимыми опциями.

  3. Запустить утилиту с ключом –update afick –update для обновления и формирования базы контролируемых файлов.

Регулярная проверка целостности обеспечивается запуском cron-задачи. Задача создается при установке утилиты с регулярностью раз в сутки.

Результатом выполнения является сформированный отчет, который будет отправлен на электронный адрес, указанный в конфигурационном файле в секции @@define MAILTO root.

6.1.2 Периодичность запуска#

Bash-скрипт, отвечающий за проверку целостности и отправки отчета, находится в /etc/cron.daily/afick_cron.

Настройка периодичности проверки целостности может быть изменена в соответствии с механизмом работы cron.

6.1.3 Проверка механизма контроля целостности#

Для проверки того, что контроль целостности осуществляется:

  1. Используя команду afick -k провести проверку целостности: ожидаемый результат – отсутствие изменений.

  2. Изменить контролируемый файл или создать новый в контролируемой директории.

  3. Провести повторную проверку: ожидаемый результат – сообщение о нарушении целостности.

Внимание!
После настройки и постановки файлов на контроль целостности любые изменения конфигурации компонентов должны происходить через службу ИБ с последующим обновлением внутренней БД утилиты.

После внесения изменений в контролируемые файлы и их фиксирования необходимо от имени администратора запустить afick –update.

6.2 Альт СП 8 р9 и СП 8 р10#

Используется утилита osec в соответствии с руководством по комплексу средств защиты от «Базальт СПО» ("Руководство по комплексу средств защиты.pdf"). Если утилита не установлена, установка производится командой:

apt-get install osec

Все действия выполняются от имени администратора (root).

6.2.1 Включение контроля целостности#

  1. Проверить, что сервис контроля целостности при загрузке активирован (enabled). Для этого выполнить команду:
# systemctl is-enabled integalert

Если в результате запуска команды будет получен ответ "disabled", выполнить команду для активации сервиса контроля целостности:

# systemctl enable integalert*
  1. Определить каталоги для проверки целостности osec (см. п. 6.2.2 "Определение каталогов для контроля целостности").

  2.  Выполнить запуск osec:

  • выполнить команду:
 # integalert fix
  • или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:
 # osec -f /etc/osec/dirs.conf -D /var/lib/osec/
  1. Для фиксации изменений и проверки конфигурации выполнить команду:
 # 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 Проверка механизма контроля целостности#

Для проведения теста необходимо авторизоваться в системе от имени администратора.

  1. Подготовить каталог для базы данных:
# mkdir /tmp/base 
# chown osec:osec /tmp/base 
# cp -ar /var/lib/osec/* /tmp/base
  1. Сформировать контрольные суммы объектов (список путей к ним хранится в файле /etc/osec/dirs.conf) и занести их в базу данных /tmp/base.

  2. Результат работы osec выводится на консоль, поэтому для перенаправления вывода результата в текстовый файл /tmp/report1 нужно выполнить команду:

# osec -f /etc/osec/dirs.conf -D /tmp/base/ –r >/tmp/report1
  1. Не производя никаких изменений в системе, запустить osec повторно и вывести результат работы в текстовый файл /tmp/report2:
# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r >/tmp/report2
  1. Сравнить два результирующих файла /tmp/report1 и /tmp/report2:
 # diff -u0 /tmp/report1 /tmp/report2

Два отчета должны совпадать, в консоли не должно быть выведено никаких различий.

  1. Выполнить изменения в контролируемых файлах / директориях (добавить, удалить и т.д.)

  2. Запустить osec в режиме «только чтение» и перенаправить вывод в текстовый файл /tmp/report3

# osec -f /etc/osec/dirs.conf -D /tmp/base/ -r > /tmp/report3
  1. Сравнить два результирующих файла /tmp/report2 и /tmp/report3:
# diff -u0 /tmp/report2 /tmp/report3

Ожидаемые результаты: сведения об изменениях, сделанных выше с конфигурационными файлами, должны выводиться на консоль.

6.2.5 Порядок восстановления целостности системы#

В случае выявления нарушения целостности:

  • при проверке целостности системы командой integalert;

  • при загрузке ОС – вывод визуального оповещения с обязательным подтверждением дальнейшей загрузки ОС. Система загружается в однопользовательском режиме с запросом пароля суперпользователя.

Порядок восстановления:

  1. От имени администратора (root) выполнить просмотр лога аудита и найти нарушение целостности.

  2. Восстановить объект с нарушенной целостностью – заменить на эталон / переустановить или пропустить при подтверждении корректности внесенного в объект изменения.

  3. Запустить восстановление целостности системы. Если система контроля целостности IMA / EVM не инициализирована, выполнить команду:

# integalert fix

или сформировать контрольные суммы для измененных / новых объектов и занести их в базу данных. Для этого выполнить команду:

# osec -f /etc/osec/dirs.conf –D /var/lib/osec
  1. Перезагрузить систему.
Внимание!
После настройки и постановки файлов на контроль целостности любые изменения конфигурации компонентов должны происходить через службу ИБ с последующим обновлением внутренней БД утилиты.

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