Перейти к содержанию

Экспорт событий (SIEM)

В этом разделе описано, как настроить отправку событий безопасности из AppSec.AIGate во внешние системы: SIEM, SOAR, мессенджеры, аналитические платформы. Концептуальное описание — см. Основные понятия.

Что такое экспортер?

Экспортер — конфигурация отправки событий безопасности во внешнюю систему. Event Exporter Service потребляет события из внутренней очереди (Redis Streams) и доставляет их в настроенные destination'ы.

Зачем нужен экспорт: события безопасности хранятся внутри AppSec.AIGate и доступны через Dashboard. Однако в большинстве организаций уже есть централизованная система мониторинга, и экспорт позволяет:

  • Коррелировать события AppSec.AIGate с другими источниками (WAF, IDS, Endpoint) в едином SOC.
  • Использовать существующие дашборды и playbooks SOAR для автоматической реакции.
  • Хранить события в SIEM с собственными retention-политиками (независимо от AIGate).
  • Отправлять оповещения в мессенджеры (Slack, Telegram) через webhook.

Сколько экспортеров можно создать: без ограничений. Типичная конфигурация — 2–3 экспортера для разных целей: Syslog в SOC (только критичные), Kafka в аналитику (все события), Webhook в Slack (только блокировки).

Типы экспорта

Syslog (RFC 5424 / 3164)

Отправка событий на syslog-сервер через UDP, TCP или TCP+TLS. Наиболее распространённый способ интеграции с корпоративными SIEM (QRadar, ArcSight, KUMA, Splunk).

Параметр Обяз. По умолчанию Описание Подробности
address Да Адрес сервера Формат host:port. Пример: syslog.company.com:514. Для TLS обычно порт 6514.
transport Да tcp Протокол транспорта udp — быстро, но ненадёжно (события могут теряться). tcp — надёжная доставка, рекомендуется для production. tcp+tls — шифрованный канал, требуется для передачи по недоверенным сетям.
format Нет rfc5424 Формат syslog-сообщения rfc5424 — современный стандарт с структурированными данными, рекомендуется. rfc3164 — устаревший формат для старых syslog-серверов (rsyslog < 8, syslog-ng < 3).
facility Нет 16 (LOCAL0) Syslog facility Число 0–23. LOCAL0–LOCAL7 (16–23) — для пользовательских приложений. Определяет, в какую категорию попадут события на syslog-сервере.
app_name Нет LLMFirewall Имя приложения в syslog Произвольная строка. Используется для фильтрации на стороне syslog-сервера.
tls_insecure Нет false Отключить проверку TLS-сертификата Только для tcp+tls. Установите true для self-signed сертификатов. Не рекомендуется для production.

CEF (ArcSight, MaxPatrol, QRadar)

Common Event Format (CEF) — стандартизированный формат Micro Focus для SIEM-интеграции. Используется ArcSight, MaxPatrol SIEM, QRadar, LogRhythm. AIGate автоматически маппит поля события в CEF-атрибуты и формирует CEF-строку.

Параметр Обяз. По умолчанию Описание Подробности
protocol Да tcp Протокол транспорта udp или tcp. CEF обычно передаётся поверх syslog.
host Да Адрес SIEM-сервера Hostname или IP. Пример: maxpatrol.company.com.
port Да Порт SIEM-сервера Типичные: 514 (plain), 1514 (CEF over syslog).
device_vendor Нет AppSec Вендор в CEF-заголовке Идентифицирует производителя в SIEM.
device_product Нет AIGate Продукт в CEF-заголовке Идентифицирует продукт в SIEM.
device_version Нет текущая версия Версия продукта Используется для корреляции правил в SIEM.

Webhook (HTTP POST)

Отправка событий через HTTP POST в формате JSON. Самый универсальный тип — позволяет отправлять события в любую систему с HTTP API: свой backend, Slack (Incoming Webhook), PagerDuty, Opsgenie, Telegram (через bot API), SOAR-платформы.

