切换深色模式
阿里云 Agent Identity:工作负载、用户与凭证保险箱
核对日期:2026-10-05。覆盖本地公司/第三方 Agent 和服务器沙箱,沿用 Google 篇 的认证边界。本系统只做认证,业务授权交给项目。 文中的内部契约为本系统设计;本次没有开通或调用云资源。
1. 结论:同时校验运行方与用户上下文
阿里云 Agent Identity 提供工作负载身份、用户身份源接入、凭证保险箱,并与 RAM、STS 等能力衔接。它适合管理 Agent 如何以自己或用户的上下文获取目标资源凭证。产品说明
本系统应借鉴“工作负载身份与用户身份分开”的结构。既有 RAM 角色不能替代用户登录;用户登录也不能证明本地 Agent 属于公司。
2. 官方对象与边界
| 对象 | 产品用途 | 对接时要保留的区别 |
|---|---|---|
| Workload Identity | 云账号内具有 ARN 的工作负载身份 | 名称/ARN 不等于运行程序来源证明 |
| RAM 角色/临时凭证 | 调用云服务的身份与权限 | 不自动代表某个最终用户 |
| OIDC 身份提供商 | 验证用户 JWT 的信任配置 | 与出站凭证提供商不同 |
| WAT | 访问身份服务相关能力的不透明凭证 | 不能自行解码成通用 JWT |
| 凭证提供商 | 获取下游 OAuth、API Key 等凭证 | 下游资源仍有自己的授权规则 |
以上对象见 产品说明、工作负载管理 和 WAT 说明。本系统可独立实现身份输出,不必接管厂商的全部出站权限模块。
3. 架构
以下为本系统设计:

