Files
auth-portal/docs/integrate-audit-ingest.md
T
DenozordecandCursor 57e34ff5e9
Build and Push Auth Portal Docker Image / build-and-push (push) Successful in 1m46s
Build and Push Auth Portal Docker Image / create-release (push) Skipped
feat(admin): ingest аудита из apps и users 1:1 с Sheet журнала
Добавлен POST /api/v1/ingest/audit, фильтры source_app/user_id, last_login_at; таблица пользователей по solution-users-1 с журналом в Sheet.

Co-authored-by: Cursor <[email protected]>
2026-07-21 13:24:28 +07:00

1.9 KiB
Raw Blame History

Audit ingest — интеграция приложений с Auth Portal

Центральный журнал: GET /api/v1/admin/audit (только admin).
Приложения пишут локально и дублируют события в portal.

Endpoint

POST /api/v1/ingest/audit
Authorization: Bearer <AUDIT_INGEST_SECRET>
Content-Type: application/json

Body

{
  "events": [
    {
      "event_id": "uuid-unique-per-event",
      "source_app": "vps",
      "action": "vps.vps.create",
      "severity": "info",
      "actor_user_id": "…",
      "actor_email": "[email protected]",
      "actor_name": "Name",
      "target_type": "app_resource",
      "target_id": "entity-id",
      "summary": "Человекочитаемое описание",
      "details": { "entity": "vps", "diff": {} },
      "ip": "1.2.3.4",
      "created_at": "2026-07-21T00:00:00.000Z"
    }
  ]
}
  • events: 150 за запрос
  • source_app: vps | cfdm | bgp | fw (не portal)
  • event_id: идемпотентность (дубликаты → duplicates++)
  • Ответ: { "accepted": N, "duplicates": M }

Env

Где Переменная
auth-portal AUDIT_INGEST_SECRET
apps (vps / cfdm / bgp / fw) AUTH_PORTAL_URL + AUTH_AUDIT_INGEST_SECRET (тот же секрет)

Dev default secret: dev-audit-ingest-secret.

Dual-write

  1. Записать в локальный audit_log
  2. Fire-and-forget POST в portal (timeout ~2s)
  3. Ошибка push не должна ломать CRUD

Фильтры admin UI

  • /admin/audit — source_app + type tabs + range
  • Клик по пользователю на /admin — Sheet с событиями, где actor_user_id или target_id = user id

Preview: solution-users-1 · solution-users-6