Логирование аудита коннекторов
Trail аудита для всех MCP, Telegram и ChatGPT вызовов инструментов — compliance, отслеживание затрат и расследование инцидентов.
Каждый вызов внешнего инструмента коннектора — будь то через MCP, Telegram или ChatGPT — логируется в Лог аудита коннекторов для compliance, отслеживания затрат и расследования безопасности.
Что логируется
| Поле | Значение | Примечания |
|---|---|---|
id | UUID | Уникальный ID записи аудита |
workspace_id | UUID | Рабочее пространство, которое инициировало вызов |
user_id | UUID | Пользователь, который запустил инструмент (если человек) |
platform | mcp | telegram | chatgpt | stdio | Через какой интерфейс был вызван инструмент |
tool_name | string | Имя инструмента (например create_issue, list_comments) |
scopes | string[] | OAuth scopes, которые нёс токен (например ["issues:read", "issues:write"]) |
outcome | ok | denied | error | Успех, отказ в разрешении или ошибка |
error_code | string | null | Если ошибка, код (например insufficient_scope, malformed_input) |
input_summary | string | Очищенный ввод (никогда не включает секреты или полные payload) |
result_size | integer | Возвращённые байты |
tokens_in | integer | null | Входные токены (если вызов запустил модель) |
tokens_out | integer | null | Выходные токены (если вызов запустил модель) |
cost_micros | integer | null | Приблизительная стоимость в микродолларах |
created_at | timestamp | Когда произошел вызов |
duration_ms | integer | Round-trip latency |
API запроса лога аудита
Список записей аудита
GET /api/audit/connectorsПараметры запроса:
| Параметр | Тип | Описание |
|---|---|---|
platform | string | Фильтр по mcp, telegram, chatgpt, stdio |
user_id | UUID | Фильтр по пользователю |
tool | string | Фильтр по имени инструмента |
outcome | string | Фильтр по ok, denied, error |
since | ISO 8601 | Начальная дата (по умолчанию: последние 7 дней) |
until | ISO 8601 | Конечная дата |
limit | integer | Размер страницы (по умолчанию: 100) |
offset | integer | Смещение пагинации |
Пример:
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=mcp \
&outcome=error \
&since=2025-06-01T00:00:00Z \
&limit=50Возвращает:
{
"entries": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "550e8400-e29b-41d4-a716-446655440001",
"user_id": "550e8400-e29b-41d4-a716-446655440002",
"platform": "mcp",
"tool_name": "update_issue",
"scopes": ["issues:write", "issues:read"],
"outcome": "ok",
"error_code": null,
"input_summary": "issue_id: AAC-42, status: done",
"result_size": 2048,
"tokens_in": 150,
"tokens_out": 80,
"cost_micros": 12,
"created_at": "2025-06-22T15:30:00Z",
"duration_ms": 245
}
],
"total": 1247,
"limit": 50,
"offset": 0
}Пользовательский интерфейс лога аудита
Администраторы рабочего пространства могут просмотреть лог аудита в Параметры → Аудит & Compliance → Лог коннекторов.
Интерфейс предоставляет:
- Временная шкала — последние вызовы инструментов с индикаторами статуса (зелёный = успех, жёлтый = отказано, красный = ошибка)
- Фильтрация — по платформе, инструменту, результату, пользователю и диапазону дат
- Анализ затрат — сумма затрат на токены за период
- Расследование инцидентов — просмотр в деталь неудачных или отклонённых вызовов для понимания причины
Пример: Расследуйте подозрительный скачок ошибок
- Перейдите в Параметры → Аудит & Compliance → Лог коннекторов
- Отфильтруйте по
platform: mcp,outcome: error,since: yesterday - Кликните на неудачный вызов, чтобы увидеть:
- Какой инструмент был вызван
- Какая ошибка произошла
- Кто инициировал вызов
- Полные token scopes в момент времени
- Соотнесите с логами выполнения агента для понимания контекста
Политика очистки
Лог аудита никогда не хранит:
- API токены или секреты
- Полные request/response bodies
- PII за пределами того, что сам результат раскрывает
Поле input_summary очищает чувствительные данные:
- ❌
input_summary: "token=sk-..."— очищено - ✓
input_summary: "issue_id: AAC-42, status: done"— безопасно - ✓
input_summary: "create issue, title length: 45 chars, 3 labels"— безопасно
Enforcement scope + аудит
Когда инструмент вызывается с недостаточными scopes:
- Вызов отклоняется — инструмент никогда не выполняется
- Аудит логирует отказ — outcome
denied, error_codeinsufficient_scope - Нет мутации — вызов логируется но не предпринимает действия
Пример лога отказа:
{
"platform": "mcp",
"tool_name": "delete_issue",
"scopes": ["issues:read"],
"outcome": "denied",
"error_code": "insufficient_scope",
"input_summary": "issue_id: AAC-100",
"created_at": "2025-06-22T16:00:00Z"
}Успешный вызов с outcome: ok доказывает, что токен имел правильные scopes. Отклонённый вызов доказывает, что не имел.
Отслеживание затрат и использования
Для вызовов, которые запускают языковую модель (например агенты, вызывающие инструменты через MCP), лог аудита захватывает:
tokens_in— входные токены, отправленные в модельtokens_out— выходные токены, полученныеcost_micros— приблизительная стоимость (цены зависят от модели)
Администраторы могут запросить лог аудита для:
- Прогноза затрат — сумма
cost_microsза период биллинга - Обнаружения неконтролируемых агентов — поиск пользователей/рабочих пространств с необычным количеством токенов
- Оптимизации промптов — определение инструментов с наивысшим overhead входных токенов
Пример запроса затрат:
curl https://aacworkflow.example.com/api/audit/connectors \
?since=2025-06-01&until=2025-06-30 \
| jq '[.entries[] | .cost_micros] | add'
# Возвращает общую стоимость в микродолларах за июньCompliance и retention
- Логи аудита хранятся 90 дней по умолчанию (настраивается per workspace)
- Логи immutable — не могут быть отредактированы или удалены
- Логи индексируются по рабочему пространству — одно пространство не может видеть trail другого
- Удаление рабочего пространства, пользователя или токена не удаляет ретроактивно записи аудита (исторический запись)
Примечания безопасности
Лог аудита только для администраторов. Non-admins не могут просматривать записи аудита для их рабочего пространства.
- Записи аудита — fire-and-forget — сбои логирования не блокируют выполнение инструмента
- Данные аудита зашифрованы в покое (то же шифрование, что и данные issues)
- Запросы аудита требуют роль admin рабочего пространства
- Записи аудита несут
workspace_id, предотвращая утечку данных между рабочими пространствами
Примеры workflows
1. Расследуйте ticket поддержки
"Пользователь говорит, что обновление issue не удалось. Дайте мне проверить лог аудита."
curl https://aacworkflow.example.com/api/audit/connectors \
?user_id=<user_id> \
&tool=update_issue \
&outcome=error \
&since=2025-06-22T00:00:00ZВы видите, что вызов не удался с insufficient_scope. Токен пользователя имел только issues:read, не issues:write.
2. Мониторьте использование Telegram bot
"Сколько инструментов вызвал наш Telegram bot на этой неделе?"
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=telegram \
&since=2025-06-15T00:00:00Z \
| jq '.total'Результат: 342 вызова инструментов через Telegram на этой неделе.
3. Рассчитайте затраты
"Во что обошлись нам MCP инструменты в июне?"
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=mcp \
&since=2025-06-01 \
&until=2025-06-30 \
| jq '[.entries[] | select(.cost_micros != null) | .cost_micros] | add'Результат: 45,000 микродолларов = $0.045
4. Найдите отклонённые вызовы
"Почему некоторые вызовы инструментов отклоняются? Дайте мне проверить."
curl https://aacworkflow.example.com/api/audit/connectors \
?outcome=denied \
&since=yesterdayРезультат: 12 вызовов отклонено из-за insufficient_scope, 1 из-за malformed_input.