Перейти к основному содержимому

Журнал безопасности

Проблема и зачем​

Журнал безопасности — отдельный поток записей о том, кто вошёл в кластер, кто менял роли и настройки, что происходило с виртуальными машинами. Он живёт не вместе с техническими логами компонентов, а в своей таблице базы vStack Center, и открывается отдельным экраном — Security Event Log.

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

Отсюда вопросы, на которые администратору нужен ответ. Какое событие требует реакции, а какое фоновое. Что означает статус «цепочка нарушена». Куда девается журнал, когда таблица разрастается, и чем архив отличается от выгрузки.

Эта страница разбирает модель. Как читать события и фильтровать их — в инструкции «Как читать журнал и фильтровать события»; как выгрузить журнал, забрать архив и запустить проверку целостности — в инструкции «Как выгрузить журнал, скачать архив и проверить целостность».

Модель и сущности​

Запись события​

Запись — плоский набор полей. Он делится на три части: что и когда произошло, кто субъект, над каким объектом.

ПолеЧто показывает
idчисловой номер записи; по нему идут сортировка и адресация
event_uuidUUID события
tsмомент события, Unix timestamp в секундах
event_typeкод типа события, например auth.login.success
user_idномер пользователя-субъекта
usernameимя пользователя-субъекта
object_typeтип объекта, над которым шло действие
object_idномер объекта
object_nameимя объекта
resultитог: success или failure
detailsдополнительные сведения
remote_ipадрес клиента
request_idUUID запроса к кластеру, породившего запись
record_hashSHA-256 хеш записи — звено цепочки
acknowledgedотметка текущего пользователя о прочтении

Поля субъекта и объекта пустые там, где событие их не имеет: у входа в кластер нет объекта, у системного события нет пользователя. Поле request_id сшивает событие с обращением к кластеру, которое его породило, — с него удобно начинать разбор, когда одно действие оставило несколько записей.

Эти же поля становятся колонками файла, когда журнал выгружают в CSV или JSON. Таблица на экране показывает только часть из них, остальные — в карточке отдельной записи.

Справочник типов​

Тип события — строковый код с точками: auth.login.success, auth.login.failure. Список типов держит кластер: у каждого кода есть категория, уровень важности и человекочитаемое название. Из этого справочника собираются фильтр по типу события и подписи в таблице, поэтому набор типов задаёт версия кластера, а не клиент.

События с самих узлов​

До 3.0.5 журнал видел только то, что происходило в плоскости управления. В 3.0.5 в него пошли события операционной системы узлов и события средства виртуализации — они приходят от агентов узлов и попадают в ту же хеш-цепочку.

Тип событияО чём записьКатегорияВажность
os.ssh_login_successуспешный вход по SSH на узлеauthinfo
os.ssh_login_failureнеуспешный вход по SSH на узлеauthwarning
os.user_local_createdсоздание локальной учётной записи на узлеauthnotice
os.user_local_deletedудаление локальной учётной записи на узлеauthnotice
os.sysctl_changedизменение параметра ядра узла (sysctl)configwarning
os.bootзапуск узлаsystemnotice
os.shutdownштатная остановка узлаsystemnotice
os.shutdown_uncleanнештатная остановка узлаsystemerror
os.kernel_panicпаника ядра узлаsystemcritical
system.service_stopped_uncleanнештатное завершение средства виртуализации: снятие процесса, сбой, отказ питания управляющей машиныsystemerror
vm.console_connectedподключение к консоли ВМ по WSSvminfo
vm.console_connect_failedотказ подключения к консоли ВМvmwarning

Из этого набора в счётчик критических событий попадает только os.kernel_panic: у него важность critical, а счётчик считает три верхних уровня. Нештатные остановки — узла и средства виртуализации — идут с важностью error: в счётчик они не попадают, но в почтовые оповещения при пороге error и ниже — да.

Запись os.shutdown_unclean и system.service_stopped_unclean появляются не в момент сбоя, а при следующем запуске: до него сообщить о себе некому. На чистой установке первый запуск ложной записи не создаёт.

Категории и важность​

Категория группирует типы по области. В записи и в выгрузке она стоит коротким кодом, а панель фильтров показывает подпись интерфейса — три из шести расходятся:

Код в записиПодпись в панели фильтровОбласть
authauthenticationаутентификация и управление доступом
vmvirtual machinesвиртуальные машины
configconfigurationконфигурация инфраструктуры
roleroleуправление ролями
systemsystemсистемные события
integrityintegrityконтроль целостности

Важность — семь уровней, от самого высокого к самому низкому: emergency, alert, critical, error, warning, notice, info. Критическими кластер считает три верхних уровня — emergency, alert, critical. Именно на них считается счётчик непрочитанного и настраивается рассылка писем.

Как работает​

Хеш-цепочка​

Каждая запись хранит в поле record_hash собственный SHA-256 хеш, который связывает её с соседями по журналу. Изъятие или подмена записи в середине рвёт связь: у следующих записей хеш перестаёт сходиться, и проверка называет номер записи, на которой цепочка оборвалась.

Из этой схемы следует главное свойство журнала: он только пополняется. Журнал можно читать, отмечать прочитанным, выгружать и архивировать — правки или удаления отдельной записи нет. Уменьшить таблицу можно только архивацией.

Проверка целостности​

Проверка цепочки — фоновая. При запуске кластер сразу распределяет работу: делит журнал на равные части и раздаёт их воркерам, которые идут по своим частям одновременно. Пока проверка идёт, на кнопке запуска стоит процент выполнения; по завершении рядом с ней встаёт отчёт — время, итог и число проверенных записей.

