Журнал безопасности
Проблема и зачем
Журнал безопасности — отдельный поток записей о том, кто вошёл в кластер, кто менял роли и настройки, что происходило с виртуальными машинами. Он живёт не вместе с техническими логами компонентов, а в своей таблице базы vStack Center, и открывается отдельным экраном — Security Event Log.
Требования к нему другие, чем к техническому логу. Запись журнала безопасности нельзя незаметно подменить или изъять: на ней строятся разбор инцидента и проверка регулятора. Поэтому каждая запись несёт SHA-256 хеш, связывающий её с остальными, а кластер умеет пройти всю цепочку и сказать, где она нарушена.
Отсюда вопросы, на которые администратору нужен ответ. Какое событие требует реакции, а какое фоновое. Что означает статус «цепочка нарушена». Куда девается журнал, когда таблица разрастается, и чем архив отличается от выгрузки.
Эта страница разбирает модель. Как читать события и фильтровать их — в инструкции «Как читать журнал и фильтровать события»; как выгрузить журнал, забрать архив и запустить проверку целостности — в инструкции «Как выгрузить журнал, скачать архив и проверить целостность».
Модель и сущности
Запись события
Запись — плоский набор полей. Он делится на три части: что и когда произошло, кто субъект, над каким объектом.
| Поле | Что показывает |
|---|---|
id | числовой номер записи; по нему идут сортировка и адресация |
event_uuid | UUID события |
ts | момент события, Unix timestamp в секундах |
event_type | код типа события, например auth.login.success |
user_id | номер пользователя-субъекта |
username | имя пользователя-субъекта |
object_type | тип объекта, над которым шло действие |
object_id | номер объекта |
object_name | имя объекта |
result | итог: success или failure |
details | дополнительные сведения |
remote_ip | адрес клиента |
request_id | UUID запроса к кластеру, породившего запись |
record_hash | SHA-256 хеш записи — звено цепочки |
acknowledged | отметка текущего пользователя о прочтении |
Поля субъекта и объекта пустые там, где событие их не имеет: у входа в кластер
нет объекта, у системного события нет пользователя. Поле request_id сшивает
событие с обращением к кластеру, которое его породило, — с него удобно начинать
разбор, когда одно действие оставило несколько записей.
Эти же поля становятся колонками файла, когда журнал выгружают в CSV или JSON. Таблица на экране показывает только часть из них, остальные — в карточке отдельной записи.
Справочник типов
Тип события — строковый код с точками: auth.login.success,
auth.login.failure. Список типов держит кластер: у каждого кода есть категория,
уровень важности и человекочитаемое название. Из этого справочника собираются
фильтр по типу события и подписи в таблице, поэтому набор типов задаёт версия
кластера, а не клиент.
События с самих узлов
До 3.0.5 журнал видел только то, что происходило в плоскости управления. В 3.0.5 в него пошли события операционной системы узлов и события средства виртуализации — они приходят от агентов узлов и попадают в ту же хеш-цепочку.
| Тип события | О чём запись | Категория | Важность |
|---|---|---|---|
os.ssh_login_success | успешный вход по SSH на узле | auth | info |
os.ssh_login_failure | неуспешный вход по SSH на узле | auth | warning |
os.user_local_created | создание локальной учётной записи на узле | auth | notice |
os.user_local_deleted | удаление локальной учётной записи на узле | auth | notice |
os.sysctl_changed | изменение параметра ядра узла (sysctl) | config | warning |
os.boot | запуск узла | system | notice |
os.shutdown | штатная остановка узла | system | notice |
os.shutdown_unclean | нештатная остановка узла | system | error |
os.kernel_panic | паника ядра узла | system | critical |
system.service_stopped_unclean | нештатное завершение средства виртуализации: снятие процесса, сбой, отказ питания управляющей машины | system | error |
vm.console_connected | подключение к консоли ВМ по WSS | vm | info |
vm.console_connect_failed | отказ подключения к консоли ВМ | vm | warning |
Из этого набора в счётчик критических событий попадает только os.kernel_panic:
у него важность critical, а счётчик считает три верхних уровня. Нештатные
остановки — узла и средства виртуализации — идут с важностью error: в счётчик
они не попадают, но в почтовые оповещения при пороге error и ниже — да.
Запись os.shutdown_unclean и system.service_stopped_unclean появляются не в
момент сбоя, а при следующем запуске: до него сообщить о себе некому. На чистой
установке первый запуск ложной записи не создаёт.
Категории и важность
Категория группирует типы по области. В записи и в выгрузке она стоит коротким кодом, а панель фильтров показывает подпись интерфейса — три из шести расходятся:
| Код в записи | Подпись в панели фильтров | Область |
|---|---|---|
auth | authentication | аутентификация и управление доступом |
vm | virtual machines | виртуальные машины |
config | configuration | конфигурация инфраструктуры |
role | role | управление ролями |
system | system | системные события |
integrity | integrity | контроль целостности |
Важность — семь уровней, от самого высокого к самому низкому: 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 | Имя в карточке роли | Кому выдана | Что открывает |
|---|---|---|---|
| 10000 | View Security Log | Cluster master, Security Admin | чтение событий, справочник типов, счётчик критических, статус проверки |
| 10001 | Export Security Log | Cluster master, Security Admin | выгрузка событий в CSV и JSON |
| 10002 | Verify Security Log | Cluster master, Security Admin | запуск проверки хеш-цепочки |
| 10003 | View Security Archive | Cluster master, Security Admin | список архивов |
| 10004 | Export Security Archive | Cluster master, Security Admin | скачивание архива |
| 10005 | View Security Archive Settings | Cluster master, Security Admin | чтение настроек архивации |
| 10006 | Edit Security Archive Settings | только Cluster master | правка настроек архивации |
| 10007 | Acknowledge Security Event | Cluster master, Security Admin | отметка события прочитанным |
| 10008 | View Security Notify Settings | Cluster master, Security Admin | чтение настроек писем |
| 10009 | Edit 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.
Что читать дальше
- Как читать журнал и фильтровать события — экран журнала, фильтры списка, одна запись, отметка о прочтении, письма.
- Как выгрузить журнал, скачать архив и проверить целостность — выгрузка в CSV и JSON, архивы, настройки архивации, запуск проверки цепочки.
- Роли и привилегии — как считается доступ по привилегии и области действия.
- Скачанный архив журнала безопасности не открывается —
разбор повреждённого файла
.csv.gz.