Интеграция с SIEM
Proto Observability Platform умеет отдавать журналы аудита во внешнюю систему мониторинга безопасности (SIEM) по протоколу syslog — для централизованного хранения событий безопасности, корреляции с другими источниками и выполнения требований по аудиту и комплаенсу.
Экспорт по умолчанию выключен и включается двумя переменными — без пересборки образов.
Доступно с версии 201
Экспорт журналов в SIEM появился в ProtoOBP 201. Убедитесь, что образы компонентов (proto-api-manager, proto-auth, proto-otel-collector) — версии
201 или новее.На этой странице:
- Что можно экспортировать
- Быстрое включение
- Схема подключения
- Системные журналы (СУБД и ОС)
- Полный пример одним файлом
- Расширенная настройка
- Диагностика типовых проблем
Что можно экспортировать
| Источник | Компонент | Что содержит |
|---|---|---|
| Аудит действий (RBAC) | proto-api-manager | Действия субъектов над объектами доступа: allow/deny по проверкам прав на API |
| События входа | proto-auth | Вход/выход и неуспешные попытки входа: LOGIN, LOGOUT, LOGIN_ERROR |
| Системные журналы | СУБД, ОС | Системные логи в исходном виде |
Аудит действий остаётся и в UI
При включённом экспорте аудит действий дублируется в syslog в дополнение к внутреннему журналу — вкладка «Журнал аудита» в интерфейсе продолжает работать (см. Администрирование RBAC → Журнал аудита).Быстрое включение
Задайте две переменные в .env рядом с compose-файлом платформы — экспорт
журналов аудита включится по всему стеку: RBAC-действия (proto-api-manager) и
события входа (proto-auth) начнут уходить в вашу SIEM по syslog.
# .env
POBP_SIEM_ENABLED=true
POBP_SIEM_ENDPOINT=siem-collector:514 # syslog-приёмник вашей SIEM, host:port
docker compose -f docker-compose-<версия>.yaml up -d proto-api-manager proto-auth
По умолчанию (POBP_SIEM_ENABLED не задан или false) экспорт выключен. Записи
уходят по syslog напрямую на указанный адрес, протокол — tcp. Отдельные
адреса/протокол/теги — в разделе Расширенная настройка.
Отправку системных журналов СУБД/ОС — в разделе
Системные журналы.
Не влияет на работу платформы
Недоступность приёмника не блокирует обработку запросов: аудит продолжает штатно сохраняться во внутреннем журнале, а связь с приёмником восстанавливается автоматически.Проверка: включите приёмник на указанном адресе и выполните вход и любое действие
с проверкой прав — в потоке приёмника появятся записи с тегами proto-auth
(события входа) и proto-api-manager (RBAC-действия). Каждая RBAC-запись содержит
время, пользователя, действие, тип и ключ объекта доступа, результат
(allow/deny) и IP-адрес.
Схема подключения
ProtoOBP ──(syslog TCP/UDP)──▶ SIEM заказчика
Компоненты платформы отправляют записи по syslog напрямую на адрес из
POBP_SIEM_ENDPOINT. Как правило, отдельный шиппер не нужен. Если он всё же
требуется (преобразование формата, TLS, сбор системных логов из файлов) —
используйте входящий в состав системы proto-otel-collector (см.
Системные журналы).
Системные журналы (СУБД и ОС)
Системные журналы СУБД (ClickHouse, PostgreSQL) и ОС уже пишутся в стандартный
вывод контейнеров и сохраняются драйвером json-file (по умолчанию, с ротацией).
Эти локальные файлы всегда остаются для отладки — драйвер логирования менять
не нужно, docker logs продолжает работать.
Чтобы дополнительно отправлять их в SIEM, не трогая локальные файлы, используйте
сборщик, который читает docker-логи и форвардит копию. Отдельный Vector/Fluent
Bit не обязателен: в состав системы входит proto-otel-collector (на базе
OpenTelemetry Collector) с приёмниками file_log и syslog. В его образе уже есть
готовый оверлей /etc/otel-collector-siem.yaml с logs-конвейером,
по умолчанию не активный (адрес приёмника — из переменных окружения):
# /etc/otel-collector-siem.yaml (уже в образе, для справки)
receivers:
file_log/containers: # docker-логи контейнеров; файлы json-file сохраняются
include: [ /var/lib/docker/containers/*/*-json.log ]
exporters:
syslog/siem: # экспортер под протокол приёма вашей SIEM
endpoint: ${env:POBP_SIEM_HOST}
port: ${env:POBP_SIEM_PORT}
network: tcp
protocol: rfc5424
service:
pipelines:
logs/siem:
receivers: [file_log/containers]
processors: [memory_limiter, batch]
exporters: [syslog/siem]
Включение (у сервиса proto-otel-collector в основном compose-файле): подключить
оверлей вторым --config, задать адрес и смонтировать каталог docker-логов только
на чтение. Экспортёр otel требует хост и порт раздельно — задайте
POBP_SIEM_HOST и POBP_SIEM_PORT:
services:
proto-otel-collector:
command:
- "--config=/etc/otel-collector-config.yaml"
- "--config=/etc/otel-collector-siem.yaml"
user: "0:0" # читает docker-логи как их владелец (root)
cap_drop: ["ALL"] # uid 0 без capabilities — только чтение
security_opt: ["no-new-privileges:true"]
environment:
POBP_SIEM_HOST: "siem-collector"
POBP_SIEM_PORT: "514"
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers:ro
Эти строки уже присутствуют закомментированными у сервиса proto-otel-collector —
их достаточно раскомментировать. Без второго --config оверлей не загружается.
file_log читает логи всех контейнеров — при необходимости сузьте
include/exclude (например, исключите лог самого коллектора).
Про права. Docker пишет логи в /var/lib/docker/containers от имени root
(каталоги 0710, файлы 0640). Членство в группе docker не помогает — оно даёт
доступ к docker-сокету, а не к этим файлам; группы root тоже недостаточно (у
каталогов 0710 группе доступен только вход, но не листинг, а file_log
перечисляет файлы по маске). Поэтому коллектор читает их как владелец под
user: "0:0", а cap_drop: ["ALL"] оставляет только чтение — прав root при этом
не остаётся (проверено).
Если запуск под uid 0 недопустим — не читайте /var/lib/docker, а измените
способ сбора: направьте логи нужных сервисов docker-драйвером syslog (демон сам
отправляет записи — без файлового доступа и без root, но это заменяет json-file,
локальные файлы не сохранятся); либо настройте СУБД писать логи в отдельный том,
доступный коллектору под его обычным uid, и укажите этот том в file_log.
Полный пример одним файлом
Если удобнее один override-файл вместо правки .env — сохраните рядом с основным
compose-файлом платформы docker-compose.siem.yaml и примените его:
docker compose -f docker-compose-<версия>.yaml -f docker-compose.siem.yaml up -d
# docker-compose.siem.yaml — включение экспорта журналов в SIEM
services:
# Аудит действий (RBAC)
proto-api-manager:
environment:
POBP_SIEM_ENABLED: "true"
POBP_SIEM_ENDPOINT: "siem-collector:514" # syslog-приёмник SIEM, host:port
# События входа
proto-auth:
environment:
POBP_SIEM_ENABLED: "true"
POBP_SIEM_ENDPOINT: "siem-collector:514"
# Системные журналы СУБД/ОС — ОПЦИОНАЛЬНО (удалите блок, если не нужно).
# Требует чтения docker-логов: user "0:0" + том (см. «Системные журналы»).
proto-otel-collector:
command:
- "--config=/etc/otel-collector-config.yaml"
- "--config=/etc/otel-collector-siem.yaml"
user: "0:0"
cap_drop: ["ALL"]
security_opt: ["no-new-privileges:true"]
environment:
POBP_SIEM_HOST: "siem-collector"
POBP_SIEM_PORT: "514"
volumes:
- /var/lib/docker/containers:/var/lib/docker/containers:ro
Первые два блока эквивалентны двум переменным из Быстрого включения — выбирайте, что удобнее. Третий блок (системные журналы) можно опустить; о правах доступа для него — в разделе Системные журналы.
Расширенная настройка
Двух переменных из Быстрого включения достаточно для большинства случаев. Для тонкой настройки у каждого источника есть отдельные переменные — они переопределяют общие.
proto-api-manager (RBAC-аудит)
| Переменная | Назначение | Default |
|---|---|---|
POBP_RBAC_AUDIT_SYSLOG_ENABLED | Включить экспорт (достаточно любого из флагов) | false |
POBP_RBAC_AUDIT_SYSLOG_ENDPOINT | Адрес host:port (переопределяет POBP_SIEM_ENDPOINT) | из POBP_SIEM_ENDPOINT |
POBP_RBAC_AUDIT_SYSLOG_PROTOCOL | Протокол: tcp или udp | tcp |
POBP_RBAC_AUDIT_SYSLOG_APP_NAME | Имя приложения (тег) в syslog-записи | proto-api-manager |
В Helm-чарте задаются через apiManager.env.
proto-auth (события входа)
Управляется теми же двумя переменными POBP_SIEM_ENABLED / POBP_SIEM_ENDPOINT.
Отдельной настройки не требуется: события отправляются по tcp с тегом
proto-auth.
Диагностика типовых проблем
| Симптом | Причина и решение |
|---|---|
| В приёмнике нет записей аудита | Проверьте POBP_SIEM_ENABLED=true и POBP_SIEM_ENDPOINT; убедитесь, что приёмник доступен по адресу и протоколу. Для RBAC — что RBAC включён (POBP_RBAC_ENABLED=true). |
| Нет только событий входа | В логе proto-auth при старте должно быть SIEM syslog export enabled. Проверьте, что переменные заданы и переданы сервису proto-auth. |
| Нет только RBAC-действий | proto-api-manager читает переменные из ./.env (env_file). Проверьте, что они там заданы. |
| Нет системных журналов СУБД | Проверьте file_log-приёмник и logs-конвейер proto-otel-collector: смонтирован ли /var/lib/docker/containers, задан ли user: "0:0", POBP_SIEM_HOST/POBP_SIEM_PORT. |
| Записи не доходят до SIEM | Проверьте адрес/порт/протокол приёмника SIEM и сетевую доступность. |