OpenClaw 集成 KMS 凭据管家

更新时间:
复制 MD 格式

在阿里云 ECS 上部署 OpenClaw 时,配置文件中通常包含明文 API Key ,存在安全风险。通过集成 KMS 凭据管家,您可以将明文 API Key 托管到 KMS ,并利用 ECS 实例 RAM 角色实现免 AccessKey 访问,确保 ECS 上不存在任何明文密钥。本文介绍如何将 OpenClaw 与 KMS 凭据管家集成。

方案背景

OpenClaw 是一款 AI 编程助手工具。在 ECS 上部署 OpenClaw 时,需要在配置文件中填写大模型的 API Key 。默认情况下, API Key 以明文形式存储在openclaw.json配置文件中,存在泄露风险。通过集成 KMS 凭据管家,可避免 API Key 泄露。

对比项

KMS 未托管 API Key

KMS 托管 API Key

存储安全性

静态明文:存储在 openclaw.json 或环境变量中。

加密存储:加密存储在 KMS ,受硬件安全模块( HSM )保护。

分发与传输

高风险:通过邮件、 IM 、共享文档传递明文,容易二次泄露。

身份授权:通过 RAM 角色授权,全程不传递明文 Key 。

运维响应速度

低效手动:需逐台登录服务器手动修改配置并重启服务

一键生效:在 KMS 控制台统一轮转,业务动态获取,零停机

可观测性/审计

盲区:无法获知谁在何时使用或导出了 API Key

全链审计: ActionTrail 实时记录每次解密调用的身份与来源

权限控制粒度

粗粒度:依赖 OS 文件权限,一旦被入侵则密钥全失

细粒度策略:基于 IP 、时间、身份的 API 级管控策略

泄露风险等级

高:配置文件误传仓库即意味着 API Key 永久作废

低:配置文件仅含凭据名称,源码即便公开也无法拿到 API Key

方案原理

方案的核心是利用 KMS 凭据管家、实例 RAM 角色和 OpenClaw 的外部插件命令(exec)获取凭据,构建一个安全、自动化的凭据获取链路。

  1. 配置阶段:

    • 将大模型的 API Key 作为凭据值,存储在 KMS 凭据管家中。

    • 创建一个 RAM 角色,并授予其访问该特定 KMS 凭据的最小权限。

    • 为运行 OpenClaw 的 ECS 实例授予该 RAM 角色。

  2. 运行阶段:

    • OpenClaw 启动时,根据openclaw.json配置文件中的secrets定义,执行指定的外部命令。

    • kmscli 使用 ECS 实例的 RAM 角色身份向 KMS 发起请求,无需额外配置 AccessKey 。

    • KMS 验证 RAM 角色的权限后,返回加密的凭据值。

    • KMS 客户端(由 CLI 集成)接收凭据值,并通过标准输出返回给 OpenClaw 进程。

    • OpenClaw 获取凭据值并用于后续对大模型服务的 API 调用。

实施步骤

步骤一:购买和启用 KMS 实例

  1. 登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 实例管理。

  2. 在实例管理页面单击创建实例,参考如下配置,选择要购买的 KMS 实例规格,单击立即购买。

    • 密钥管理类型:选择软件密钥管理或硬件密钥管理。

    • 凭据数量:根据业务需求规划,例如100。

  3. 购买完成后,返回实例管理页面,在软件密钥管理或硬件密钥管理页面页签,定位到目标 KMS 软件密钥管理实例,单击操作列的启用。

说明

更多内容,请参见购买和启用 KMS 实例。

步骤二:创建 KMS 凭据

在 KMS 凭据管家中创建一个凭据,用于存储大模型的 API Key 。

  1. 创建密钥

    1. 在顶部菜单栏选择地域后,在左侧导航栏单击资源 > 密钥管理。

    2. 在密钥管理页面,单击用户主密钥页签,实例ID选择软件密钥管理实例,单击创建密钥。

      • 密钥别名:为密钥设置一个易于识别的别名,例如cmk/openclaw/bailiansk。

      • 密钥类型:选择对称密钥。

    说明

    凭据创建完成后,请记录密钥 ARN ,在步骤三中创建 RAM 策略时需要使用,可以在密钥详情页查看这些信息。

  2. 创建凭据

    1. 在左侧导航栏单击资源 > 凭据管理

    2. 单击通用凭据页签,选择实例ID后,单击创建凭据,参考如下配置完成各项配置。

      • 凭据名称:输入secret/openclaw/bailiansk。

      • 设置凭据值:粘贴大模型的 API Key ,例如sk-xxxxxxxxxxxxxxxxxxxxxxxx。若何获取百炼 API key ,请参见获取与配置 API Key。

      • 加密主密钥:上一步创建的密钥cmk/openclaw/bailiansk。

    3. 单击确定。

    说明

    凭据创建完成后,请记录凭据的 ARN ,在步骤三中创建 RAM 策略时需要使用,可以在凭据详情页查看这些信息。

