报告已经生成,用户要求上传到公司资料库。Agent 能写本地文件,不代表它能上传到任何地址,更不代表它能把原始订单资料全部发送出去。权限应该描述一次具体动作,而不是给 Agent 一个笼统的“可信”标签。
本篇沿“上传已验证报告”讲授权。Tool 系列已经解释参数校验和审批恢复,这里把它们放进工作环境、身份和凭证的完整路径。
授权至少需要四类信息
主体是谁,操作什么资源,执行什么动作,在什么条件下执行。比如主体是租户 shop-a 的用户 user-417,资源是本次任务导出的报告,动作是上传,条件是目标资料库属于同一租户且报告 hash 与批准内容一致。
用户身份来自可信会话。报告路径和目的地即使由模型建议,也不能直接作为可信归属。执行器需要解析资源引用,查询归属,再与当前授权比较。格式正确只是参数可以被程序理解,授权则判断这个主体是否可以这样做。
PDP 是做策略决定的位置,PEP 是执行决定的位置。它们可以是同一个服务里的两个函数,不必为了名词拆成两个微服务。决定可以是允许、拒绝或需要补充批准;真正的外部调用必须在 PEP 检查通过后发生。
批准的对象不能在执行前偷偷改变
用户同意上传报告 H1 到公司资料库 X,随后模型把目的地改成 Y,旧批准不应该继续有效。批准应绑定规范化动作,包括主体、租户、目标、产物 hash、策略版本和有效期。
hash 只提供内容一致性标识。模型自己算出相同 hash,并不能冒充用户批准。审批记录必须由可信界面或服务写入,执行器从可信存储读取,而不是接受模型参数里的 approved=true。
配套权限示例下载用不可变动作对象和内存审批记录演示绑定。它不签发生产 Token,也不模拟真实身份认证。示例要求 type(value) is bool,避免把字符串 "false" 当成真值。
是否需要每次人工审批取决于已有授权和风险。用户已经明确授权一次具体上传,系统不必无条件再问一遍;但这份授权也不能被扩大成“以后任意上传”。技术上需要保存授权范围,才能区分二者。
Capability 与普通访问令牌有什么关系
Capability 可以理解为对某个资源执行特定动作的能力凭据。它的约束应由接收方验证,例如只允许读取 A1042,在两分钟内有效,不能退款。并非所有标有 scope 的 Token 都自动实现对象级限制;要看资源服务器是否实际检查订单、租户和受众。
长期 API Key 往往权限较宽。把它写进 Prompt、Skill 或可读取工作区,会让模型和工具链都接触原始秘密。更合理的常见做法是由可信 Host 保存凭证,通过业务代理发起获准请求,把结果而不是密钥交回执行环境。
如果某个进程必须持有短期令牌,也应尽量限制目标、动作和期限,并控制它能否通过日志或网络外传。短期减少泄露后的时间窗口,不代表泄露没有影响。
凭证代理不是代替业务授权
代理能隐藏密钥,但如果接受任意 URL 和请求体,就可能成为通用外传工具。代理应暴露较窄业务接口,例如“上传本任务的已核验报告”,服务端解析产物和目的地,而不是让模型构造原始认证头。
云端 Workload Identity 可以让服务获取与自身身份关联的凭证,减少静态密钥管理;它也不直接知道用户是否能读取某个订单。基础设施身份、用户身份和业务授权需要在调用链上正确关联。
日志记录主体引用、动作、策略版本、结果和关联 ID。避免记录完整令牌、认证头或敏感报告正文。拒绝信息应足够帮助合法用户处理,例如说明缺少上传权限,但不泄露其他租户对象是否存在。
恢复与委派不能复活旧权限
任务暂停一小时后恢复,原来的上传权限可能已经撤销。加载 Checkpoint 只能恢复“当时到了哪里”,不能恢复“当时仍有效的权利”。执行前要重新查询当前策略、审批有效期和资源归属。
同样,父 Agent 有读订单和上传能力,事实核验子 Agent 只需要读取指定快照。委派应创建更窄的动作集合和资源范围,同时减少有效期及预算;不能把父进程全部环境变量复制过去。
权限衰减的关键是接收方真正执行这些限制。只在子任务 Prompt 中写“你只能读”,而它仍然持有上传密钥与工具,并没有完成降权。
当授权拒绝时,Harness 应保留结构化原因并停止相应动作。把拒绝当成临时网络故障,会驱使模型换路径重试。下一篇将继续区分动作获准、执行成功和任务完成。