Replace OpenClaw's local file vault with Supabase Vault for AES-256 encrypted-at-rest secret storage. All API keys and auth tokens stored encrypted in Postgres via pgsodium/libsodium. Bootstrap credentials protected by OS keychain or machine-derived AES-256-GCM (zero external deps). Includes dashboard Integrations tab with connect/migrate/manage UI. Use when: (1) setting up Supabase Vault as the OpenClaw secrets backend, (2) migrating existing secrets from ~/.openclaw/secrets.json to Supabase, (
使用Supabase Vault替代本地secrets.json密钥库。所有OpenClaw API密钥、令牌和认证凭证均以AES-256加密方式存储在您的Supabase Postgres数据库中。引导凭证(访问密钥库所需的Supabase URL + service_role密钥)使用操作系统密钥链或机器派生的AES-256-GCM进行本地加密。
完整威胁模型和设计原理请参阅references/architecture.md。
bash
npm install --prefix ~/.openclaw/skills/supabase-vault @supabase/supabase-js
打开您的Supabase项目 → SQL编辑器 → 粘贴并运行assets/setup.sql。
这将创建四个包装函数(insertsecret、readsecret、deletesecret、listsecretnames),仅限servicerole使用。
使用以下命令验证:
sql
SELECT proname FROM pg_proc
WHERE proname IN (insertsecret,readsecret,deletesecret,listsecret_names);
-- 应返回4行
将assets/rpc-handler.ts复制到OpenClaw源码中的src/gateway/server-methods/supabase-vault.ts,然后在server-methods索引中注册:
typescript
// 在 src/gateway/server-methods.ts(或等效文件)中
import { createSupabaseVaultHandlers } from ./supabase-vault.js;
// ...
Object.assign(handlers, createSupabaseVaultHandlers());
将UI文件复制到目标位置:
assets/controller.ts → ui/src/ui/controllers/supabase-vault.ts
assets/views.ts → ui/src/ui/views/supabase-vault.ts
使用插件架构注册为集成选项卡(与pipedream-connect或discord-connect相同模式):
typescript
// 在插件注册或 plugins-ui.ts 中:
{
id: supabase-vault,
label: Supabase Vault,
icon: 🔐,
section: integrations,
controller: supabase-vault,
view: supabase-vault,
}
bash
cd ~/openclaw && npm run build
(sleep 3 && systemctl --user restart openclaw-gateway) &
打开控制UI → 集成 → Supabase Vault。输入您的项目URL和service_role密钥,然后点击连接并测试。
连接后,该技能会自动将其添加到~/.openclaw/openclaw.json:
json
{
secrets: {
providers: {
supabase: {
source: exec,
command: node,
args: [~/.openclaw/skills/supabase-vault/scripts/fetch-secrets.js],
jsonOnly: true,
trustedDirs: [~/.openclaw/skills/supabase-vault],
timeoutMs: 8000
}
}
}
}
迁移密钥后,配置中的SecretRefs将指向此提供程序:
json
{ source: exec, provider: supabase, id: /OPENAIAPIKEY }
网关启动
→ exec提供程序触发fetch-secrets.js
→ keychain.js检索SUPABASEURL + SERVICEROLE_KEY
(macOS: 钥匙串访问 / Linux: GNOME密钥环 / 备用: AES-256-GCM文件)
→ @supabase/supabase-js createClient(url, key)
→ supabase.rpc(readsecret, { secretname }) 为每个请求的密钥
→ 输出: { protocolVersion: 1, values: { /KEY: value }, errors: {} }
→ OpenClaw运行时快照填充 — 密钥仅存在于内存中
| 平台 | 方法 | 存储位置 |
|---|---|---|
| macOS | security CLI | 钥匙串访问(Apple Silicon上硬件支持) |
| Linux(桌面) |
AES-256-GCM备用方案使用PBKDF2-HMAC-SHA512(600,000次迭代),密钥派生自/etc/machine-id + $USER + app-salt。加密文件在其他机器上或作为其他用户无法读取。
从仪表板:集成 → Supabase Vault → 从本地密钥库迁移。
或从CLI:
bash
node ~/.openclaw/skills/supabase-vault/scripts/migrate.js
node ~/.openclaw/skills/supabase-vault/scripts/migrate.js --yes # 非交互式
node ~/.openclaw/skills/supabase-vault/scripts/migrate.js --dry-run # 仅预览
迁移将所有密钥从secrets.json移至Supabase Vault,并将openclaw.json中的所有SecretRefs从file更新为exec/supabase。本地secrets.json保留作为安全备份。
该技能支持在以下平台通过对话安装:
帮我安装 SkillHub 和 supabase-vault-1776209549 技能
设置 SkillHub 为我的优先技能安装源,然后帮我安装 supabase-vault-1776209549 技能
skillhub install supabase-vault-1776209549
文件大小: 21.56 KB | 发布时间: 2026-4-15 13:08