Skip to content

Выгрузка в SIEM (CEF)

Служба безопасности заказчика собирает события всех своих систем в одну SIEM и разбирает их там, а не в панели каждой системы по отдельности. Agora отдаёт журнал аудита в формате CEF (Common Event Format) — текстовом, по строке на событие, с полями через разделители. Этот формат без доработок принимают ArcSight, KUMA, MaxPatrol SIEM и другие корпоративные приёмники.

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

  • кнопкой Выгрузить в CEF в разделе Журнал аудита — файл сохраняется в браузере;
  • запросом к API — так журнал забирает сборщик SIEM по расписанию.

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

Выгрузка из панели

Кнопка Выгрузить в CEF стоит над лентой, рядом с кнопкой Применить. Она выгружает ровно то, что показывает лента:

  • Тип ресурса, Имя ресурса и Актор сужают выгрузку так же, как ленту;
  • С и По задают окно времени;
  • пустые поля означают «не фильтровать» — выгружается весь журнал за срок хранения.

В выгрузку попадают применённые фильтры. Если после нажатия Применить поле поправили, но ленту не перечитали, выгрузка возьмёт прежнее значение: файл всегда совпадает с тем, что видно на экране.

Файл называется audit-log.cef. В нём все записи окна, а не только страницы, которые успели загрузиться в ленту.

Кнопка видна тем же ролям, что и сам журнал, — security и superadmin. Когда журнал не входит в лицензию, кнопка неактивна.

Файл собирается в памяти вкладки браузера. Для окна в несколько дней этого достаточно; журнал за долгий срок хранения удобнее забирать по API.

Выгрузка по API

GET /central/api-v4/audit-log/export?format=cef&from=2026-09-27T00:00:00Z&to=2026-09-27T12:00:00Z

Авторизация — та же операторская, что у остального управляющего API, и роли те же: security и superadmin.

Параметры:

  • format — обязателен, сейчас единственное значение cef;
  • from, to — границы окна в формате RFC 3339, обе включаются в окно;
  • resource_type, resource_name, actor, actor_type — те же фильтры, что в панели; actor_type принимает admin, static и node.

Ответ — текст (text/plain), вложением с именем audit-log.cef. Он идёт потоком: первые строки приходят сразу, а сервер держит в памяти одну страницу журнала, поэтому размер окна ничем не ограничен.

Отказы:

  • 400 — граница окна не в формате RFC 3339 либо формат не указан или неизвестен. Негодный запрос никогда не превращается в выгрузку всего журнала;
  • 403 — у роли нет доступа к журналу;
  • 404 — журнал аудита не входит в лицензию.

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

Без to окно открыто вперёд: записи, сделанные, пока выгрузка идёт, в неё тоже попадают. Нужна неподвижная граница — задайте to.

Строка CEF

Каждое событие — одна строка:

CEF:0|Flussonic|agora|26.09|stream_config.patch|stream_config.patch|3|rt=1790590530250 externalId=0f6b8a1e-6a3c-5d7e-9b1a-2c3d4e5f6a7b dvchost=11111111-2222-3333-4444-555555555555 suid=admin suser=ivanov outcome=success src=10.20.1.11 cs1=stream cs1Label=resourceType cs2=conference-a cs2Label=resourceName cs3=9c1f07e2 cs3Label=sessionId cs4=4bf92f3577b34da6a3ce929d0e0e4736 cs4Label=traceId cs5={"fields":["labels"],"role":"admin","src_ip":"10.20.1.11","version":7} cs5Label=details cn1=3672 cn1Label=auditId cn2=1 cn2Label=schemaVersion

Шапка до седьмой вертикальной черты:

  • Device Vendor — Flussonic;
  • Device Product — agora: по нему SIEM выбирает правила разбора;
  • Device Version — версия установленной Agora;
  • Device Event Class ID и Name — действие, то же машинное имя, что в колонке Действие ленты: stream_config.patch, admin.create, auth.login_failed;
  • Severity — важность события, о ней ниже.

Дальше идут поля в виде ключ=значение:

Поле CEF Что в нём
rt время события, миллисекунды от начала эпохи
externalId глобальный идентификатор события — по нему SIEM отбрасывает дубли
dvchost идентификатор установки Agora: события двух установок в одной SIEM не смешиваются
suid вид актора: admin, static (статический ключ) или node (регистрация машины кластера)
suser логин администратора; у статического ключа его нет
outcome success у состоявшегося действия, failure у неудачного входа
src адрес, с которого пришёл запрос
cs1, cs2 тип и имя ресурса (cs1Label=resourceType, cs2Label=resourceName)
cs3 идентификатор сессии администратора (cs3Label=sessionId): им связываются вход и всё, что сделано в этой сессии
cs4 идентификатор трассировки запроса (cs4Label=traceId) — по нему событие сопоставляется с логами
cs5 подробности записи в JSON (cs5Label=details): роль, версия документа, список изменённых полей
cn1 номер записи в журнале установки (cn1Label=auditId)
cn2 версия схемы события (cn2Label=schemaVersion)

Поля, которых у события нет, в строку не попадают вовсе: пустой ключ SIEM прочла бы как пустое значение. У действия по статическому ключу, например, нет ни suser, ни cs3.

Спецсимволы экранируются по спецификации CEF: в шапке — обратная косая черта и вертикальная черта, в полях — обратная косая черта и знак равенства, переводы строк заменяются на \n. Поэтому одно событие всегда занимает ровно одну строку, что бы ни было записано в его значениях.

Важность события

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

  • 7 — неудачное действие; сейчас это неудачная попытка входа (auth.login_failed);
  • 5 — действие, которое служба безопасности ждёт выше общего потока:

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

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

Регулярный забор в SIEM

Сборщик SIEM забирает журнал окнами по расписанию: каждый запрос берёт from равным to предыдущего. Обе границы входят в окно, поэтому запись, пришедшаяся ровно на стык, придёт дважды — SIEM отбросит дубль по externalId. Так же без потерь переносится и повтор окна после обрыва.

Окно не должно выходить за срок хранения журнала — семь суток по умолчанию (настройка audit_log_ttl_secs, см. Хранение и защита). Сборщик, который отставал дольше, найдёт в журнале только то, что ещё не удалено.

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