Параметр Обяз. По умолчанию Описание Подробности
url Да URL назначения Полный URL. Пример: https://hooks.company.com/security. Должен быть доступен из сети AIGate.
method Нет POST HTTP-метод Обычно POST. Некоторые системы требуют PUT.
headers Нет {} Кастомные HTTP-заголовки JSON-объект. Используйте для авторизации: {"Authorization": "Bearer token123"}. Значения хранятся в зашифрованном виде.
batch_mode Нет false Режим отправки false — каждое событие отправляется отдельным HTTP POST (проще для обработки на стороне получателя). true — события накапливаются и отправляются массивом (экономит HTTP-вызовы при high-traffic).
timeout_sec Нет 10 Таймаут HTTP-запроса (сек) 1–60. Если получатель не ответил за это время — попытка считается неуспешной.
max_retries Нет 3 Макс. повторов при ошибке 0–10. При ошибке (5xx, timeout) экспортер повторит отправку с exponential backoff (1s, 2s, 4s...).

Kafka (SASL + TLS)

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

Параметр Обяз. По умолчанию Описание Подробности
brokers Да Массив адресов брокеров Формат: ["host1:9092", "host2:9092"]. Укажите несколько брокеров для отказоустойчивости.
topic Да Имя Kafka-топика Пример: llm-security-events. Топик должен существовать или быть создан автоматически (зависит от настроек Kafka).
compression Нет snappy Алгоритм сжатия snappy — баланс скорости и размера (рекомендуется). gzip — лучшее сжатие, медленнее. lz4 — максимальная скорость. zstd — лучшее сжатие с хорошей скоростью. none — без сжатия.
batch_size Нет 100 Макс. сообщений в пакете 1–10000. Сообщения накапливаются в буфере и отправляются пакетом. Большие пакеты = выше throughput, выше задержка.
flush_interval Нет 1s Интервал принудительной отправки Даже если batch не заполнен — отправить через этот интервал. Формат: 500ms, 1s, 5s.
sasl_mechanism Нет Механизм аутентификации SASL PLAIN, SCRAM-SHA-256, SCRAM-SHA-512. Если не указан — подключение без аутентификации.
sasl_username Нет Имя пользователя SASL Обязательно при указанном sasl_mechanism.
sasl_password Нет Пароль SASL Хранится в зашифрованном виде.
tls_enabled Нет false Включить TLS-шифрование Рекомендуется для передачи по недоверенным сетям.
tls_ca_file Нет Путь к CA-сертификату Для проверки серверного сертификата. Если не указан — используется системное хранилище CA.

File (JSON Lines)

Запись событий в локальный файл в формате JSON Lines (одно JSON-событие на строку). Подходит для отладки, разработки, air-gapped сред без внешних систем, а также как backup-экспортер на случай недоступности основного SIEM.

Параметр Обяз. По умолчанию Описание Подробности
path Да Путь к файлу Полный путь на файловой системе контейнера. Пример: /data/logs/llm-events.jsonl. Директория должна существовать и быть доступна для записи.
rotate Нет true Включить ротацию файлов При true — когда файл достигает max_size_mb, он переименовывается (с timestamp в суффиксе) и создаётся новый. При false — файл растёт бесконечно (следите за диском).
max_size_mb Нет 100 Макс. размер файла для ротации (MB) 1–10000. При достижении этого размера файл ротируется. Для high-traffic: 500–1000 MB. Для отладки: 10–50 MB.

Создание экспортера

Перейдите на страницу Exporters (/exporters) и нажмите Create Exporter.

Шаг 1: Основная информация

Поле Обяз. Описание
Название Да Осмысленное имя: prod-syslog-soc, analytics-kafka, slack-alerts.
Описание Нет Комментарий: назначение, ответственный, целевая система.
Тип Да Выберите один из 5 типов: syslog, cef, webhook, kafka, file. Нельзя изменить после создания.

Шаг 2: Конфигурация — набор полей зависит от выбранного типа (см. Типы экспорта). Заполните обязательные параметры подключения.

Шаг 3: Фильтры (опционально) — определите, какие события попадут в экспортер. Если не указать фильтры — экспортируются все события. Подробнее — см. Фильтрация.

Шаг 4: Маппинг (опционально) — выберите формат маппинга полей: generic (без преобразования), ecs (Elastic), custom. Подробнее — см. Маппинг форматов.

Шаг 5: Создание и тест — нажмите Create. Экспортер создаётся в состоянии enabled: true и начинает работать немедленно. Обязательно выполните тест (кнопка Test или API — см. Тестирование) для проверки связности.

Рекомендация

Создавайте экспортер с узкими фильтрами (например, только CRITICAL) и постепенно расширяйте, чтобы не перегрузить целевую систему на старте.

Полные примеры конфигурации

Syslog — отправка в rsyslog/syslog-ng

