在阿里云 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)获取凭据,构建一个安全、自动化的凭据获取链路。
-
配置阶段:
-
将大模型的 API Key 作为凭据值,存储在 KMS 凭据管家中。
-
创建一个 RAM 角色,并授予其访问该特定 KMS 凭据的最小权限。
-
为运行 OpenClaw 的 ECS 实例授予该 RAM 角色。
-
-
运行阶段:
-
OpenClaw 启动时,根据
openclaw.json配置文件中的secrets定义,执行指定的外部命令。 -
kmscli 使用 ECS 实例的 RAM 角色身份向 KMS 发起请求,无需额外配置 AccessKey 。
-
KMS 验证 RAM 角色的权限后,返回加密的凭据值。
-
KMS 客户端(由 CLI 集成)接收凭据值,并通过标准输出返回给 OpenClaw 进程。
-
OpenClaw 获取凭据值并用于后续对大模型服务的 API 调用。
-
实施步骤
步骤一:购买和启用 KMS 实例
登录密钥管理服务控制台,在顶部菜单栏选择地域后,在左侧导航栏单击。
-
在实例管理页面单击创建实例,参考如下配置,选择要购买的 KMS 实例规格,单击立即购买。
-
密钥管理类型:选择软件密钥管理或硬件密钥管理。
-
凭据数量:根据业务需求规划,例如
100。
-
-
购买完成后,返回实例管理页面,在软件密钥管理或硬件密钥管理页面页签,定位到目标 KMS 软件密钥管理实例,单击操作列的启用。
更多内容,请参见购买和启用 KMS 实例。
步骤二:创建 KMS 凭据
在 KMS 凭据管家中创建一个凭据,用于存储大模型的 API Key 。
-
创建密钥
-
在顶部菜单栏选择地域后,在左侧导航栏单击。
-
在密钥管理页面,单击用户主密钥页签,实例ID选择软件密钥管理实例,单击创建密钥。
-
密钥别名:为密钥设置一个易于识别的别名,例如
cmk/openclaw/bailiansk。 -
密钥类型:选择对称密钥。
-
说明凭据创建完成后,请记录密钥 ARN ,在步骤三中创建 RAM 策略时需要使用,可以在密钥详情页查看这些信息。
-
-
创建凭据
-
在左侧导航栏单击
-
单击通用凭据页签,选择实例ID后,单击创建凭据,参考如下配置完成各项配置。
-
凭据名称:输入
secret/openclaw/bailiansk。 -
设置凭据值:粘贴大模型的 API Key ,例如
sk-xxxxxxxxxxxxxxxxxxxxxxxx。若何获取百炼 API key ,请参见获取与配置 API Key。 -
加密主密钥:上一步创建的密钥
cmk/openclaw/bailiansk。
-
-
单击确定。
说明凭据创建完成后,请记录凭据的 ARN ,在步骤三中创建 RAM 策略时需要使用,可以在凭据详情页查看这些信息。
-
步骤三:创建 RAM 角色并授权
创建一个 RAM 角色,授予其获取 KMS 凭据的最小权限,后续将此角色绑定到 ECS 实例。
-
创建 RAM 权限策略。
-
使用阿里云账号(主账号)或拥有 RAM 管理员权限(
AliyunRAMFullAccess)的 RAM 用户登录RAM 控制台。 -
在左侧导航栏,选择权限管理>权限策略。
-
单击创建权限策略,切换到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 ,填写步骤二中创建的密钥和凭据详情页获取。
-
-
创建 RAM 角色并绑定权限策略。
-
在左侧导航栏,选择身份管理>角色。
-
单击创建角色,信任主体类型选择阿里云服务,信任主体名称选择云服务器 ECS。
-
在权限管理页签,选择上一步创建的权限策略并绑定到该角色。
-
步骤四:创建 ECS 实例并绑定 RAM 角色
-
购买一台 ECS 实例,具体操作,请参见快速购买实例。
-
为 ECS 实例绑定步骤三中创建的 RAM 角色。
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
-
单击目标 ECS 实例 ID ,在实例详情页单击全部操作,选择。
-
在对话框中,操作类型选择授予,然后选择步骤三创建的RAM 角色,单击确定。
更多操作说明,请参见实例RAM角色。
步骤五:安装 kmscli 命令
kmscli 是一个轻量级命令行工具,使用 ECS 实例 RAM 角色作为默认凭证,从 KMS 凭据管家动态获取凭据值并输出到标准输出。 OpenClaw 启动时将调用此工具来获取敏感的 API Key ,从而避免在配置文件中存储明文。
-
下载二进制文件
根据 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。
-
-
上传至目标目录
将下载好的文件上传到 ECS 服务器的
~/.openclaw/目录,并重新命名为kmscli。-
本地下载后上传:
# 在本地终端执行(请替换 user 和 ecs-ip ) scp kmscli-linux-amd64 user@<ecs-ip>:~/.openclaw/kmscli -
在 ECS 上下载:
# 在 ECS 终端执行 cp kmscli-linux-amd64 ~/.openclaw/kmscli
-
-
赋予执行权限
# 登录 ECS 后执行 设置权限( Linux/macOS ) sudo chown $(id -u):$(id -g) ~/.openclaw/kmscli chmod +x ~/.openclaw/kmscli -
验证权限
执行以下命令确认文件已就位且具备执行权限:
ls -l ~/.openclaw/kmscli # 预期输出应包含 "-rwxr-xr-x" 权限标识,例如:-rwxr-xr-x 1 admin admin ... kmscli
步骤六:在 ECS 上部署 OpenClaw 并修改配置
-
按照 OpenClaw 官方文档或OpenClaw 部署流程完成部署。
-
部署完成后,修改 OpenClaw 配置文件,将明文 API Key 替换为 KMS 凭据引用。
-
进入 OpenClaw 安装目录,备份原配置文件。
cp ~/.openclaw/openclaw.json ~/.openclaw/openclaw.json.bak -
编辑
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>" } } } } }
-
-
-
配置审计和重新加载
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 无法启动。
-
解决方案:
-
使用备份文件恢复:
cp openclaw.json.bak openclaw.json。 -
重新配置时注意保持节点原有顺序。
-
不要删除或重建整个 provider 节点。
-
-