KEEL · 龙骨 · A CURRICULUM FOR THE AI ERA
05. 权限越宽,模型的一次误判就越昂贵 — keel 龙骨
提示注入是否造成事故,取决于 Agent 最终能做什么。只能读取一个 staging 指标的 Worker 与持有全公司生产管理员 token 的 Worker,面对同一攻击文本会产生完全不同的最坏影响。
提示注入是否造成事故,取决于 Agent 最终能做什么。只能读取一个 staging 指标的 Worker 与持有全公司生产管理员 token 的 Worker,面对同一攻击文本会产生完全不同的最坏影响。
最小权限有多个维度
动作:read_metrics,不是 admin:*
资源:tenant-a/payment-service,不是所有租户
环境:staging,不是 production
时间:10 分钟短期凭据,不是永久 token
通道:只访问监控 API,不允许任意互联网
数量:最多 20 次查询,不允许无限循环
委派:不可再次 handoff,不可扩展 scope
只做“只读/写入”二分还不够。大量敏感数据的只读权限同样能造成严重泄露。
权限在运行时求交集
effective_actions = user.actions & delegation.actions & agent.actions & task.actions
effective_resources = user.resources & task.resources & resource_policy.resources
生产实现通常不会直接用 Python set 表达复杂策略,但交集思维能防止一个常见错误:把父主体和子 Agent 权限取并集。
凭据在最后一刻注入
Agent prompt 和 Task 只携带资源引用,不携带 token。PEP 允许后,credential broker 为 Adapter 签发短期凭据:
audience=config-api
scope=set_pool_limit
resource=tenant-a/staging/payment-service
expires_in=60s
Adapter 不应把凭据放进返回结果、异常消息、trace 或 Persistent Memory。
网络本身也是 capability
允许任意出站 HTTP 意味着 Agent 可能访问:
- 云元数据服务;
- 内网管理接口;
- 攻击者控制的外传端点;
- OAuth metadata 中被篡改的 URL;
- DNS rebinding 后指向的私网地址。
因此 egress policy、DNS/IP 校验、代理和域名 allowlist 属于权限设计,不只是基础设施细节。
限额阻止级联失控
多 Agent 或循环 Harness 至少限制:
- 每 Run 最大模型调用、工具调用和 handoff 次数;
- 最大并发、token、时间和费用;
- 每个主体的速率与资源配额;
- 对外消息、变更和删除动作次数;
- 失败后的重试预算。
Prompt 中的“请少调用工具”不是配额。超限必须由运行时停止并记录。
检查理解
- read-only 为什么仍可能是高风险权限?
- 为什么 token 应在 PEP 允许后才注入 Adapter?
- 出站网络为什么应被视为一种 capability?