{
  "name": "Production Syslog",
  "type": "syslog",
  "enabled": true,
  "config": {
    "address": "syslog.company.com:514",
    "transport": "tcp",
    "format": "rfc5424",
    "facility": 16,
    "app_name": "LLMFirewall"
  },
  "filters": {
    "severities": ["CRITICAL", "HIGH"],
    "event_types": ["REQUEST_BLOCKED", "THREAT_DETECTED", "FAIL_SAFE_TRIGGERED"]
  }
}
  • facility: 16 = LOCAL0 (стандарт для пользовательских приложений, диапазон 16-23).
  • transport: "tcp" — надёжнее UDP (гарантированная доставка); для шифрования: "tcp+tls".
  • format: "rfc5424" — современный стандарт, рекомендуется; "rfc3164" — для старых систем.

CEF — отправка в MaxPatrol SIEM / ArcSight

{
  "name": "MaxPatrol SIEM",
  "type": "cef",
  "enabled": true,
  "config": {
    "protocol": "tcp",
    "host": "maxpatrol.company.com",
    "port": 1514,
    "device_vendor": "AppSec",
    "device_product": "AIGate",
    "device_version": "2.8"
  },
  "filters": {
    "severities": ["CRITICAL", "HIGH", "MEDIUM"]
  }
}

CEF-формат автоматически маппит severity в CEF severity (0-10) и формирует CEF-строку.

Webhook — отправка в Slack / Telegram / свой backend

{
  "name": "Security Alerts Webhook",
  "type": "webhook",
  "enabled": true,
  "config": {
    "url": "https://hooks.company.com/security-events",
    "headers": {
      "Authorization": "Bearer your-webhook-token",
      "X-Source": "llm-firewall"
    },
    "batch_mode": false,
    "timeout_sec": 10,
    "max_retries": 3
  },
  "filters": {
    "severities": ["CRITICAL", "HIGH"],
    "event_types": ["REQUEST_BLOCKED", "THREAT_DETECTED", "CUSTOM_POLICY_BLOCK"]
  }
}
  • batch_mode: false — каждое событие отправляется отдельным HTTP POST.
  • batch_mode: true — события накапливаются и отправляются массивом (экономит HTTP-вызовы).
  • headers — сюда можно добавить любые заголовки для аутентификации.

Kafka — потоковая доставка в аналитическую платформу

{
  "name": "Analytics Kafka",
  "type": "kafka",
  "enabled": true,
  "config": {
    "brokers": ["kafka-1.company.com:9092", "kafka-2.company.com:9092"],
    "topic": "llm-security-events",
    "compression": "snappy",
    "sasl_mechanism": "SCRAM-SHA-256",
    "sasl_username": "llm-firewall",
    "sasl_password": "your-kafka-password",
    "tls_enabled": true
  }
}
  • compression: "snappy" — баланс скорости и сжатия; для максимального сжатия: "zstd".
  • Без фильтров — все события попадают в Kafka для аналитической обработки.

File — локальный файл (для разработки / offline)

{
  "name": "Local File Log",
  "type": "file",
  "enabled": true,
  "config": {
    "path": "/data/logs/llm-events.jsonl",
    "rotate": true,
    "max_size_mb": 100
  }
}
  • Формат: JSON Lines (одно JSON-событие на строку).
  • При достижении max_size_mb файл ротируется (переименовывается, создаётся новый).
  • Полезно для разработки, отладки и offline-развёртываний без SIEM.

Фильтрация

Каждый экспортер может иметь независимые фильтры. Фильтры определяют, какие события попадут в этот экспортер.

Фильтр Описание Логика
severities Уровни критичности OR (CRITICAL или HIGH)
event_types Типы событий OR (REQUEST_BLOCKED или THREAT_DETECTED)
tenant_ids ID тенантов OR (production или staging)

Между фильтрами — AND-логика: событие должно соответствовать всем указанным фильтрам.

Примеры:

Фильтры Какие события попадут
severities: ["CRITICAL", "HIGH"] Все CRITICAL и HIGH, любой тип, любой тенант
event_types: ["THREAT_DETECTED"] Только THREAT_DETECTED, любой severity, любой тенант
severities: ["CRITICAL"], event_types: ["THREAT_DETECTED"] Только THREAT_DETECTED с severity CRITICAL (AND)
severities: ["CRITICAL", "HIGH"], tenant_ids: ["production"] CRITICAL или HIGH и тенант production
(без фильтров) Все события — ничего не фильтруется

