API Key、Bot Token、数据库密码——这些密钥如果泄露, 可能导致账单暴增或数据泄露。本文讲清楚 OpenClaw 的密钥管理最佳实践。
三种存储方式对比
| 方式 | 安全性 | 便利性 | 适合场景 |
|---|---|---|---|
| 配置文件明文 | ❌ 最差 | ✅ 最简单 | 本地测试(不推荐生产) |
| 环境变量 | ⭐⭐⭐ | ⭐⭐⭐ | 服务器部署推荐 |
| Secrets 命令 | ⭐⭐⭐⭐ | ⭐⭐⭐ | 标准生产方案 |
| 系统 Keychain | ⭐⭐⭐⭐⭐ | ⭐⭐ | 本地个人使用 |
| HashiCorp Vault | ⭐⭐⭐⭐⭐ | ⭐ | 企业级多用户 |
openclaw secrets 命令
bash
# 存储密钥
openclaw secrets set ANTHROPIC_API_KEY sk-ant-xxxxx
openclaw secrets set TELEGRAM_BOT_TOKEN 1234567890:xxx
openclaw secrets set SLACK_BOT_TOKEN xoxb-xxx
# 查看所有密钥(仅显示名称,不显示值)
openclaw secrets list
# 删除密钥
openclaw secrets delete ANTHROPIC_API_KEY
# 导出密钥(谨慎使用)
openclaw secrets export > secrets-backup.env密钥存储在加密的本地数据库(~/.openclaw/secrets.db),
与配置文件分离,不会意外 git commit。
在配置文件中引用密钥
json
{
"providers": {
"anthropic": {
"apiKey": "${ANTHROPIC_API_KEY}"
}
},
"channels": {
"telegram": {
"botToken": "${TELEGRAM_BOT_TOKEN}"
},
"slack": {
"botToken": "${SLACK_BOT_TOKEN}",
"signingSecret": "${SLACK_SIGNING_SECRET}"
}
}
}${VAR_NAME} 语法支持:
openclaw secrets存储的密钥- 系统环境变量
.env文件中的变量(Gateway 启动时自动加载)
环境变量方式(服务器部署推荐)
bash
# 创建 .env 文件(不要提交到 git!)
cat > ~/.openclaw/.env << 'EOF'
ANTHROPIC_API_KEY=sk-ant-xxxxx
TELEGRAM_BOT_TOKEN=1234567890:xxx
SLACK_BOT_TOKEN=xoxb-xxx
SLACK_SIGNING_SECRET=xxx
GATEWAY_AUTH_TOKEN=your-strong-token
EOF
chmod 600 ~/.openclaw/.env在 .gitignore 中排除:
# .gitignore
.env
*.env
~/.openclaw/.env
macOS Keychain 集成
在 macOS 上,密钥可以存入系统 Keychain(更安全):
bash
# 存入 Keychain
security add-generic-password -a "openclaw" -s "ANTHROPIC_API_KEY" -w "sk-ant-xxxxx"
# 从 Keychain 读取并设置
security find-generic-password -a "openclaw" -s "ANTHROPIC_API_KEY" -w | openclaw secrets set ANTHROPIC_API_KEY -1Password CLI 集成
bash
# 安装 1Password CLI
brew install 1password-cli
# 从 1Password 读取并设置到 OpenClaw
op read "op://Private/Anthropic/api-key" | openclaw secrets set ANTHROPIC_API_KEY -
# 批量导入(启动脚本中)
op run --env-file="op.env" -- openclaw gateway startop.env 文件:
ANTHROPIC_API_KEY=op://Private/Anthropic/api-key
TELEGRAM_BOT_TOKEN=op://Work/Telegram Bot/token
HashiCorp Vault 集成(企业级)
bash
# 从 Vault 读取
export VAULT_ADDR=https://vault.company.com
vault kv get -field=api_key secret/openclaw/anthropic | openclaw secrets set ANTHROPIC_API_KEY -
# 或在启动时直接从 Vault 注入
vault kv get -format=json secret/openclaw/all | jq -r '.data.data | to_entries[] | "\(.key)=\(.value)"' > /tmp/openclaw-secrets.env && openclaw gateway start --env-file /tmp/openclaw-secrets.env && rm /tmp/openclaw-secrets.env密钥轮换流程
当 API Key 需要更换时(定期轮换或怀疑泄露):
1. 在服务商生成新 Key
Anthropic Console → API Keys → Create new key
2. 更新 OpenClaw 密钥(不停机)
openclaw secrets set ANTHROPIC_API_KEY sk-ant-new-key
3. 验证新 Key 生效
openclaw doctor
openclaw models test anthropic/claude-haiku-4-5
4. 在服务商吊销旧 Key
Anthropic Console → 找到旧 Key → Revoke
整个过程无需重启 Gateway,热更新生效。
防泄露检查
bash
# 检查 git 历史中是否含有密钥
git log --all -p | grep -i "sk-ant\|bot_token\|api_key"
# 使用 git-secrets 工具防止意外提交
brew install git-secrets
git secrets --install
git secrets --register-aws # 也会匹配 API Key 格式
# 检查配置文件是否有明文密钥
openclaw config show | grep -E "sk-ant|xoxb-|oauth"
# 如果看到明文密钥,立即迁移到 secrets 命令最小权限原则
每个渠道用独立的 Token,而非共享:
❌ 错误:多个服务共用同一个 Anthropic API Key
✅ 正确:OpenClaw 专用一个 API Key
❌ 错误:Telegram Bot 用 Admin Token(有所有权限)
✅ 正确:创建 Bot 专用账号,只授予消息权限
这样当某个 Token 泄露时:
- 只需吊销那一个 Token
- 不影响其他服务
- 泄露范围可控
来源:OpenClaw 官方文档 - docs.openclaw.ai/gateway/secrets