审计日志
审计日志是 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_version、prompt_version、tool_schema_version。approval_id和idempotency_key,如适用。
4.2 敏感数据处理
| 内容 | 处理 |
|---|---|
| API key、token、password | 不落日志;必要时只记录存在性和哈希。 |
| PII | 默认脱敏;按合规要求加密留存或最小化。 |
| Prompt 原文 | 高风险样本可加密短期留存;默认摘要和哈希。 |
| 工具返回 | 分字段脱敏;禁止完整记录大规模客户数据。 |
| 审批理由 | 保留,但避免复制敏感原文。 |
4.3 防篡改与访问控制
- 审计日志写入 append-only 存储。
- 日志访问需要独立权限,不能所有开发者默认可读。
- 高敏日志加密并设置保留期。
- 日志删除和导出本身也要审计。
- 对安全事件设置告警和工单流转。
5. 生产流程
- 定义事件 schema 和字段分类。
- 接入 Agent orchestrator、工具网关、审批系统、DLP、沙箱和模型调用层。
- 建立日志脱敏和采样策略。
- 建立检索视图:按 run、用户、工具、审批、安全事件、租户查询。
- 定义保留期、访问权限、导出流程和删除流程。
- 用事故演练验证能否在规定时间内重建执行链路。
6. 常见反模式
| 反模式 | 问题 |
|---|---|
| 只记录最终回答 | 无法知道工具调用、权限决策和审批过程。 |
| 完整记录所有 prompt 和工具返回 | 审计系统本身变成敏感数据泄露源。 |
| 日志没有版本信息 | 无法复现当时的策略、Prompt 和工具行为。 |
| 只记录成功事件 | 攻击尝试、拒绝和异常才是重要安全信号。 |
| 日志可被应用管理员随意删除 | 审计证据不可信。 |
7. 评测与演练
| 演练 | 通过标准 |
|---|---|
| 复盘一次外发邮件 | 能找到输入摘要、工具参数、审批人、DLP 结果和发送结果。 |
| 复盘一次越权请求 | 能看到用户、目标对象、策略拒绝原因和告警。 |
| 检查日志脱敏 | 抽样无明文 secret、高敏 PII 和完整客户清单。 |
| 策略回滚复现 | 能找到当时 policy、prompt、tool schema 版本。 |
| 日志访问审计 | 能知道谁查询或导出了高敏日志。 |
指标:
- 关键事件覆盖率。
- trace 与审计日志关联成功率。
- 敏感日志泄露缺陷数。
- 安全事件告警延迟。
- 事故链路重建时间。
8. 安全资料
- OpenTelemetry Generative AI semantic conventions: https://opentelemetry.io/docs/specs/semconv/gen-ai/
- NIST AI RMF: https://www.nist.gov/itl/ai-risk-management-framework
- OWASP Top 10 for LLM Applications 2025: https://owasp.org/www-project-top-10-for-large-language-model-applications/
- Microsoft Azure OpenAI security baseline: https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/azure-openai-security-baseline
- AWS Agentic AI Security Controls: https://docs.aws.amazon.com/prescriptive-guidance/latest/agentic-ai-security/introduction.html
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。