Типичные конфигурации фильтров:

Сценарий Фильтры
Только критичные инциденты для SOC severities: ["CRITICAL", "HIGH"]
Все блокировки для анализа event_types: ["REQUEST_BLOCKED", "RESPONSE_BLOCKED", "CUSTOM_POLICY_BLOCK"]
Monitoring-only события event_types: ["MONITOR_ALERT", "RESPONSE_MONITOR_ALERT"]
Все события production-тенанта tenant_ids: ["production"]
PII-события для DPO event_types: ["PII_DETECTED", "RESPONSE_REDACTED"]

Маппинг форматов

Маппинг определяет, как поля события переименовываются перед отправкой.

Профиль Описание Когда использовать
generic Без преобразования — поля как есть Свой backend, File, когда маппинг не нужен
ecs Elastic Common Schema Elasticsearch / Kibana / Elastic SIEM
custom Пользовательский маппинг полей Любой SIEM с нестандартной схемой

Маппинг ECS (Elastic Common Schema):

Поле события Поле ECS Описание
trace_id trace.id ID трассировки
event_type event.type Тип события
severity event.severity_name Уровень критичности
timestamp @timestamp Время события
source_ip source.ip IP клиента
profile_id labels.profile_id ID профиля

Рекомендация

Если вы используете Elasticsearch/Kibana — выбирайте ecs. Это позволит использовать стандартные Kibana-дашборды для анализа событий без дополнительной настройки.

Тестирование

После создания экспортера обязательно отправьте тестовое событие для проверки подключения:

# Отправить тестовое событие
curl -X POST "http://localhost:8001/api/v1/exporters/{id}/test"

Ожидаемые результаты:

Результат Что означает Что делать
HTTP 200 {"status": "ok"} Событие успешно доставлено Всё работает
HTTP 500 + connection refused Destination недоступен Проверьте адрес/порт, firewall
HTTP 500 + authentication error Неверные credentials Проверьте username/password/token
HTTP 500 + timeout Destination не отвечает в таймаут Увеличьте timeout_sec или проверьте сеть

Управление экспортерами

Включение / отключение: переключатель enabled на странице Exporters или через PUT API. Отключённый экспортер перестаёт отправлять события, но конфигурация сохраняется. Полезно для временной паузы (например, при обслуживании SIEM).

Редактирование: все параметры конфигурации можно изменить, кроме типа экспортера. Изменения подхватываются Event Exporter Service автоматически в течение 30 секунд.

Удаление: кнопка Delete (доступна только роли admin). Удаление необратимо — конфигурация не сохраняется.

Несколько экспортеров одновременно: можно создать неограниченное количество экспортеров. Каждый работает независимо со своими фильтрами и destination. Типичная конфигурация:

Экспортер Тип Фильтры Назначение
prod-syslog-soc syslog severity: CRITICAL, HIGH Корпоративный SOC — только критичные инциденты
analytics-kafka kafka (без фильтров) Аналитическая платформа — все события для дашбордов и ML
slack-critical webhook severity: CRITICAL, types: REQUEST_BLOCKED Оповещение дежурного в Slack о критичных блокировках
backup-file file (без фильтров) Локальный backup на случай недоступности SIEM

Типичные проблемы и решения

Проблема Симптом Решение
Экспортер не отправляет события Last Export не обновляется, в логах ошибки Выполните тест (кнопка Test). Проверьте адрес, порт, firewall. Для webhook — проверьте URL и заголовки авторизации.
События приходят в SIEM с задержкой Задержка > 30 секунд Для webhook: проверьте timeout_sec и max_retries. Для Kafka: уменьшите flush_interval. Event Exporter опрашивает очередь каждые 5 секунд.
В SIEM приходят не все события Часть событий отсутствует Проверьте фильтры: настроен severities: ["CRITICAL"], а ожидаете HIGH-события? Фильтры работают по AND-логике между группами.
Syslog: события не парсятся в SIEM Приходят, но отображаются как raw text Проверьте format: rfc5424 для современных SIEM, rfc3164 для старых. Проверьте facility — SIEM может фильтровать по нему.
Kafka: LEADER_NOT_AVAILABLE В логах ошибки подключения Проверьте адреса brokers, SASL-credentials, TLS-сертификаты. Убедитесь, что топик существует.
Webhook: HTTP 401/403 Ошибка авторизации Проверьте заголовок Authorization в headers. Возможно, токен истёк — обновите его в настройках экспортера.