图:使用 imagegen 生成。蓝色表示厂商能力,青色表示本系统集成设计;凭证交换与检查顺序以下文为准。
最后一条由本系统实现,并不以项目能够解析阿里云 WAT 为前提。
4. 本地 Agent 的用户登录
本系统设计:本地 Agent 通过公共客户端、浏览器授权码和 PKCE 登录 Broker;Broker 可联合企业 OIDC。企业 IdP 不直接支持该模式时,使用支持联合登录的服务端代理。
用户映射按固定 issuer 和 subject 建立,不能用可更改的展示名。登录回调验证 state,ID Token 检查 nonce 和预期 audience;发往项目的 access token 有独立受众和生命周期。
第三方 Agent 只取得本系统允许发给它的会话凭证。云调用由可信服务端完成,不向桌面分发长期 AK/SK。公司客户端也遵循这一规则。应用来源默认为未验证;实例密钥证明另作事实记录。
5. 服务器沙箱与三种获取路径
官方入站说明明确:获取 WAT 的各条路径都有 OpenAPI 签名校验;JWT 路径还验证用户 JWT。因此“已有用户 JWT”不意味着无需运行身份的云调用凭证。入站认证
| 路径 | 使用前提 | 本系统处理 |
|---|---|---|
GetWorkloadAccessToken | 自主工作负载,无用户上下文 | user_id 为空 |
GetWorkloadAccessTokenForJWT | 用户 JWT 和合适的调用身份 | 优先用于用户参与场景 |
GetWorkloadAccessTokenForUserId | 可信调用方提供用户 ID | 只能由已验证会话派生 |
UserId 路径不替应用验证最终用户;托管运行时可以代为取得 WAT,但仍要确认它实际接收了哪种用户上下文。获取 WAT
本系统设计:不同环境和租户分开工作负载映射。沙箱拿不到身份凭证时返回认证失败,不能回退到共享管理员 AK。任务由谁创建应单独存储,不能据此填充执行时用户。
6. 配置、接口和适配契约
配置顺序:创建工作负载、关联适当 RAM 角色、创建 OIDC 身份提供商并关联工作负载、配置确需的 OAuth 回调、再配置出站凭证提供商。管理权限与运行权限分离。S2
IdP 配置需要元数据地址和允许的 audience。官方提供“允许所有受众”选项,本系统生产接入不采用它;应填写明确白名单,并保证发现文档按平台要求可达。身份提供商配置
以下是本系统适配配置,不是阿里云 API 请求:
json
{
"provider": "alibaba-agent-identity",
"region": "<selected-region>",
"workload_identity": "<workload-name>",
"ram_role": "<role-arn>",
"oidc_discovery": "https://id.example.com/.well-known/openid-configuration",
"allowed_user_audiences": ["<registered-oidc-client-id>"],
"user_binding_mode": "verified-jwt",
"accept_wat_at_project_api": false
}Broker 对项目输出内部用户、工作负载、认证方式、会话和目标受众。供应商原始凭证保留在需要它的调用边界,禁止作为普通业务上下文在日志和消息队列传播。
7. 认证与授权分工
本系统认证用户和运行方,项目执行资源操作权限检查。RAM 对身份服务 API 的调用权限仍需配置,因为这是服务自身的访问控制。
阿里云还提供 Agent 权限模块,官方描述了 AI 网关结合 WAT 的策略评估路径。权限模块 这不表示任意自建项目都能验证 WAT。若未来由项目选择该网关授权,应单独接入和验收;本轮不将业务策略迁入认证系统。
本系统撤销用户绑定后停止续签;另行处理云侧凭证关联及目标 OAuth 授权。工作负载删除、角色权限回收与已签发 Token 的即时失效不是同一件事,需联调测量。
8. 实施顺序与真实环境验收
先验证用户登录和临时 RAM 凭证,再验证 JWT+工作负载绑定;最后增加真正需要的出站凭证。以下均为未实测:
| 编号 | 验收动作 | 必须看到的结果 |
|---|---|---|
| L1 | 正确用户 JWT 配合合法运行身份 | 换取对应工作负载上下文 |
| L2 | 缺少云调用凭证,仅提交 JWT | 不被当作完整入站认证 |
| L3 | 相同 issuer、错误 audience | 按白名单拒绝 |
| L4 | 客户端自报其他 userId | 不能覆盖服务器用户映射 |
| L5 | 对自建项目提交 WAT | 不按通用 JWT 接受 |
| L6 | 回收角色/绑定、轮换凭证 | 记录失效窗口和审计关联 |
9. 详细设计:用户凭证与 RAM 运行身份如何汇合
场景:员工使用本地 Agent 查询内部客户资料,Agent 运行在服务器沙箱,另有可选的云服务调用。以下接口、数据表和运维约定是本系统设计;官方入站机制以 S3—S5 为依据。
9.1 先确定两种身份各从哪里来
| 身份事实 | 合法来源 | 服务端记录 | 不可信替代 |
|---|---|---|---|
| 当前用户 | 企业 IdP 验证结果 | 内部用户映射与登录会话 | 提示词中的姓名 |
| 云调用方 | RAM 角色临时凭证 | 角色引用及部署关联 | 请求 JSON 的 role 名称 |
| Agent 工作负载 | 预先配置的身份记录及调用关联 | workload 引用和环境 | 用户任意输入的工作负载名称 |
| 当前任务关联 | 可信调度服务发出的单次绑定 | 用户、任务、工作负载、有效期 | 永久保存的创建人 ID |
本系统应先验证两种身份,再建立关联;不能因为用户和工作负载都分别存在,就认定它们在当前任务中有关系。
9.2 用户参与的调用时序
- 用户通过浏览器登录 Broker。Broker 完成企业身份映射,创建受保护会话。
- 用户发起任务,调度端从当前会话取得用户 ID。任务记录保存用户关联的引用,不保存上游长期凭证。
- 沙箱获得受限的临时云凭证。服务端按登记关系选择 Workload Identity,不从模型生成的参数选择运行角色。
- 需要 Agent Identity 能力时,按 SDK 契约携带用户 JWT 并完成 OpenAPI 签名。两者分别用于用户验证和调用方验证。
- 返回的 WAT 只交给需要调用身份服务相关接口的组件。它不写入项目用户表,不尝试按本系统 JWT 密钥验签。
- 需要下游 OAuth/API Key 时通过对应凭证提供商获取;目标资源执行自身的权限规则。
- 查询自有客户项目时使用 Broker 的项目身份凭证。项目验证身份后检查客户可见范围;云侧换到 WAT 不代表客户数据已获准访问。
同一次任务可能用到两条凭证链,图中故意分开:云服务凭证获取链与内部项目认证链没有隐含的“WAT 自动转换”步骤。
9.3 自主任务与用户任务分流
本系统为每个任务记录 execution_mode。自主任务的用户字段为空,以工作负载主体运行;用户任务必须绑定有效会话或明确允许的持续委托。
不能先尝试 JWT 路径,失败后自动改用 UserId 路径,因为那会把强验证失败变成对字符串的信任。只有预先配置、由可信后端派生 userId 的集成才能走该路径,并在审计中标明证据类型。
9.4 数据模型与接口边界
| 本系统记录 | 核心键 | 必备状态 |
|---|---|---|
| 外部用户映射 | issuer + subject | 所属内部租户、停用状态 |
| 工作负载登记 | 账号 + 环境 + workload 引用 | 允许的运行身份、配置版本 |
| 用户任务绑定 | 随机 binding ID | 用户、任务、工作负载、受众、单次使用状态 |
| 项目会话 | 随机 session ID | 主体、调用者、到期时间、撤销版本 |
建议 POST /v1/task-bindings 只接受已认证用户入口;POST /v1/workload-sessions 验证沙箱后原子消费票据;POST /v1/project-credentials 根据服务器会话签发项目凭证。它们是本系统自定义接口,既不替代阿里云 SDK,也不扩展 WAT 用途。
票据不能被任务 A 拿给工作负载 B 使用。消费时在一次事务中比较工作负载、任务、受众和有效期,再标记已用;多副本同时兑换只允许一次成功。
9.5 配置分层与轮换
将 OIDC 元数据、预期受众、工作负载/角色关系放在管理员维护的配置中;将 AK/临时凭证、资源 Token 放在凭证设施中;将用户展示资料放在业务数据库中。三者不要混成一份发给 Agent 的配置文件。
IdP 密钥轮换时仅从已固定的发现/JWKS 地址更新;不能使用请求内附带的 URL 拉取公钥。RAM 角色调整后核查工作负载关联、运行时凭证刷新及旧会话窗口,避免把控制台配置成功当作所有副本即时生效。
9.6 失败矩阵与排查顺序
| 失败 | 应定位的层 | 本系统响应原则 |
|---|---|---|
| OpenAPI 签名无效 | 时间、区域、凭证来源或签名 | 不跳过签名,不换共享管理员 AK |
| JWT audience 错误 | IdP 应用和白名单 | 修改明确配置,不允许所有受众 |
| workload 未关联正确身份源 | 管理面关联 | 停止该路径并修复登记 |
| 用户绑定票据重放 | 调度与 Broker | 拒绝并记录原请求关联 |
| 资源方拒绝 | 目标 OAuth 或业务权限 | 保留拒绝,不由认证平台提权 |
| 项目凭证已撤销 | 本系统会话状态 | 不重新使用缓存续签 |
每次排障都保留平台请求 ID 与本系统 trace ID,但不保留原始 JWT、WAT、AK 或资源密钥。验收 L1—L6 应使用两个用户、两个工作负载和两个项目验证隔离,而非只用管理员单账号跑成功路径。