OpenClaw无明文凭证解决方案

更新时间:
复制为 MD 格式

为什么 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 负责"谁能调、凭什么调、调了之后怎么追"。

方案技术架构与原理

核心组件与协作流程

image

组件

职责

在 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

models.providers.*.apiKey

OpenAI / Claude / Gemini 等模型 API 密钥

语音服务

talk.apiKey

语音通话服务密钥

通讯渠道 - Telegram

channels.telegram.botToken

Telegram Bot Token

通讯渠道 - Slack

channels.slack.token

Slack App Token

通讯渠道 - Discord

channels.discord.token

Discord Bot Token

通讯渠道 - WhatsApp

channels.whatsapp.businessToken

WhatsApp Business API Token

通讯渠道 - 其他

channels.*.token / channels.*.botToken

各类渠道认证 Token

工具 - Web 搜索

tools.web.search.apiKey

SerpAPI / Google 搜索等 API 密钥

插件凭证

plugins.entries.*.apiKey

第三方插件所需的 API 密钥

Webhook / Hooks

hooks.token

Webhook 回调认证 Token

Auth Profile - Key

profiles.*.keyRef

auth-profiles.json 中 api_key 模式的引用

Auth Profile - Token

profiles.*.tokenRef

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 和授权策略:

image

每个 Agent 只能获取其被授权的凭证,权限边界清晰,互不交叉。

PKCS#7 工作负载身份认证原理

在阿里云轻量服务器/无影部署场景下,CLI 使用 PKCS#7 实例身份实现零密钥认证:

image

核心优势:整个认证过程不需要任何 AK/SK 或 Client Secret,ECS 实例身份由阿里云平台签发,不可伪造。

配置步骤

为方便理解,本文档以阿里云 ECS 上部署的 openclaw 为例。对于通过轻量服务器、无影以及其它方式部署的 openclaw,配置大致相同。

IDaaS 配置

  1. 登录IDaaS EIAM 控制台

  2. 定位目标 EIAM 实例,单击操作列下的访问控制台

  3. 在左侧导航栏,单击Agent ID 身份安全

  4. Agent ID 身份安全页面,单击注册Agent身份

  5. 单击 Agent 节点进入 Agent 配置流程。

  6. 记录生成的 Agent ID(如 app_ngfs**********************

  7. 在 Agent 配置页面单击右上角添加节点,添加大模型

  8. 添加大模型节点服务,可以选择已有大模型 API Key 凭据或者添加一个新的凭据。

  9. 创建凭据时填写凭据名称、API Key 标识(如 default_model,此为 OpenClaw 中引用的 ID)、 API Key 值。

详细配置步骤可参考Agent 身份安全配置指导

RAM 及 ECS 配置

  1. 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> "
          ]
        }
      ]
    }
  2. RAM 中创建角色信任主体类型选择 云服务信任主体名称选择云服务器 ECS ,并关上述权限策略

  3. 在部署 OpenClaw 的 ECS 实例中授予 RAM 角色

Alibaba-Cloud-IDaaS CLI 配置

  1. 安装 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
  2. 配置 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_id

    IDaaS 实例 ID

    IDaaS EIAM 控制台页面的IDaaS实例ID/描述列下查看。

    developer_api_endpoint

    Developer API 地域端点

    根据实例所在地域填写,如 eiam-developerapi.cn-hangzhou.aliyuncs.com。可从云身份服务 (IDaaS EIAM)-阿里云OpenAPI开发者门户中获取。

    application_id

    Agent ID

    Agent 身份安全对应的 Agent ID。

    role_arn

    ECS 绑定的 RAM 角色的 ARN

    阿里云 RAM 控制台中对应角色的详情页面获取。

  3. 验证 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 配置

  1. 在 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
              }
            ]
          }
        }
      }
    }
  2. 在 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
          }
        }
      }
    }
  3. (可选)如果存在多个 Agent (配置步骤参考IDaaS 配置),可以配置多 Agent 凭证隔离,本文以 PKCS7 认证为例。需在 Alibaba-Cloud-IDaaS CLI Profile 和 OpenClaw 配置文件中分别添加多个配置。

    1. 参考IDaaS 配置,注册多个 Agent 身份。

    2. 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_id

      IDaaS 实例 ID

      IDaaS EIAM 控制台页面的IDaaS实例ID/描述列下查看。

      developer_api_endpoint

      Developer API 地域端点

      根据实例所在地域填写,如 eiam-developerapi.cn-hangzhou.aliyuncs.com。可从云身份服务 (IDaaS EIAM)-阿里云OpenAPI开发者门户中获取。

      token_endpoint

      Token 获取地址

      Agent 身份安全对应的 Agent 中生成SDK配置后查看。

      client_id

      Agent 认证使用的客户端 ID

      Agent 身份安全对应的 Agent 中生成SDK配置后查看。

      application_id

      Agent ID

      Agent 身份安全对应的 Agent ID。

      alibaba_cloud_idaas_instance_id

      IDaaS 实例 ID

      instance_id

    3. 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
            }
          }
        }
      }
  4. 启动 OpenClaw 进行验证。

    # 重启 OpenClaw Gateway
    openclaw gateway restart
    
    # 正常对话验证模型是否可正常使用
    opeclaw tui

常见问题

问题

原因

解决方法

提示credential not found

credential Identifier 与控制台配置不匹配

检查 OpenClaw 配置中的 id 字段是否与 IDaaS 凭据标识符一致。

提示PKCS#7 signature verification failed

ECS 实例未开启实例身份服务

确认 ECS 实例支持实例身份,检查 metadata service 可访问性。

提示client_id unauthorized

应用未被授权访问对应凭据

在 IDaaS 控制台检查凭据授权策略。

提示token expired

Access Token 过期且未自动刷新

CLI 内置了缓存与刷新机制,请检查网络连通性。

多 Agent 获取到相同凭证

Profile 配置的 Client ID 相同

确保每个 Agent 使用独立的 Client ID 和 Profile。