Документ описывает подсистему регистрации и учёта событий безопасности платформы Rapeed BI: архитектуру сбора, классификацию событий, атрибутный состав, хранение, интеграцию с внешними системами мониторинга и механизмы защиты журналов.
Подсистема состоит из четырёх уровней:
| Уровень | Компонент | Функция |
|---|---|---|
| Генерация | Все контейнеры платформы | Вывод событий в stdout/stderr в формате JSON |
| Обработка | Vector | Сбор через Docker API, парсинг JSON, обогащение атрибутами безопасности, классификация |
| Хранение | VictoriaLogs | Долгосрочное хранение всех событий и отдельного потока событий безопасности |
| Передача | Vector → SIEM | Отправка обогащённых событий во внешнюю SIEM по TCP |
| Визуализация | Grafana | Централизованный интерфейс для просмотра и поиска по журналам |
| Источник | Типы событий | Формат |
|---|---|---|
| Keycloak | Вход, выход, создание/изменение/удаление пользователей, изменение ролей и групп, ошибки аутентификации | JSON (Keycloak event log) |
| REST API | HTTP-запросы, действия администратора, экспорт данных, ошибки авторизации | JSON (структурированный лог) |
| Микросервисы | HTTP-запросы, действия администратора, изменения настроек | JSON (структурированный лог) |
| Reverse Proxy | Все HTTP/HTTPS запросы с метаданными (IP, метод, путь, статус) | JSON (access log) |
| PostgreSQL | Подключения, ошибки аутентификации | Текстовый лог |
| RabbitMQ | Подключения, ошибки | Текстовый лог |
| Аналитическое ядро | Запуск, остановка, ошибки обработки | Текстовый лог |
Vector автоматически классифицирует события, присваивая каждому уникальный идентификатор типа:
| Код | Событие | Условие срабатывания |
|---|---|---|
| SEC-001 | Вход в систему | Keycloak: событие LOGIN или LOGIN_ERROR |
| SEC-002 | Выход из системы | Keycloak: событие LOGOUT или LOGOUT_ERROR |
| Код | Событие | Условие срабатывания |
|---|---|---|
| SEC-005 | Создание пользователя | Keycloak: событие REGISTER |
| SEC-006 | Изменение параметров пользователя | Keycloak: события UPDATE_* |
| SEC-007 | Удаление пользователя | Keycloak: событие DELETE_ACCOUNT |
| Код | Событие | Условие срабатывания |
|---|---|---|
| SEC-008 | Изменение ролей пользователя | Keycloak: события *ROLE* |
| SEC-009 | Изменение групп | Keycloak: события *GROUP* |
| Код | Событие | Условие срабатывания |
|---|---|---|
| SEC-024 | Действие администратора | HTTP-запрос к административным маршрутам API |
| SEC-025 | Экспорт данных | HTTP-запрос к маршрутам экспорта (Excel, CSV) |
Каждое событие безопасности содержит следующие атрибуты:
| Атрибут | Описание | Пример |
|---|---|---|
| timestamp | Дата и время события (UTC) | 2026-03-24T10:15:30.123Z |
| vendor | Наименование вендора | Rapeed |
| product | Наименование продукта | Rapeed Platform |
| product_version | Версия продукта | 1.1.2 |
| host | Имя хоста | rapeed-prod-01 |
| event_id | Уникальный идентификатор события | UUID v4 |
| event_type_id | Код типа события | SEC-001 |
| event_type_name | Наименование типа события | USER_LOGIN |
| ib_severity | Уровень важности | HIGH / MEDIUM / INFO |
| result | Результат операции | SUCCESS / FAILURE |
| container_name | Компонент-источник события | keycloak, api, microservices |
| message | Описание события | Текст сообщения |
Дополнительные атрибуты (при наличии в исходном событии):
| Атрибут | Описание | Источник |
|---|---|---|
| subject | Субъект операции (обезличенный) | Keycloak, HTTP-заголовки |
| subject_ip | IP-адрес субъекта | Keycloak (ipAddress), Nginx (X-Real-IP) |
| object | Объект операции | URL-путь, идентификатор ресурса |
| http_method | HTTP-метод запроса | Nginx access log |
| http_status | Код ответа HTTP | Nginx access log |
Vector автоматически определяет уровень важности на основе исходного уровня журнала:
| Уровень | Исходные значения | Примеры |
|---|---|---|
| HIGH | ERROR, CRITICAL, FATAL | Ошибка аутентификации, сбой компонента, отказ подключения к БД |
| MEDIUM | WARN, WARNING | Превышение лимита попыток входа, истечение сессии |
| INFO | INFO, DEBUG, TRACE | Успешный вход, экспорт данных, изменение настроек |
| Параметр | Значение |
|---|---|
| Хранилище | VictoriaLogs |
| Срок хранения | 90 дней |
| Максимальный объём на диске | 10 ГБ |
| Ротация | Автоматическая: при достижении лимита по времени или объёму удаляются самые старые записи |
| Разделение потоков | Все события и события безопасности хранятся в отдельных потоках (ProjectID) |
| Параметр | Значение |
|---|---|
| Драйвер | json-file |
| Максимальный размер файла | 50 МБ |
| Количество файлов | 5 |
| Итого на контейнер | до 250 МБ |
Платформа поддерживает передачу событий во внешнюю систему мониторинга безопасности (SIEM).
| Параметр | Значение |
|---|---|
| Протокол | TCP |
| Формат | JSON (одно событие на строку) |
| Настройка | Переменная окружения SIEM_ADDRESS (адрес:порт) |
| Фильтрация | Передаются все обогащённые события |
| Активация | При наличии непустого значения SIEM_ADDRESS |
SIEM_ADDRESS отправка во внешнюю SIEM отключена. Все события продолжают сохраняться локально.Журналы доступны через Grafana:
| Источник | Назначение | Возможности |
|---|---|---|
| VictoriaLogs | Журналы событий | Полнотекстовый поиск, фильтрация по типу события, времени, компоненту, уровню важности |
| VictoriaMetrics | Метрики | Графики нагрузки, потребления ресурсов, времени отклика |
| Tempo | Трассировка | Распределённая трассировка запросов между компонентами |
Доступ к интерфейсу журналов защищён двумя уровнями аутентификации:
| Мера защиты | Реализация |
|---|---|
| Доступ к интерфейсу журналов | Ограничен ролями администратора и аудитора через OAuth2 Proxy |
| Хранилище журналов | VictoriaLogs не имеет публичного порта; доступ только через reverse proxy с аутентификацией |
| Журналы контейнеров | Доступ к файлам журналов на хосте ограничен правами операционной системы |
| Неизменяемость | VictoriaLogs работает в режиме append-only; удаление отдельных записей невозможно |
| Отделение от системных событий | События безопасности выделены в отдельный поток с собственным идентификатором |
Имена пользователей в журналах обезличиваются: в лог записываются первые два символа и маска. Полное имя пользователя не сохраняется в журнале событий.
| Исходное значение | В журнале |
|---|---|
| ivanov | iv**** |
| petrov | pe**** |
| admin | ad**** |
Все временные метки событий формируются на основе системного времени хоста. Для корректного отображения событий необходима синхронизация времени с единым доверенным источником через NTP.