Прочитайте audit-ленту
Отфильтруйте неизменяемый поток событий до биографии одного credential и действий одного оператора.
Всё, что делали предыдущие сценарии, оставило события. Этот сценарий читает их обратно так, как это делало бы расследование: по credential, по актору, по типу, по времени.
Цель
Реконструировать историю одного credential и изолировать действия одного оператора с помощью audit-фильтров.
Предварительные условия
- Админский вход: токен
provider_adminна/v1/admin/audit-eventsили admin-scoped сервисный токен на/internal/v1/admin/audit-events— лента одна и та же. - Активность из предыдущих сценариев (создания, ротация, reveal).
Шаги
1. Биография одного credential
curl -s "$CREDS_BASE/internal/v1/admin/audit-events?credential_id=$CRED_ID" \
-H "Authorization: Bearer $ADMIN_TOKEN" -H "X-Admin-Actor: panel:olha"
Ожидаемый 200, новейшие первыми: credential.created, затем credential.updated (метаданные перечисляют имена изменённых полей — например, ["credentials"] после ротации), credential.default_changed и так далее. Никаких секретных значений нигде в metadata.
2. Действия одного оператора
Отфильтруйте по атрибутированному актору:
events = httpx.get(
f"{CREDS_BASE}/internal/v1/admin/audit-events",
params={"actor_id": f"service:{CLIENT_ID}!panel:olha"},
headers=admin_headers,
).json()
assert all(e["actor_id"].endswith("panel:olha") for e in events["items"])
Ожидаемо: ровно те вызовы, что сделаны под этой меткой X-Admin-Actor — атрибуция из сценария 07 окупается.
3. История resolve
Отфильтруйте event_type=credential.resolved (и его собрата credential.resolve_failed). Ожидаемо: одно событие на каждый resolve, несущее credential_source, target_user_id и ваш correlation_id — нить, связывающая запрос рантайма с этой лентой.
4. Ограничьте по времени
Добавьте from/to (RFC 3339). Ожидаемо: только события внутри окна. Помните политику ретенции: лента хранит ~10 дней (по умолчанию), а credential.revealed освобождено — экспортируйте ниже по течению то, что должны хранить дольше.
Проверено тестом test_s09_read_the_audit_trail.