为什么 OpenClaw 需要 Agent ID Guard?
OpenClaw 核心挑战
挑战 | 问题描述 | 风险等级 |
密钥硬编码 | 大模型 API Key 明文存储在配置文件或环境变量中,泄露后无法溯源 | 高 |
权限无隔离 | 多 Agent 共享同一组凭证,无法实现"谁能访问什么"的细粒度管控 | 高 |
身份缺失 | 无法识别"哪个 Agent、代表谁、基于什么授权"发起请求,审计链路断裂 | 中 |
委托失控 | 用户通过 Agent 交互时,Agent 实际权限可能远超用户本身 | 高 |
运维负担 | 凭证轮换依赖人工,Agent 规模增长后难以持续 | 中 |
Agent ID Guard 核心能力
OpenClaw 痛点 | Agent ID Guard 解决方案 |
密钥硬编码 | 动态凭证分发:运行时按需获取短时效凭证,配置文件零明文 |
权限无隔离 | Agent 级身份隔离:每个 Agent 独立 Client ID + Profile,凭证按策略精确下发 |
身份缺失 | 全链路可审计:每次凭证获取关联 Agent ID / 用户 / 服务 / 时间 |
委托失控 | 最小特权委托:AT_obo Token Exchange 确保 Agent 权限 ≤ 用户权限 |
运维负担 | 自动化生命周期管理:凭证签发、轮换、吊销由平台自动完成 |
一句话总结:OpenClaw 负责"怎么调",Agent ID Guard 负责"谁能调、凭什么调、调了之后怎么追"。
方案技术架构与原理
核心组件与协作流程
组件 | 职责 | 在 OpenClaw 场景中的角色 |
OpenClaw Gateway | AI 网关,负责 Agent 编排与模型路由 | 通过 exec Secret Provider 触发凭证获取。 |
Alibaba-Cloud-IDaas CLI | 命令行工具,实现 OpenClaw Secret Provider 协议 | 桥接 OpenClaw 与 IDaaS 服务。可从Github获取。 |
IDaaS Agent ID Guard | 统一身份认证与凭证管理服务(内含 Authorization Server、PAM Server、KMS 等) | 验证 Agent 身份,动态分发 API Key / STS Token。 |
OpenClaw Secret 协议
Alibaba-Cloud-IDaaS CLI 实现了 OpenClaw Secret Provider exec 规范,通过 stdin/stdout 完成凭证交换:
请求(stdin):
{
"protocolVersion": 1,
"provider": "idaas",
"ids": ["model_key", "oss_key"]
}响应(stdout):
{
"protocolVersion": 1,
"values": { "model_key": "sk-xxxxxxxxxxxx" },
"errors": { "oss_key": { "message": "unauthorized" } }
}CLI 内部工作流:读取 stdin 请求 → 基于 Profile 认证获取 AT_pam → 逐个调用 Credential API 获取凭证 → 组装标准响应输出到 stdout。
OpenClaw目前支持按照上述协议工作动态获取凭据的场景清单如下:
场景分类 | 配置路径 | 说明 |
AI 模型 Provider |
| OpenAI / Claude / Gemini 等模型 API 密钥 |
语音服务 |
| 语音通话服务密钥 |
通讯渠道 - Telegram |
| Telegram Bot Token |
通讯渠道 - Slack |
| Slack App Token |
通讯渠道 - Discord |
| Discord Bot Token |
通讯渠道 - WhatsApp |
| WhatsApp Business API Token |
通讯渠道 - 其他 |
| 各类渠道认证 Token |
工具 - Web 搜索 |
| SerpAPI / Google 搜索等 API 密钥 |
插件凭证 |
| 第三方插件所需的 API 密钥 |
Webhook / Hooks |
| Webhook 回调认证 Token |
Auth Profile - Key |
| auth-profiles.json 中 api_key 模式的引用 |
Auth Profile - Token |
| auth-profiles.json 中 token 模式的引用 |
认证方式对比与选型指南
Alibaba-Cloud-IDaaS CLI 支持多种认证方式,适用于不同部署环境:
认证方式 | 是否需要密钥 | 适用部署环境 | 根信任原理 |
RAM Role | 否(AKless) | 阿里云 ECS、函数计算等支持绑 RAM Role | 通过阿里云平台等支持 RAM Role 的运行环境获取 StsToken 调用 IDaaS 的 OpenAPI 获取身份凭证 |
PKCS#7 工作负载身份 | 否(AKless) | 阿里云 ECS、轻量应用服务器、无影云电脑、AWS EC2 | ECS 实例身份文档由阿里云平台签发 PKCS#7 签名,不可伪造 |
Device Code Flow | 否(AKless) | 本地开发机 / 有浏览器环境 | 用户通过浏览器完成 IDaaS SSO 登录,人机交互验证身份 |
OIDC Token | 否(AKless) | 适合基于 K8S 的部署环境例如阿里云 ACK 等适合支持 OIDC 协议的 CI/CD 工具,例如 GitHub 等 | 通过服务运行环境的 OIDC 授权服务器获取对应的 OIDC Token 作为根信任 |
Private CA 证书 | 否(证书密钥) | 企业内网 / 专有云 | 企业自建 CA 签发客户端证书,证书链验证身份 |
Client Credentials (M2M) | 是(Client Secret) | 适合无根信任解决方案且部署环境可信的场景 | 应用预分配 Client ID + Client Secret,适用于受信环境 |
Agent 凭证隔离原理
多 Agent 场景下,每个 Agent 在 IDaaS 中注册为独立 Client,通过不同的 Profile 对应不同的 Client ID 和授权策略:
每个 Agent 只能获取其被授权的凭证,权限边界清晰,互不交叉。
PKCS#7 工作负载身份认证原理
在阿里云轻量服务器/无影部署场景下,CLI 使用 PKCS#7 实例身份实现零密钥认证:
核心优势:整个认证过程不需要任何 AK/SK 或 Client Secret,ECS 实例身份由阿里云平台签发,不可伪造。
配置步骤
为方便理解,本文档以阿里云 ECS 上部署的 openclaw 为例。对于通过轻量服务器、无影以及其它方式部署的 openclaw,配置大致相同。
IDaaS 配置
定位目标 EIAM 实例,单击操作列下的访问控制台。
在左侧导航栏,单击Agent ID 身份安全。
在Agent ID 身份安全页面,单击注册Agent身份。
单击 Agent 节点进入 Agent 配置流程。
记录生成的 Agent ID(如
app_ngfs**********************)在 Agent 配置页面单击右上角添加节点,添加大模型。
添加大模型节点服务,可以选择已有大模型 API Key 凭据或者添加一个新的凭据。
创建凭据时填写凭据名称、API Key 标识(如
default_model,此为 OpenClaw 中引用的 ID)、 API Key 值。
详细配置步骤可参考Agent 身份安全配置指导。
RAM 及 ECS 配置
RAM 中创建权限策略,使用脚本编辑方式,写入如下内容。其中 <InstanceId> 替换为 IDaaS EIAM 实例 ID(在IDaaS EIAM 控制台页面查看),<ApplicationId> 替换为前面步骤中注册的 Agent ID。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "eiam:GenerateOauthToken", "Resource": [ "acs:eiam:*:*:instance/<InstanceId>/application/<ApplicationId> " ] } ] }RAM 中创建角色,信任主体类型选择 云服务,信任主体名称选择云服务器 ECS ,并关上述权限策略。
在部署 OpenClaw 的 ECS 实例中授予 RAM 角色。
Alibaba-Cloud-IDaaS CLI 配置
安装 CLI 工具。可以在Github下载windows、mac、linux对应平台版本的 CLI 工具。
# 下载预编译二进制(以 Linux amd64 为例) wget https://github.com/aliyunidaas/alibaba-cloud-idaas/releases/download/v0.1.0-preview11/alibaba-cloud-idaas-linux-0.1.0-preview11-amd64.tgz tar -zxvf alibaba-cloud-idaas-linux-0.1.0-preview11-amd64.tgz chmod +x alibaba-cloud-idaas # 如果 openclaw 的用户不是当前用户,需要修改 alibaba-cloud-idaas 的所有者,本文以 root 用户为例 chown root alibaba-cloud-idaas # 将二进制文件移动到 PATH 目录下 mv alibaba-cloud-idaas /usr/local/bin/alibaba-cloud-idaas配置 CLI Profile。创建配置文件
~/.cloud_idaas/idaas-cli.json,其中 profile 子对象的名称(即openclaw-agent)在 openclaw 集成中会用到。{ "version": "1", "current_profile": "openclaw-agent", "profile": { "openclaw-agent": { "agent": { "instance_id": "idaas_wrws**********************", "developer_api_endpoint": "eiam-developerapi.cn-hangzhou.aliyuncs.com", "access_token_provider": { "open_api": { "instance_id": "idaas_wrws**********************", // 和上面的 instance_id 保持一致。 "application_id": "app_ngf****", "audience": "urn:cloud:idaas:pam", "scope_values": [".all"], "type": "ecs_ram_role", "role_arn": "acs:ram::***:role/****" } } } } } }配置字段说明:
字段
说明
获取方式
instance_idIDaaS 实例 ID
在IDaaS EIAM 控制台页面的IDaaS实例ID/描述列下查看。
developer_api_endpointDeveloper API 地域端点
根据实例所在地域填写,如
eiam-developerapi.cn-hangzhou.aliyuncs.com。可从云身份服务 (IDaaS EIAM)-阿里云OpenAPI开发者门户中获取。application_idAgent ID
Agent 身份安全对应的 Agent ID。
role_arnECS 绑定的 RAM 角色的 ARN
阿里云 RAM 控制台中对应角色的详情页面获取。
验证 CLI 连通性。
# 测试 openclaw-secret 子命令 echo '{ "protocolVersion": 1, "provider": "idaas", "ids": ["default_model"] }' \ | /usr/local/bin/alibaba-cloud-idaas openclaw-secret -p openclaw-agent # 预期输出 { "protocolVersion": 1, "values": { "default_model": "sk-aac*****************************" } }
OpenClaw 配置
在 OpenClaw 配置文件(
~/.openclaw/openclaw.json)中修改 model 中的 apiKey。如果是刚安装好的 OpenClaw,正常配置 OpenClaw 模型后,再进行配置文件修改。{ ... "models": { "mode": "merge", "providers": { "qwen": { "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1", "apiKey": "sk_*****", // 需要修改的字段,其余字段保持不变 // 修改后的 apiKey "apiKey": { "source": "exec", "provider": "idaas", "id": "default_model" }, "api": "openai-completions", "models": [ { "id": "qwen3.5-plus", "name": "qwen3.5-plus (Custom Provider)", "reasoning": false, "input": [ "text" ], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 16000, "maxTokens": 4096 } ] } } } }在 OpenClaw 配置文件(
~/.openclaw/openclaw.json)中添加 secrets 配置。{ "secrets": { "providers": { "idaas": { "source": "exec", "command": "/usr/local/bin/alibaba-cloud-idaas", "args": ["openclaw-secret", "-p", "openclaw-agent"], // 最后一个参数为 CLI 工具中的 profile 子对象名称 "passEnv": ["HOME"], "jsonOnly": true } } } }(可选)如果存在多个 Agent (配置步骤参考IDaaS 配置),可以配置多 Agent 凭证隔离,本文以 PKCS7 认证为例。需在 Alibaba-Cloud-IDaaS CLI Profile 和 OpenClaw 配置文件中分别添加多个配置。
参考IDaaS 配置,注册多个 Agent 身份。
Alibaba-Cloud-IDaaS CLI 配置(
~/.cloud_idaas/idaas-cli.json)中新增 Profile:{ "version": "1", "profile": { "researcher-agent": { "agent": { "instance_id": "idaas_wrws****", "developer_api_endpoint": "eiam-developerapi.cn-hangzhou.aliyuncs.com", "access_token_provider": { "client_credentials": { "token_endpoint": "https://zi******.aliyunidaas.com/api/v2/iauths_system/oauth2/token", "client_id": "app_res**********************", "scope": "urn:cloud:idaas:pam|.all", "application_federated_credential_name": "alibabacloudp7", "client_assertion_pkcs7": { "provider": "alibaba_cloud", "alibaba_cloud_mode": "normal", "alibaba_cloud_idaas_instance_id": "idaas_wrws****" } } } } }, "writer-agent": { "agent": { "instance_id": "idaas_wrws****", "developer_api_endpoint": "eiam-developerapi.cn-hangzhou.aliyuncs.com", "access_token_provider": { "client_credentials": { "token_endpoint": "https://zi******.aliyunidaas.com/api/v2/iauths_system/oauth2/token", "client_id": "app_wrt**********************", "scope": "urn:cloud:idaas:pam|.all", "application_federated_credential_name": "alibabacloudp7", "client_assertion_pkcs7": { "provider": "alibaba_cloud", "alibaba_cloud_mode": "normal", "alibaba_cloud_idaas_instance_id": "idaas_wrws****" } } } } } } }配置字段说明:
字段
说明
获取方式
instance_idIDaaS 实例 ID
在IDaaS EIAM 控制台页面的IDaaS实例ID/描述列下查看。
developer_api_endpointDeveloper API 地域端点
根据实例所在地域填写,如
eiam-developerapi.cn-hangzhou.aliyuncs.com。可从云身份服务 (IDaaS EIAM)-阿里云OpenAPI开发者门户中获取。token_endpointToken 获取地址
Agent 身份安全对应的 Agent 中生成SDK配置后查看。
client_idAgent 认证使用的客户端 ID
Agent 身份安全对应的 Agent 中生成SDK配置后查看。
application_idAgent ID
Agent 身份安全对应的 Agent ID。
alibaba_cloud_idaas_instance_idIDaaS 实例 ID
同
instance_id。OpenClaw 配置添加多个 Provider,args 中的最后一个参数注意替换成对应的 Alibaba-Cloud-IDaaS CLI Profile 中对应的子对象名称:
{ "secrets": { "providers": { "researcher": { "source": "exec", "command": "/usr/local/bin/alibaba-cloud-idaas", "args": ["openclaw-secret", "-p", "researcher-agent"], "passEnv": ["HOME"], "jsonOnly": true }, "writer": { "source": "exec", "command": "/usr/local/bin/alibaba-cloud-idaas", "args": ["openclaw-secret", "-p", "writer-agent"], "passEnv": ["HOME"], "jsonOnly": true } } } }
启动 OpenClaw 进行验证。
# 重启 OpenClaw Gateway openclaw gateway restart # 正常对话验证模型是否可正常使用 opeclaw tui
常见问题
问题 | 原因 | 解决方法 |
提示 | credential Identifier 与控制台配置不匹配 | 检查 OpenClaw 配置中的 id 字段是否与 IDaaS 凭据标识符一致。 |
提示 | ECS 实例未开启实例身份服务 | 确认 ECS 实例支持实例身份,检查 metadata service 可访问性。 |
提示 | 应用未被授权访问对应凭据 | 在 IDaaS 控制台检查凭据授权策略。 |
提示 | Access Token 过期且未自动刷新 | CLI 内置了缓存与刷新机制,请检查网络连通性。 |
多 Agent 获取到相同凭证 | Profile 配置的 Client ID 相同 | 确保每个 Agent 使用独立的 Client ID 和 Profile。 |