Vault 设计 — 密文托管、明文永不回显、可轮换、访问审计
默认后端用对称加密把密文存在平台侧,API 永不回显明文,只给引用名 / 别名,可轮换 + 全量访问审计(vault_access_log,记操作类型 / 操作者 / 时间 / 成败)。如需更强隔离可切阿里云 Secrets Manager 后端。
凭据托管的目标很朴素:你把微信支付商户 API 密钥这类敏感值交给平台后,日常用得上、但不会被随手看到。我们的默认做法是密文托管 — 用对称加密把密文存在平台侧,API 永不回显明文,只回引用名 / 别名,可随时轮换,且每次访问都留审计。
存储分层(默认后端)
密文层 — 平台侧对称加密
用户每次写入 Vault 的 secret_value 用对称加密落库,API 读取永不回显明文,只对外暴露引用名 / 别名(ref / alias)。需要用到明文的环节由后端在受控上下文内解密、用完即弃,绝不回传给前端。
元数据层 — 我们的数据库
vault_entries 表存:id / user_id / project_id / key_alias / ref / created_at / last_used_at / expires_at,以及加密后的密文。对外接口永远只给引用名 / 别名,不回显明文。
SELECT key_alias, ref, last_used_at
FROM vault_entries
WHERE user_id = 'xxx';
-- 对外接口只返回引用名 / 别名,明文永不回显;
-- 密文可随时轮换,每次访问都进 vault_access_log。审计层 — vault_access_log
每次写 / 读 / 改 / 轮换 / 删 都进 vault_access_log,记操作类型 + 操作者(actor)+ 时间 + success/failure。即便没人盗你的密钥,你也能看到这个密钥近期被读取过几次、成功还是失败。
需要更强隔离 — 阿里云 Secrets Manager 后端
如果你需要让明文不落在平台侧,可切换阿里云 Secrets Manager 后端:写入直接走阿里云 API,明文只存阿里云,我们库里仅留 ref(如 acs:kms:cn-hangzhou:xxx:secret/aiops-user-{uid}-{alias}/{version}),想拿明文需在阿里云侧授权。
客户端模式 — SSH 私钥可不出本机
如果你装了桌面客户端,SSH 私钥这种最敏感的东西可以直接存进本机 Keychain(macOS Keychain / Win DPAPI / Linux Secret Service),Vault ref 字段写 `local:ssh-key-alias`。服务端从此完全看不到这个密钥的存在 — 私钥可完全不出本机。
默认即密文托管:明文永不回显、可轮换、全程访问审计;客户端模式下,SSH 私钥还能完全不出本机。