合规与事故调查问:哪个用户、通过哪个
Agent、在什么策略版本下、调用了什么
tool、访问了哪条记录?OAuth sub alone
不够——必须含 act(Agent)与策略决策。本文定义
最小日志集,给出 OpenTelemetry
建模建议,并标 PII 清洗点——联动 PAM/IGA
审计 与 零信任可观测性。
一、最小审计字段集
每条 Agent 相关事件建议包含:
| 字段 | 来源 | 示例 |
|---|---|---|
event_id |
UUID | evt_01H... |
timestamp |
RFC3339 UTC | |
delegator_id |
JWT sub |
user-248289761001 |
agent_id |
JWT act.sub 或 SPIFFE ID |
spiffe://.../checkout-agent |
client_id |
OAuth client | |
tool_name |
function / MCP tool | run_sql |
resource |
API path / file id | /mail/msg/123 |
action |
HTTP method / SQL class | SELECT |
decision |
allow / deny / pending_approval | allow |
policy_version |
OPA bundle git sha | abc123 |
delegated_token_jti |
若存在 | 关联 token |
trace_id |
W3C traceparent | 跨服务 |
deny 事件与 allow 同等重要——攻击探测留痕。
二、归因链
flowchart LR
U["delegator_id<br/>用户"] --> A["agent_id<br/>Agent"]
A --> T["tool_call"]
T --> R["resource"]
R --> D["decision + policy_version"]
调查查询示例(概念 SQL,非特定产品):
SELECT timestamp, tool_name, resource, decision
FROM agent_audit
WHERE delegator_id = 'user-248289761001'
AND agent_id = 'checkout-agent'
AND timestamp BETWEEN '2026-06-01' AND '2026-06-02';三、OpenTelemetry 建模
3.1 Span 层次
trace: agent.task.checkout
├── span: llm.completion (model=...)
├── span: agent.tool.run_sql
│ ├── attribute: delegator_id
│ ├── attribute: agent_id
│ ├── attribute: tool.args_hash (非明文 args)
│ └── span: db.query
└── span: agent.tool.send_email
3.2 推荐 Attributes(语义约定级)
| Attribute | 说明 |
|---|---|
enduser.id |
delegator_id(OTel 语义约定) |
agent.id |
agent_id |
agent.tool.name |
tool 名 |
agent.policy.decision |
allow/deny |
agent.policy.version |
bundle 版本 |
勿把 Bearer token、邮件正文、SQL 绑定参数明文放入 span——用 hash 或 id。
3.3 与 MCP 对齐
MCP tools/call 应在 Host 创建 child
span,server_id 作 attribute——多 Server
拓扑可过滤。
四、PII 清洗点
| 位置 | 策略 |
|---|---|
| LLM prompt | 最小必要;日志 redact |
| tool args 日志 | 记录 hash + 结构化 allowlist 字段 |
| tool 结果缓存 | 见 第 08 篇 |
| 导出 SIEM | tokenize 邮箱/电话 |
| 审计 retention | 与 GDPR/本地法一致——本文不认定合规 |
五、不可篡改与完整性
高合规场景:审计流 append-only(WORM / hash chain);与 PAM 会话录像 不同——Agent 审计是 结构化事件 非 keystroke。
六、与 Policy Engine 联动
OPA decision log 已含
input/result——Agent 平台应
归一化 到上述字段集,避免 OPA 与 Gateway
各记一套。
七、反模式
- 只记 allow 不记 deny
- args 明文进 Splunk
- 无 agent_id——无法区分用户自操作
- 无 policy_version——无法复现当时规则
八、边界
- 具体 SIEM 字段映射因厂商而异
- OTel 语义约定仍在演进——以 opentelemetry.io 当前 spec 为准
九、args_hash
SHA256(canonical JSON)——勿记录明文 args。
十、deny 100% 采样
tail sampling 不作用于 deny/HITL 事件。
十一、post-incident runbook
按 delegator_id + time range 导出 tool 链。
上一篇:持续验证
下一篇:落地架构
参考资料
- OpenTelemetry Specification, Semantic Conventions
- PAM/IGA 审计
- 零信任可观测性
- RFC 8693,
actclaim 语义
读完这篇,下一步读什么
优先读同系列或同问题的下一篇,把单篇消费变成主题集群。
【Agent 身份与安全】AI Agent 的身份、委托与审计
IAM 系列(人)与零信任系列(边界)的自然延伸:当 LLM Agent 代表用户调用 API、执行 SQL、读写邮件时,传统 OAuth 模型如何扩展?拆解 Token Exchange、MCP 安全模型、工具级授权、持续验证与审计归因。
【身份与访问控制工程】PAM、IGA 与审计合规
PAM(Privileged Access Management)管理的是'有钥匙的人'——域管理员、数据库 DBA、云基础设施 root 账号。IGA(Identity Governance and Administration)管理的是'谁应该有什么访问权限'——访问认证(Access Certification)、权限审计(SoD 分离)、自动化开通。两者加上审计日志构成安全合规的三足鼎立。本文拆解 PAM 的会话劫持与审计、IGA 的访问认证与角色挖掘,以及审计日志的不可篡改设计。
【Agent 身份与安全】Agent 身份谱系:从 API Key 到委托 Token
四代 Agent 身份模型:API Key、OAuth 用户 token、Service Account、RFC 8693 Token Exchange 委托链。拆解 subject_token、actor_token、act claim,以及与 JWT/JWKS 系列的交叉引用。
【Agent 身份与安全】细粒度 Scope 与 UMA 2.0 启示
从 coarse scope 到 resource-specific consent:UMA 2.0 Permission Ticket 模型、Google incremental auth 对照,以及 Agent 场景下的动态授权边界。