Итог — один из пяти статусов. Набор статусов и их подписи держит кластер.

СтатусЧто значит
Never Startedпроверок в кластере ещё не запускали
Runningпроверка идёт, в отчёте виден процент выполнения
Completedпроверка прошла до конца, цепочка целая
Failedпроверка не дошла до конца
Chain Brokenцепочка нарушена; номер записи с обрывом стоит в отчёте

У отдельных воркеров своя шкала: Running, Completed, Failed, Chain Broken, Stopped, Pending. Она нужна при разборе проверки, которая встала: по ней видно, отвалился один воркер или все.

Одновременно в кластере идёт одна проверка. Пока она не закончилась, повторный запуск отклоняется.

Критические события и реакция на них​

Отметка о прочтении персональная. Она отвечает на вопрос «ознакомился ли с событием текущий пользователь», а не «разобрала ли команда»: двое администраторов видят на одном событии разные значения.

На этой отметке держатся два механизма. Индикатор в шапке показывает число непрочитанных критических событий текущего пользователя, а строки таких событий подсвечены в таблице журнала. Отметка гасит и то, и другое — либо у выбранных событий, либо у всех непрочитанных критических сразу. Повторная отметка того же события ошибки не даёт.

Третий механизм — письма. Кластер умеет рассылать уведомления о критических событиях на список адресов, с порогом по уровню важности: события ниже порога письма не порождают.

Рост таблицы и архивация​

Журнал только пополняется, поэтому его таблица растёт, и рост нужно ограничить. Автоархивация срезает старые записи в сжатый CSV-файл, когда таблица переваливает порог размера.

НастройкаЧто задаётГраницы
security_log_archive_enabledвключена ли автоархивация—
security_log_archive_target_sizeпорог размера таблицы журнала, байтыот 10 МБ до 16 ГБ
security_log_archive_pathкаталог хранения архивовдлина имени 1–256
security_log_disk_alert_thresholdпорог свободного места, ниже которого кластер предупреждает, байтыне меньше 100 МБ

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

Архив — файл .csv.gz с именем вида security_log_a3f1b2c4_03_01_2025.csv.gz. У готового архива список показывает период, размер, число записей, время архивации и контрольную сумму SHA-256. Архив, который ещё формируется, в списке тоже виден, но без этих полей — скачивать его рано.

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

Кто что видит​

Журнал безопасности — объект уровня кластера. Он открыт двум глобальным ролям: Cluster master (роль 1) и Security Admin (роль 6). Роли ВЦОД журнал не видят: события в нём сквозные по кластеру.

Доступ раздаётся привилегиями, а не номером роли, поэтому смотреть нужно на привилегию.

idИмя в карточке ролиКому выданаЧто открывает
10000View Security LogCluster master, Security Adminчтение событий, справочник типов, счётчик критических, статус проверки
10001Export Security LogCluster master, Security Adminвыгрузка событий в CSV и JSON
10002Verify Security LogCluster master, Security Adminзапуск проверки хеш-цепочки
10003View Security ArchiveCluster master, Security Adminсписок архивов
10004Export Security ArchiveCluster master, Security Adminскачивание архива
10005View Security Archive SettingsCluster master, Security Adminчтение настроек архивации
10006Edit Security Archive Settingsтолько Cluster masterправка настроек архивации
10007Acknowledge Security EventCluster master, Security Adminотметка события прочитанным
10008View Security Notify SettingsCluster master, Security Adminчтение настроек писем
10009Edit Security Notify Settingsтолько Cluster masterправка настроек писем

Рядом стоят две привилегии параметров безопасности: View Security Settings (9000) и Edit Security Settings (9001). Вторая, помимо правки, открывает чтение параметров блокировки — см. «Сессии и параметры входа».

Разделение чтения и правки здесь не косметическое. Security Admin видит журнал, архивы и обе группы настроек, но менять пороги архивации и список получателей писем умеет только Cluster master. Модель привилегий и областей действия — в справочнике ролей и привилегий.

Ограничения​

Выгрузка ограничена 100 000 записями. Больше одной выгрузкой не выдаётся: файл собирается на диске управляющего узла, и предел стоит на объёме этой операции. Обход — сузить выборку фильтрами и периодом либо забирать журнал частями; исторические записи лежат в архивах.

Выгрузка в кластере не хранится. Файл собирается во временном каталоге, уходит в браузер и удаляется. Обход — для долгого хранения брать архив, а не выгрузку; повторный срез собирается повторной выгрузкой.

Проверка цепочки идёт по одной. Второй запуск, пока первый не закончился, отклоняется. Обход — дождаться уже запущенной: её прогресс виден процентом на кнопке, а номер записи с обрывом — в отчёте о последней проверке.

Незавершённый архив не скачивается. Файл, который ещё формируется, виден в списке, но выдача его отклоняется. Обход — дождаться, пока у записи появятся контрольная сумма, число записей и время архивации.

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

Методы API​

Операции этой страницы в API: security-event-list, security-event-get, security-event-types, security-event-critical-count, security-event-acknowledge, security-event-notify-settings-get, security-event-notify-settings-set, security-event-export, security-event-archive-list, security-event-archive-export, security-event-archive-settings-get, security-event-archive-settings-set, security-event-log-verify, security-event-log-status, security-verification-statuses — см. Справочник API.

Что читать дальше​