Files
auth-portal/docs/integrate-audit-ingest.md
DenozordecandCursor fd7d9fd13c
quality / commitlint (push) Skipped
quality / changes (push) Successful in 7s
quality / docker-check (push) Skipped
quality / web (push) Successful in 40s
quality / api (push) Successful in 36s
CD / quality (push) Successful in 1m37s
CD / publish (push) Successful in 1m40s
feat(apps): добавить MikrotikManager app id mm
Регистрация mm в каталоге приложений, permissions mm:*, target-app и docs.

Co-authored-by: Cursor <[email protected]>
2026-09-04 20:38:27 +07:00

64 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```json
{
"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` | `dns` | `cdn` | `mm` (не `portal`)
- `event_id`: идемпотентность (дубликаты → `duplicates++`)
- Ответ: `{ "accepted": N, "duplicates": M }`
## Env
| Где | Переменная |
|-----|------------|
| auth-portal | `AUDIT_INGEST_SECRET` |
| apps (vps / cfdm / bgp / fw / cdn) | `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](https://reui.io/preview/base/solution-users-1) · [solution-users-6](https://reui.io/preview/base/solution-users-6)