为什么需要加密 Secrets
风险分析
AI Agent 使用大量敏感凭证:
- API Keys:每个 Provider 一个
- OAuth Tokens:定期过期需更新
- 数据库密码:访问核心数据
- 服务账户:AWS/GCP 完整权限
明文存储的风险:
- 配置文件可能提交到 Git
- 日志文件可能被查看
- 内存转储可能泄漏
- 备份可能落入第三方
2026 的新威胁
ClawHavoc 事件(2026 年 1 月):
- 341 个恶意 Skill
- 专门窃取凭证
- 造成实际损失
Prompt Injection:
- 恶意网页诱导 Agent 读取凭证
- 通过工具调用外传
- 难以检测
Secrets 管理层级
Level 1: 明文配置(最不安全)❌
Level 2: 环境变量 + .env
Level 3: 本地加密文件
Level 4: 操作系统 Keychain
Level 5: 1Password CLI / Bitwarden
Level 6: HashiCorp Vault
Level 7: 云厂商 Secrets Manager(最安全)
根据部署场景选择合适层级。
方案 1:环境变量(Level 2)
基础配置
# .env
OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
OpenClaw 配置
providers:
openai:
apiKey: "$OPENAI_API_KEY"
安全建议
.env加入.gitignore- 不同环境不同
.env - 使用
.env.example作为模板 - 权限设置
600(只有所有者可读)
chmod 600 .env
方案 2:本地加密文件(Level 3)
初始化
openclaw secrets init
# 提示设置主密码
添加 Secret
openclaw secrets set OPENAI_API_KEY
# 粘贴 API Key
openclaw secrets set ANTHROPIC_API_KEY
使用
providers:
openai:
apiKey: "secret://OPENAI_API_KEY"
主密码管理
启动时提供主密码:
# 方式 1:交互式
openclaw gateway
# 提示输入主密码
# 方式 2:环境变量
export OPENCLAW_MASTER_PASSWORD=xxx
openclaw gateway
# 方式 3:命令行
openclaw gateway --master-password-file /path/to/password
生产环境:从 systemd 或 Vault 注入主密码。
方案 3:macOS Keychain(Level 4)
配置
secrets:
backend: "macos-keychain"
keychain: "openclaw"
添加凭证
openclaw secrets set OPENAI_API_KEY \
--backend macos-keychain
使用
providers:
openai:
apiKey: "keychain://OPENAI_API_KEY"
macOS 首次访问提示用户授权(Touch ID / 密码)。
限制
- 仅 macOS
- 单用户
- 无团队共享
方案 4:1Password CLI(Level 5)
前置要求
brew install 1password-cli
op signin
配置
secrets:
backend: "1password"
vault: "AI Agents" # 使用专用 vault
引用凭证
providers:
openai:
apiKey: "op://AI Agents/OpenAI Production/credential"
优势
- 跨平台(macOS、Windows、Linux)
- 团队共享(通过 1Password 团队)
- 多因素认证
- 审计日志
团队协作
# 每个团队成员引用相同路径
providers:
openai:
apiKey: "op://Team/OpenAI Prod/credential"
离职时从 vault 移除即可。
方案 5:HashiCorp Vault(Level 6)
适用场景
企业级部署,需要:
- 集中式 Secrets 管理
- 动态凭证(短期 Token)
- 精细化权限
- 完整审计
部署 Vault
# 开发模式
vault server -dev
# 生产模式(集群)
vault operator init
OpenClaw 配置
secrets:
backend: "vault"
address: "https://vault.example.com:8200"
auth:
method: "approle" # 或 kubernetes、aws、token
roleId: "$VAULT_ROLE_ID"
secretId: "$VAULT_SECRET_ID"
path: "secret/data/openclaw"
引用凭证
providers:
openai:
apiKey: "vault://secret/data/openclaw/openai"
动态凭证
Vault 可以生成临时凭证:
providers:
# 每次获取短期 Token
aws:
accessKey: "vault://aws/creds/openclaw-role"
ttl: "1h"
1 小时后自动失效,降低泄漏影响。
审计
vault audit enable file file_path=/var/log/vault.log
所有 Secrets 访问都记录。
方案 6:AWS Secrets Manager(Level 7)
适用场景
- AWS 部署
- 需要自动轮换
- 合规要求高
配置
secrets:
backend: "aws"
region: "us-east-1"
# 使用 IAM 角色认证,无需凭证
引用
providers:
openai:
apiKey: "aws-secret://openclaw/prod/openai"
自动轮换
aws secretsmanager rotate-secret \
--secret-id openclaw/prod/openai \
--rotation-lambda-arn arn:aws:lambda:... \
--rotation-rules AutomaticallyAfterDays=30
每 30 天自动生成新 API Key 并更新应用。
方案 7:GCP Secret Manager(Level 7)
配置
secrets:
backend: "gcp"
project: "my-project"
使用
providers:
google:
apiKey: "gcp-secret://openclaw-google-key/latest"
版本管理
# 创建新版本
gcloud secrets versions add openclaw-google-key \
--data-file=/path/to/new-key.txt
# 指定版本
apiKey: "gcp-secret://openclaw-google-key/3"
方案 8:Azure Key Vault(Level 7)
配置
secrets:
backend: "azure"
vaultUrl: "https://openclaw-vault.vault.azure.net"
auth:
method: "managed-identity" # 或 service-principal
使用
providers:
azure:
apiKey: "azure-secret://openai-key"
多后端组合
实际部署可能多后端混用:
secrets:
primary:
backend: "vault"
address: "https://vault.example.com:8200"
fallback:
backend: "aws"
region: "us-east-1"
# 开发环境降级
development:
backend: "env"
providers:
openai:
# 尝试顺序:Vault → AWS → 环境变量
apiKey: "$OPENAI_API_KEY"
Agent 层面保护
Secrets Masking
secrets:
masking:
enabled: true
# Agent 永远看不到 Secret 明文
# 工具代为使用
访问审计
secrets:
audit:
enabled: true
logFile: "/var/log/openclaw-secrets.log"
logLevel: "all" # all | writes | suspicious
所有 Secret 访问都记录。
Agent 请求凭证
用户:查询数据库
Agent:[调用 database 工具]
[工具内部使用 DB_PASSWORD]
[Agent 不知道密码]
查询完成:...
即使 Agent 被 prompt injection 攻击,也无法泄漏凭证。
轮换策略
定期轮换
secrets:
rotation:
schedule: "0 2 1 * *" # 每月 1 号凌晨 2 点
autoRotate: ["aws", "gcp"] # 这些自动轮换
紧急轮换
凭证泄漏时:
# 撤销老凭证
openclaw secrets revoke OPENAI_API_KEY
# 生成新凭证
openclaw secrets rotate OPENAI_API_KEY
# Provider 控制台也作废老 Key
成本考虑
| 方案 | 成本 | 适合规模 |
|---|---|---|
| 环境变量 | 免费 | 个人 |
| 本地加密 | 免费 | 单机 |
| Keychain | 免费 | Mac 个人 |
| 1Password | $8/用户/月 | 小团队 |
| Vault 开源 | 免费(自托管) | 中大团队 |
| Vault Enterprise | 商业定价 | 大企业 |
| AWS SM | $0.40/secret/月 | AWS 用户 |
| GCP SM | $0.06/版本/月 | GCP 用户 |
选择建议
- 个人开发:环境变量 / Keychain
- 小团队:1Password / Vault 开源
- 中企业:Vault / AWS SM
- 合规要求:Vault Enterprise + 审计
- 多云:Vault(跨云一致)
迁移步骤
从明文迁移
- 备份当前配置
- 选择目标后端
- 逐个迁移 Secrets
- 更新配置引用
- 验证功能
- 删除明文配置
# 自动迁移助手
openclaw secrets migrate --from env --to vault
注意事项
- Secrets 管理是必须的,不要偷懒
- 开发和生产用不同凭证
- 定期轮换所有 Secrets
- 审计日志保留至少 1 年
- 备份Secrets 后端(Vault 快照等)
- 灾难恢复演练定期执行
- 团队离职立即撤销权限
- 高权限 Secrets(根 Token)不要写入代码
- 结合 Microsoft Agent Governance Toolkit 获得完整保障