步骤三:创建 RAM 角色并授权

创建一个 RAM 角色,授予其获取 KMS 凭据的最小权限,后续将此角色绑定到 ECS 实例。

  1. 创建 RAM 权限策略。

    1. 使用阿里云账号(主账号)或拥有 RAM 管理员权限(AliyunRAMFullAccess)的 RAM 用户登录RAM 控制台。

    2. 在左侧导航栏,选择权限管理>权限策略。

    3. 单击创建权限策略,切换到JSON编辑模式,输入以下策略内容。

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": [
                      "kms:GetSecretValue"
                  ],
                  "Resource": "acs:kms:<region>:<account-id>:secret/secret/openclaw/bailiansk",/*凭据的 ARN*/
                  "Effect": "Allow"
              },
              {
                  "Action": [
                      "kms:Decrypt"
                  ],
                  "Resource": "acs:kms:<region>:<account-id>:key/key-hkk69a823******",/*密钥的 ARN*/
                  "Effect": "Allow"
              }
          ]
      }
      说明

      其中 <account-id> 为阿里云账号 ID ,可在控制台账号设置中获取。

      重要

      凭据的 ARN 和密钥的 ARN ,填写步骤二中创建的密钥和凭据详情页获取。

  2. 创建 RAM 角色并绑定权限策略。

    1. 在左侧导航栏,选择身份管理>角色。

    2. 单击创建角色,信任主体类型选择阿里云服务,信任主体名称选择云服务器 ECS。

    3. 在权限管理页签,选择上一步创建的权限策略并绑定到该角色。

步骤四:创建 ECS 实例并绑定 RAM 角色

  1. 购买一台 ECS 实例,具体操作,请参见快速购买实例。

  2. 为 ECS 实例绑定步骤三中创建的 RAM 角色。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 单击目标 ECS 实例 ID ,在实例详情页单击全部操作,选择实例设置 > 授予/收回RAM角色。

    3. 在对话框中,操作类型选择授予,然后选择步骤三创建的RAM 角色,单击确定。

说明

更多操作说明,请参见实例RAM角色。

步骤五:安装 kmscli 命令

kmscli 是一个轻量级命令行工具,使用 ECS 实例 RAM 角色作为默认凭证,从 KMS 凭据管家动态获取凭据值并输出到标准输出。 OpenClaw 启动时将调用此工具来获取敏感的 API Key ,从而避免在配置文件中存储明文。

  1. 下载二进制文件

    根据 ECS 操作系统架构,下载对应的 kmscli 二进制文件。以下以最常见的 Linux AMD64 架构为例:

    # 在本地机器或直接在 ECS 上执行
    curl -L -o kmscli-linux-amd64 "https://github.com/aliyun/alibabacloud-kms-cli/releases/latest/download/kmscli-linux-amd64"
    说明
    • 如果使用的是 ARM 架构(如倚天实例),请下载 kmscli-linux-arm64。

    • 如果使用的是 macOS ,请下载 kmscli-darwin-amd64 或 kmscli-darwin-arm64。

    • 完整版本列表请访问 GitHub Releases。

  2. 上传至目标目录

    将下载好的文件上传到 ECS 服务器的 ~/.openclaw/ 目录,并重新命名为 kmscli。

    • 本地下载后上传:

      # 在本地终端执行(请替换 user 和 ecs-ip )
      scp kmscli-linux-amd64 user@<ecs-ip>:~/.openclaw/kmscli
    • 在 ECS 上下载:

      # 在 ECS 终端执行
      cp kmscli-linux-amd64 ~/.openclaw/kmscli
  3. 赋予执行权限

    # 登录 ECS 后执行 设置权限( Linux/macOS )
    sudo chown $(id -u):$(id -g) ~/.openclaw/kmscli
    chmod +x ~/.openclaw/kmscli
  4. 验证权限

    执行以下命令确认文件已就位且具备执行权限:

    ls -l ~/.openclaw/kmscli
    # 预期输出应包含 "-rwxr-xr-x" 权限标识,例如:-rwxr-xr-x 1 admin admin ... kmscli

步骤六:在 ECS 上部署 OpenClaw 并修改配置

  1. 按照 OpenClaw 官方文档或OpenClaw 部署流程完成部署。

  2. 部署完成后,修改 OpenClaw 配置文件,将明文 API Key 替换为 KMS 凭据引用。

    1. 进入 OpenClaw 安装目录,备份原配置文件。

      cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak
    2. 编辑openclaw.json,添加secrets配置,并将apiKey字段的明文值替换为 Secret 引用。配置参考如下。

      • 添加 secrets 配置(在根节点下):

        {
          "secrets": {
            "providers": {
              "kms_bailian": {
                "source": "exec",
                "command": "/home/用户名/.openclaw/kmscli",
                "args": ["openclaw", "getsecret"],
                "jsonOnly": true
              }
            }
          },
          "models": { ... }
        }
      • 修改 apiKey 配置(在 models.providers 下):

        {
          "models": {
            "providers": {
              "dashscope": {
                "apiKey": {
                  "source": "exec",
                  "provider": "kms_bailian",
                  "id": "<secret-name>"
                }
              }
            }
          }
        }
  3. 配置审计和重新加载secrets配置。

    # 审计配置
    openclaw secrets audit --check
    # 重新加载配置
    openclaw secrets reload

