秘密管理
OpenClaw 支持可叠加的 SecretRefs,使支持的凭证无需以明文形式存储在配置中。 明文仍然可用。SecretRefs 是针对每个凭证的可选功能。目标和运行时模型
秘密解析为内存中的运行时快照。- 解析在激活期间进行,是主动的,而非请求路径上的懒加载。
- 当无法解析一个有效激活的 SecretRef 时,启动会快速失败。
- 重载使用原子交换:要么完全成功,要么保留最后已知良好的快照。
- 运行时请求仅从活动的内存快照读取。
活动表面过滤
仅对有效激活的表面验证 SecretRefs。- 启用表面:未解析的引用会阻止启动/重载。
- 非活动表面:未解析的引用不会阻止启动/重载。
- 非活动引用会发出代码为
SECRETS_REF_IGNORED_INACTIVE_SURFACE的非致命诊断。
- 被禁用的频道/账户条目。
- 顶层频道凭证,且没有任何启用的账户继承它们。
- 被禁用的工具/功能表面。
- 没有被
tools.web.search.provider选中使用的网页搜索提供者特定秘钥。 在自动模式(提供者未设置)下,提供者特定秘钥也对提供者自动检测是活动的。 - 如果满足以下任一条件且
gateway.remote.enabled不为false,则gateway.remote.token/gateway.remote.passwordSecretRefs 是激活的:gateway.mode=remote- 配置了
gateway.remote.url gateway.tailscale.mode为serve或funnel在没有这些远程表面的本地模式下:- 当令牌认证有效且未配置环境/认证令牌时,
gateway.remote.token是激活的。 - 当密码认证有效且未配置环境/认证密码时,
gateway.remote.password才是激活的。
- 当设置了
OPENCLAW_GATEWAY_TOKEN(或CLAWDBOT_GATEWAY_TOKEN)时,gateway.auth.tokenSecretRef 对启动时认证解析而言是非激活的,因为环境变量令牌在该运行时优先。
网关认证表面诊断
当在gateway.auth.token、gateway.auth.password、gateway.remote.token 或 gateway.remote.password 上配置 SecretRef 时,网关启动/重载日志会显式记录表面状态:
active:SecretRef 属于有效认证表面,必须解析成功。inactive:该 SecretRef 在此运行时被忽略,因为另一个认证表面优先,或远程认证被禁用/未激活。
SECRETS_GATEWAY_AUTH_SURFACE 标识日志记录,并包含活动表面策略使用的原因,方便查看凭证为何被视为激活或非激活。
上线参考预检
当以交互模式运行上线流程并选择 SecretRef 存储时,OpenClaw 会在保存前执行预检验证:- 环境变量引用:验证环境变量名,并确认上线期间可见非空值。
- 提供者引用(
file或exec):验证提供者选择,解析id,并检查解析后的值类型。 - 快速重用路径:当
gateway.auth.token已是 SecretRef,界面会在探测/仪表盘启动前解析它(针对env、file和exec引用),使用同样的快速失败机制。
SecretRef 约定
全局统一使用一个对象形态:source: "env"
provider必须匹配正则^[a-z][a-z0-9_-]{0,63}$id必须匹配正则^[A-Z][A-Z0-9_]{0,127}$
source: "file"
provider必须匹配正则^[a-z][a-z0-9_-]{0,63}$id必须为绝对 JSON 指针(以/开头)- JSON 指针段中使用 RFC6901 转义:字符
~转为~0,字符/转为~1
source: "exec"
provider必须匹配正则^[a-z][a-z0-9_-]{0,63}$id必须匹配正则^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$
提供者配置
在secrets.providers 下定义提供者:
环境变量提供者
- 支持通过
allowlist设定可选允许列表。 - 缺失或空的环境变量值会导致解析失败。
文件提供者
- 从
path路径读取本地文件。 mode: "json":期望文件为 JSON 对象,引用id作为 JSON 指针解析。mode: "singleValue":引用id必须为"value",返回整个文件内容。- 路径必须通过所有权和权限检查。
- Windows 的关闭失败备注:如果路径的 ACL 验证不可用,解析失败。仅对受信任路径,可在提供者上设置
allowInsecurePath: true,以绕过路径安全检查。
执行提供者
- 运行已配置的绝对二进制路径,不使用 shell。
- 默认情况下,
command必须指向常规文件(非符号链接)。 - 设置
allowSymlinkCommand: true以允许符号链接命令路径(比如 Homebrew 的 shim)。OpenClaw 会验证解析后的目标路径。 - 可结合
allowSymlinkCommand和trustedDirs使用,针对包管理器路径(比如["/opt/homebrew"])。 - 支持超时、无输出超时、输出字节限制、环境变量允许列表和受信任目录。
- Windows 的关闭失败备注:如果命令路径的 ACL 验证不可用,解析失败。仅对受信任路径,可在提供者上设置
allowInsecurePath: true,以绕过路径安全检查。
执行集成示例
1Password CLI
HashiCorp Vault CLI
sops
支持的凭证表面
规范支持和不支持的凭证列举见: 运行时生成或轮换的凭证及 OAuth 刷新材料有意排除在只读 SecretRef 解析之外。必需行为和优先级
- 不带引用的字段:保持不变。
- 带引用的字段:激活表面激活时是必须的。
- 当同时存在明文和引用时,支持优先路径上以引用优先。
SECRETS_REF_OVERRIDES_PLAINTEXT(运行时警告)REF_SHADOWED(审计发现,当auth-profiles.json凭证优先于openclaw.json引用时)
serviceAccountRef优先于明文serviceAccount。- 当同级引用被设置时,忽略明文值。
激活触发
Secret 激活于以下时刻运行:- 启动时(预检加最终激活)
- 配置重载热应用路径
- 配置重载重启检查路径
- 通过
secrets.reload手动重载
- 成功则原子交换快照。
- 启动失败则中止网关启动。
- 运行时重载失败保持最后已知良好快照。
降级与恢复信号
当重载激活失败发生在健康状态后,OpenClaw 进入秘密降级状态。 一次性系统事件和日志代码:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- 降级:运行时保留最后已知良好快照。
- 恢复:在下次成功激活后发出一次。
- 已降级状态下重复失败日志警告,但不会泛滥事件。
- 启动快速失败不会发出降级事件,因为运行时未曾激活。
命令路径解析
命令路径可选择使用通过网关快照 RPC 支持的 SecretRef 解析。 主要有两种行为:- 严格命令路径(如
openclaw memory远程内存路径和openclaw qr --remote)从活动快照读取,且当必需的 SecretRef 不可用时快速失败。 - 只读命令路径(如
openclaw status、openclaw status --all、openclaw channels status、openclaw channels resolve以及只读的 doctor/配置修复流程)也优先使用活动快照,但在命令路径中特定 SecretRef 不可用时降级处理而非中止。
- 当网关正在运行时,这些命令优先从活动快照读取。
- 如果网关解析不完整或网关不可用,则尝试针对该命令表面进行本地回退。
- 如果目标 SecretRef 仍不可用,命令继续并输出降级的只读信息,附带明确的诊断(例如“已配置但在此命令路径中不可用”)。
- 该降级行为仅限于本命令,不影响运行时启动、重载或发送/认证路径。
- 后端密钥轮换后快照刷新由
openclaw secrets reload处理。 - 这类命令路径使用的网关 RPC 方法:
secrets.resolve。
审计与配置工作流
默认运营者流程:secrets audit
发现包括:
- 以明文存储的值(
openclaw.json、auth-profiles.json、.env及生成的agents/*/agent/models.json) - 在生成的
models.json条目中遗留的以明文敏感提供者头部信息 - 未解析的引用
- 优先级遮蔽(
auth-profiles.json优先于openclaw.json引用) - 旧遗留(
auth.json,OAuth 提醒)
- 敏感提供者头部检测基于名称启发式(常见的认证/凭证头部名和片段,如
authorization、x-api-key、token、secret、password和credential)。
secrets configure
交互式助手,功能:
- 先配置
secrets.providers(env/file/exec,可添加/编辑/删除) - 让你选择
openclaw.json和auth-profiles.json中支持的携带秘密的字段,针对单个代理范围 - 可以在目标选择器中直接创建新的
auth-profiles.json映射 - 捕获 SecretRef 详情(
source、provider、id) - 运行预检解析
- 可立即应用
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure 应用默认行为:
- 擦除针对目标提供者匹配的静态凭证,来自
auth-profiles.json - 擦除发现的旧静态
api_key条目,来自auth.json - 擦除匹配的已知秘密行,来自
<config-dir>/.env
secrets apply
应用已保存计划:
单向安全策略
OpenClaw 有意不写包含历史明文秘密值的回滚备份。 安全模型:- 写入前必须通过预检
- 提交前进行运行时激活验证
- 应用时使用原子文件替换及失败时的最大努力恢复
旧版认证兼容说明
针对静态凭证,运行时不再依赖明文旧版认证存储。- 运行时凭证来源是解析后的内存快照。
- 发现的旧静态
api_key条目会被擦除。 - OAuth 相关兼容行为仍然独立存在。
Web UI 说明
某些 SecretInput 联合类型在原始编辑模式下比表单模式更易配置。相关文档
- CLI 命令:secrets
- 计划约定详情:Secrets 应用计划约定
- 凭证表面:SecretRef 凭证表面
- 认证设置:认证
- 安全态势:安全
- 环境优先级:环境变量