![]()
凌晨2点13分,你的CI机器人提交了一个PR。2点19分,一个自主编码代理合并了依赖更新。2点27分,客服代理查询了客户数据。第二天早上,系统挂了——日志里只写了一行:agent=true。
这不是科幻场景。这是2024年硅谷某中型SaaS公司的真实事故复盘。团队花了6小时才拼凑出完整链路:五个代理共用同一个API密钥,日志散落在四个系统里,没人能确定是哪个代理的哪个动作触发了级联故障。
当AI代理从"帮你查资料"进化到"替你改生产代码",大多数团队还在用识别API客户端的方式识别它们:共享密钥、模糊的服务账户、一个bearer token(持有者令牌)在工具之间传来传去。简单自动化够用,问责的时候够用吗?
身份层缺失:代理比人还多,却比API更难追踪
一个能写代码、审批工作流、访问内部工具或触碰客户系统的代理,需要回答三个基础问题:
谁授权的?
在什么权限范围内?
具体执行了什么?
现在的典型架构长这样:编排器(orchestrator,调度中心)→ 代理 → 工具。代理带着一个密钥,调用所有东西。五个代理共用同一个token,你分不清是谁动的手。一个代理被攻破,所有动作看起来都一样。
代理经常代表用户、团队或另一个服务行动。但如果这种委托关系埋在应用逻辑或元数据里,很难检查,更难审计。代理很少需要人类级别的完整权限,但没有分层的身份和策略执行,团队只能给 blanket permissions( blanket permissions, blanket permissions)——因为省事。
出事后,团队要从编排器、应用、模型提供商、目标系统四个地方挖日志。这不是问责,是考古。
加密身份:把"某个自动化"变成"这个代理在这个授权下做了这件事"
![]()
对于自主代理,身份不该只是数据库里的字符串。它应该是:
可验证的——用密钥签名,能密码学验证,不是随便填的元数据
可委托的——能携带授权链,从用户→代理→工具,每一步可查
可审计的——每个动作绑定到具体身份,日志里能追溯到人
可撤销的——密钥泄露或策略变更时,能单独禁用某个代理
实际实现通常长这样:每个代理有唯一密钥对,私钥存硬件安全模块或安全密钥管理;代理身份在内部目录注册,带类型、版本、策略引用;动作请求用私钥签名,包含代理ID、委托链、请求详情;目标系统用公钥验证签名,检查策略,记录审计日志。
不需要 exotic( exotic, exotic)技术,只需要 explicit( explicit, explicit)——明确、可验证、可追溯。
对比:同一个代码代理,两种实现方式
假设你有一个代码代理,能做三件事:读取内部仓库代码、打开PR、触发CI构建。
没有加密身份的做法:给它一个GitHub token,完事。PR是它开的还是你开的?CI触发是计划内的还是代理自己决定的?token泄露了怎么办?全部重新生成,所有代理停摆。
有加密身份的做法:代理用唯一密钥签名每个请求,请求里包含"我代表用户U行动,请求打开PR到仓库R";GitHub验证签名,检查代理是否有权代表U操作R,记录"代理A代表U打开PR";策略引擎实时判断:这个代理类型能否直接合入main分支?还是需要人工审批?
这意味着当代理打开PR时,你能回答:哪个具体代理?在什么授权下?执行了什么动作?
这是"某个自动化做了某事"和"这个特定代理,在这个委托授权下,执行了这个动作"之间的区别。
![]()
身份需要策略配合,否则只是给东西起名字
如果你已经在用OPA(Open Policy Agent,开放策略代理),那策略执行层可能不需要新建。很多团队缺的不是新引擎,而是更好的输入:真实的代理身份、完整的委托链、结构化的工具请求上下文。
一个最小化的Rego策略示例——允许代理开PR,但不允许直接合入main:
package agent.authz
default allow = false
allow if {
input.agent.type == "code-agent"
input.action == "open_pr"
input.repo.visibility == "internal"
}
allow if {
input.agent.type == "code-agent"
input.action == "trigger_ci"
input.branch != "main"
}
deny_reason := "direct merges to main require human approval" if {
input.action == "merge_pr"
input.branch == "main"
}
关键点是:input.agent应该是真实的身份数据,不是请求体里随便填的、不可信的字符串。
加密身份不是要把代理变成人,而是要让代理的行动像人的行动一样可验证、可问责。当凌晨2点的PR合并引发故障时,你想花6小时做考古,还是花6分钟看一条签名日志?
你的团队现在怎么识别生产环境里的AI代理——是共享密钥、服务账户,还是已经有独特的身份体系?如果明天凌晨2点出事故,你能多快锁定具体是哪个代理干的?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.