跳到主要内容

审计日志

审计日志是 Agent 系统的事实记录:谁在什么时间、以什么身份、基于什么输入和策略,让 Agent 调用了什么模型和工具,产生了什么输出、副作用和审批结果。没有审计日志,安全事故、合规问责、模型回归和用户争议都无法有效处理。

核对日期:2026-05-09。

1. 定义与边界

审计日志不同于普通调试日志:

类型目的保留内容
调试日志帮工程师定位错误可采样、可短期、可脱敏。
Trace还原一次 Agent 执行链路span、模型调用、工具调用、耗时、错误。
审计日志合规、问责、事故复盘身份、授权、审批、策略版本、副作用证据。
安全事件检测和响应攻击注入命中、DLP 命中、越权尝试、异常工具序列。

审计日志应可关联,但不能无节制保存敏感原文。

2. 需要记录什么

事件关键字段
Agent run 开始run_id、用户、租户、入口、任务类型、策略版本。
模型调用模型名、参数、输入摘要、输出摘要、token、延迟、错误。
工具选择候选工具、最终工具、风险等级、选择原因摘要。
授权决策策略结果、拒绝原因、scope、对象 ID、租户 ID。
人类审批审批人、时间、结果、理由、审批前后参数哈希。
工具执行工具名、版本、参数摘要、目标系统、结果、幂等键。
输出交付输出渠道、收件人、DLP 结果、用户可见内容摘要。
安全事件规则 ID、严重度、命中内容摘要、处理动作。

3. 事件结构

{
"event_id": "evt_001",
"run_id": "run_123",
"timestamp": "2026-05-09T10:00:00Z",
"tenant_id": "tenant_a",
"actor": {
"type": "user",
"id": "user_001"
},
"event_type": "tool_authorization",
"tool": {
"name": "send_email",
"version": "1.4.2",
"risk": "high"
},
"decision": "require_approval",
"policy_version": "agent-policy-2026-05-09",
"sensitive_fields": ["email_body"],
"payload_hash": "sha256:..."
}

4. 工程防护

4.1 可关联性

每个事件必须携带:

  • run_id:一次 Agent 执行链路。
  • session_id:会话边界。
  • tenant_id:租户边界。
  • user_id 或服务账号。
  • policy_versionprompt_versiontool_schema_version
  • approval_ididempotency_key,如适用。

4.2 敏感数据处理

内容处理
API key、token、password不落日志;必要时只记录存在性和哈希。
PII默认脱敏;按合规要求加密留存或最小化。
Prompt 原文高风险样本可加密短期留存;默认摘要和哈希。
工具返回分字段脱敏;禁止完整记录大规模客户数据。
审批理由保留,但避免复制敏感原文。

4.3 防篡改与访问控制

  • 审计日志写入 append-only 存储。
  • 日志访问需要独立权限,不能所有开发者默认可读。
  • 高敏日志加密并设置保留期。
  • 日志删除和导出本身也要审计。
  • 对安全事件设置告警和工单流转。

5. 生产流程

  1. 定义事件 schema 和字段分类。
  2. 接入 Agent orchestrator、工具网关、审批系统、DLP、沙箱和模型调用层。
  3. 建立日志脱敏和采样策略。
  4. 建立检索视图:按 run、用户、工具、审批、安全事件、租户查询。
  5. 定义保留期、访问权限、导出流程和删除流程。
  6. 用事故演练验证能否在规定时间内重建执行链路。

6. 常见反模式

反模式问题
只记录最终回答无法知道工具调用、权限决策和审批过程。
完整记录所有 prompt 和工具返回审计系统本身变成敏感数据泄露源。
日志没有版本信息无法复现当时的策略、Prompt 和工具行为。
只记录成功事件攻击尝试、拒绝和异常才是重要安全信号。
日志可被应用管理员随意删除审计证据不可信。

7. 评测与演练

演练通过标准
复盘一次外发邮件能找到输入摘要、工具参数、审批人、DLP 结果和发送结果。
复盘一次越权请求能看到用户、目标对象、策略拒绝原因和告警。
检查日志脱敏抽样无明文 secret、高敏 PII 和完整客户清单。
策略回滚复现能找到当时 policy、prompt、tool schema 版本。
日志访问审计能知道谁查询或导出了高敏日志。

指标:

  • 关键事件覆盖率。
  • trace 与审计日志关联成功率。
  • 敏感日志泄露缺陷数。
  • 安全事件告警延迟。
  • 事故链路重建时间。

8. 安全资料

9. 二次精修:可回放审计模型

9.1 审计事件 schema

{
"event_id": "evt_001",
"run_id": "run_abc",
"trace_id": "trace_123",
"actor": {"type": "user", "id": "u_123"},
"agent": {"name": "renewal_assistant", "version": "2026.05.09"},
"event_type": "tool_call_requested",
"tool": "send_email",
"risk": "high",
"policy_decision": "require_approval",
"policy_version": "agent-policy-2026-05-09",
"data_classification": ["confidential"],
"redaction": {"applied": true, "fields": ["phone"]},
"timestamp": "2026-05-09T10:12:00+08:00"
}

9.2 必须能回答的问题

问题需要的字段
谁发起了任务?user_id、session_id、auth context
Agent 基于什么证据做决定?source ids、retrieval ids、tool observations
为什么允许或拒绝工具调用?policy_version、decision、reason code
是否经过审批?approval_id、approver、approved_args_hash、expiry
是否发生敏感数据处理?data_classification、redaction、DLP result
能否复现?prompt version、model id、tool schema version、state snapshot

9.3 日志分级

日志层级内容保留策略
指标成功率、成本、延迟、拒绝率长期保留
审计摘要动作、策略、审批、对象 ID合规周期保留
Trace 详情prompt 摘要、工具参数、状态 diff加密、限权、短周期
高敏原文完整文档、完整 prompt、secret默认不记录,必要时隔离保管

9.4 告警规则

  • 高风险工具调用未出现对应审批事件。
  • 同一 run 中出现跨租户对象访问尝试。
  • DLP 命中后仍有外发工具成功。
  • 工具 schema 或 policy 版本在执行链中发生异常变化。
  • 日志查询或导出行为本身异常增多。

9.5 反模式补充

反模式问题
只记录最终回答无法定位工具选择、权限判断和数据流
记录完整原文但不脱敏日志成为第二个数据泄露面
trace 与业务审计分离事故时无法把模型行为映射到业务对象
策略版本不入日志无法解释当时为什么放行

核对日期:2026-05-09。