在之前这篇《OpenClaw安全加固(三):启用敏感信息过滤》中讲到了如何让OpenClaw不要直接输出敏感信息,可以看到我们的各种api key、token、授权码等等都是明文保存配置文件里的,agent有权限读取文件就有泄露的密钥的风险。还有,我们养了很久的龙虾,沉淀了很多宝贵的经验,肯定要定期备份~/.openclaw文件夹下面的文件,最常见的就是加到git仓库里。如果密钥分散在各个配置文件里,很容易直接传到代码仓库里去了,也不安全。幸好OpenClaw有一套密钥管理系统来替代密钥直接写在配置文件中:1. 将密钥集中写进.env 文件中
注:支持env/file/exec三种方式
# ~/.openclaw/.env# 自己定义环境变量名,注意格式MINIMAX_API_KEY=sk-xxxFEISHU_APP_ID=cli_xxxFEISHU_APP_SECRET=xxxGATEWAY_TOKEN=xxx
2. 通过交互式命令完成密钥替换
# 1. 检查当前密钥状态openclaw secrets audit --check# 2. 交互式配置openclaw secrets configure# 3. 配置完再检查一次openclaw secrets audit --check# 4. 让网关重新加载密钥快照openclaw secrets reload
3. 将明文字段改成SecretRef
{ models: { providers: { minimax: { apiKey: { source: "env", provider: "default", id: "MINIMAX_API_KEY" }, } }
gateway: { auth: { token: { source: "env", provider: "default", id: "OPENCLAW_GATEWAY_TOKEN" }, }}
4. 将密钥文件加到.gitignore
现在密钥都统一到.env文件中了,可以放心将OpenClaw配置文件上传到代码仓库了。但请记住,一定要将这个重要的文件在git仓库中排除。5. 写在最后
本文只讲了env这一种方式,目前比较通用的还有file方式(将密钥以json格式写到一个配置文件里),因为与env方式差别不大,就不再赘述了。不过env/file这两个provider其实还是明文存储,只是集中管理而已,还可以通exec provider通过执行命令的方式调用macOS的keyring或者第三方的加密软件来(比如1Password)获取密钥,不过这种方式需要自己额外写脚本,没有特别的要求就先不折腾了。值得期待的是,OpenClaw在做一个SecretsProvider,可以从直接从keyring中获取密钥,等正式上线之后再试试好不好用。