结果验证

  • 配置验证:可用过以下命令查验命令:

    CONFIG_FILE="${OPENCLAW_DIR:-$HOME/.openclaw}/openclaw.json"
    
    # 验证 secrets 配置
    jq '.secrets.providers.kms_bailian' "$CONFIG_FILE"
    
    # 验证 apiKey 配置
    jq '.models.providers.dashscope.apiKey' "$CONFIG_FILE"
    
    # 检查服务进程
    ps aux | grep openclaw-gateway
  • 功能验证:通过 OpenClaw 正常对话,确认模型可以被正常调用。如果对话返回正常结果,说明 OpenClaw 已成功从 KMS 获取到 API Key 。

  • 安全验证:检查openclaw.json配置文件,确认其中不包含明文 API Key 。

    集成前

    明文 API Key 直接写在openclaw.json配置文件中。

    {
        "models": {
          "mode": "merge",
          "providers": {
            "bailian": {
              "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
              "apiKey":"sk-33777********",
              "api": "openai-completions"
            }
          }
        }
      }

    集成后

    API Key 替换为 Secret 引用,不再出现明文密钥。

    {
      "secrets": {
        "providers": {
          "kms_bailian": {
            "source": "exec",
            "command": "/home/admin/.openclaw/kmscli",
            "args": ["openclaw", "getsecret"],
            "jsonOnly": true
          }
        }
      },
      "models": {
        "providers": {
          "dashscope": {
            "apiKey": {
              "source": "exec",
              "provider": "kms_bailian",
              "id": "<secret-name>"
            }
          }
        }
      }
    }
  • 审计验证:登录操作审计控制台,查看操作事件。可以看到 ECS 通过挂载的 RAM 角色身份成功调用了GetSecretValue接口获取凭据,说明整个流程正常运行。

命令行工具

kmscli 提供以下命令:

# 普通模式(明文输出,可直接执行)
kmscli secret getsecret <secretName>
# OpenClaw 模式( JSON 格式输出,供 OpenClaw 调用,依赖 OpenClaw 配置)# 此命令需要 OpenClaw 通过 stdin 传入 JSON 请求,不可直接手动执行
kmscli openclaw getsecret

使用建议

  • ECS 与 KMS 建议同地域,使用 VPC 内网访问。

  • 默认使用 VPC 网络访问 KMS ,可通过环境变量指定公网访问:export ENDPOINT_TYPE=Public, 当 ECS 与 KMS 不在同一个地域时只能使用公网。

  • 修改配置前请备份 openclaw.json 为 .bak,如需恢复:cp ~/.openclaw/openclaw.json.bak ~/.openclaw/openclaw.json

成本与风险说明

  • 成本:本方案涉及的密钥管理服务 KMS为付费服务。成本主要包括 KMS 实例费、凭据存储费用以及 API 调用费用。具体价格请参考产品计费。

  • 风险: RAM 角色的权限配置是本方案安全性的关键。请务必遵循最小权限原则,仅为 RAM 角色授予对特定凭据的必要操作权限,过于宽泛的授权(例如"Resource": "*")将带来安全风险。

常见问题

  • 权限不足

    • 现象:chmod: changing permissions of 'kmscli': Operation not permitted

    • 解决方案:

      sudo chown $(id -u):$(id -g) ~/.openclaw/kmscli
      sudo chmod +x ~/.openclaw/kmscli
  • 配置未生效

    • 现象:端口未监听或进程未启动。

    • 解决方案:

      • 确认 JSON 配置格式正确,等待几秒后再次检查。

      • 查看日志排查错误:

        # 查看 openclaw 日志
        ls -la /tmp/openclaw/
        cat /tmp/openclaw/openclaw-*.log
  • ECS 未绑定 RAM 角色

    • 现象:日志中出现以下错误之一:

      • NoCredentialProviders / ECS metadata access failed

      • get role name failed: GET http://100.100.100.200/latest/meta-data/ram/security-credentials/ 404

      • unable to get credentials from any of the providers in the chain

    • 解决方案:参考步骤三:创建 RAM 角色并授权,完成角色授权绑定,绑定后等待 1-2 分钟使权限生效。

  • JSON 节点顺序问题

    • 现象:配置更新后 openclaw 无法启动。

    • 解决方案:

      1. 使用备份文件恢复:cp openclaw.json.bak openclaw.json。

      2. 重新配置时注意保持节点原有顺序。

      3. 不要删除或重建整个 provider 节点。