AACWorkflow Docs

Логирование аудита коннекторов

Trail аудита для всех MCP, Telegram и ChatGPT вызовов инструментов — compliance, отслеживание затрат и расследование инцидентов.

Каждый вызов внешнего инструмента коннектора — будь то через MCP, Telegram или ChatGPT — логируется в Лог аудита коннекторов для compliance, отслеживания затрат и расследования безопасности.

Что логируется

ПолеЗначениеПримечания
idUUIDУникальный ID записи аудита
workspace_idUUIDРабочее пространство, которое инициировало вызов
user_idUUIDПользователь, который запустил инструмент (если человек)
platformmcp | telegram | chatgpt | stdioЧерез какой интерфейс был вызван инструмент
tool_namestringИмя инструмента (например create_issue, list_comments)
scopesstring[]OAuth scopes, которые нёс токен (например ["issues:read", "issues:write"])
outcomeok | denied | errorУспех, отказ в разрешении или ошибка
error_codestring | nullЕсли ошибка, код (например insufficient_scope, malformed_input)
input_summarystringОчищенный ввод (никогда не включает секреты или полные payload)
result_sizeintegerВозвращённые байты
tokens_ininteger | nullВходные токены (если вызов запустил модель)
tokens_outinteger | nullВыходные токены (если вызов запустил модель)
cost_microsinteger | nullПриблизительная стоимость в микродолларах
created_attimestampКогда произошел вызов
duration_msintegerRound-trip latency

API запроса лога аудита

Список записей аудита

GET /api/audit/connectors

Параметры запроса:

ПараметрТипОписание
platformstringФильтр по mcp, telegram, chatgpt, stdio
user_idUUIDФильтр по пользователю
toolstringФильтр по имени инструмента
outcomestringФильтр по ok, denied, error
sinceISO 8601Начальная дата (по умолчанию: последние 7 дней)
untilISO 8601Конечная дата
limitintegerРазмер страницы (по умолчанию: 100)
offsetintegerСмещение пагинации

Пример:

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 → Лог коннекторов.

Интерфейс предоставляет:

  • Временная шкала — последние вызовы инструментов с индикаторами статуса (зелёный = успех, жёлтый = отказано, красный = ошибка)
  • Фильтрация — по платформе, инструменту, результату, пользователю и диапазону дат
  • Анализ затрат — сумма затрат на токены за период
  • Расследование инцидентов — просмотр в деталь неудачных или отклонённых вызовов для понимания причины

Пример: Расследуйте подозрительный скачок ошибок

  1. Перейдите в Параметры → Аудит & Compliance → Лог коннекторов
  2. Отфильтруйте по platform: mcp, outcome: error, since: yesterday
  3. Кликните на неудачный вызов, чтобы увидеть:
    • Какой инструмент был вызван
    • Какая ошибка произошла
    • Кто инициировал вызов
    • Полные token scopes в момент времени
  4. Соотнесите с логами выполнения агента для понимания контекста

Политика очистки

Лог аудита никогда не хранит:

  • 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:

  1. Вызов отклоняется — инструмент никогда не выполняется
  2. Аудит логирует отказ — outcome denied, error_code insufficient_scope
  3. Нет мутации — вызов логируется но не предпринимает действия

Пример лога отказа:

{
  "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.