ADR-0044: Audit.NET для Admin API и Resilience Policies
Статус
Принято.
Контекст
Аудит
Admin API выполняет чувствительные операции: одобрение KYC, ручная корректировка баланса, изменение лимитов operational safety, просмотр PII. Существующий AuditBehavior в MediatR pipeline фиксирует только факт вызова команды. Для compliance и regulatory evidence необходим детальный аудит: request/response body, before/after state EF entities, actor snapshot, duration.
Resilience
Pin интегрируется с 10+ external providers. Без resilience политик единственный недоступный провайдер (KYC, SMS, payment) роняет весь API или создаёт неконтролируемый cascade failure.
Решение
Аудит
Audit.NET (thepirat000) как декларативный audit framework для admin API:
[AuditApiAction("event-type")]на admin controller actions с mutation (PUT/POST/DELETE/PATCH).AuditDbContextкак base для admin DbContext — фиксирует EF INSERT/UPDATE/DELETE с before/after.- DataProvider: PostgreSQL schema
audit, append-only tableaudit_events. - Маскирование PII и secrets перед записью через
AuditSensitiveMasker. - Retention: 2 года (vs Serilog logs: 30 дней).
Audit.NET дополняет, а не заменяет MediatR AuditBehavior:
- MediatR: command name, actor, success/fail — легковесно, все сервисы.
- Audit.NET: full request body, EF changes, response — только admin API.
Resilience
Microsoft.Extensions.Http.Resilience + Polly v8:
- Named pipeline profiles:
external-provider(retry 3x exponential + circuit breaker + 10s timeout),internal-service(retry 2x + 5s timeout). - Декоратор
ResilientPortDecoratorчерез Scrutor для application ports к external providers. DistributedJobRunnerиспользует retry-механизм для database-level job scheduling.
Последствия
- Каждое изменение в admin API оставляет полный audit trail с before/after state.
- Провал одного external provider не роняет остальные операции — circuit breaker изолирует.
[AuditApiAction]обязателен для всех admin mutation endpoints.- Audit storage отделён от operational schema.
Ссылки
- Resilience And Audit Guide
- Audit Trail Standard
Обратные ссылки
Автоссылки: где используется этот документ.
- 12-resilience-and-audit.md (1): Resilience, FluentValidation и Audit — Практическое Руководство