深色模式
服务凭据
「服务凭据」是 AI 用 install_with_secret 一键装服务后自动入库的凭据(如 1Panel / Portainer / MySQL / Postgres / Redis),也可以手动新建。
进入
主界面左侧导航 → 服务凭据。
列表
每条凭据显示:
| 字段 | 示例 |
|---|---|
| 服务类型 | 1Panel / MySQL / Portainer |
| 服务器 | 关联的服务器别名 |
| 字段组 | URL / Host / Port / Username / Password 等 |
| 创建时间 | |
| 来源 | AI 自动装 / 手动 |
一键装服务 = AI 拿不到密码
当 AI 调 install_with_secret(template="mysql", params={...}):
- AI 看到:模板 + 参数(不含密码字段)
- Reeve 后端:随机生成强密码(密码学安全 RNG)
- 远端:用密码运行模板 shell(装 MySQL + 初始化 root 密码)
- 入库:URL / Host / Port / Username / 生成的密码 AES-256-GCM 加密入
installed_services表 - AI 拿到的返回:
vault_id+ 部分公开字段(URL / Host / Port) - AI 永远不知道真密码
后续 AI 想用密码必须调专用工具,受 AI 策略审批。
字段 Reveal(显示明文)
每个字段旁有 🔒 按钮:
- 点击 → 二次确认弹窗
- AES-GCM 解密 + 解密后值显示
- 同时复制到剪贴板
- 10 秒后剪贴板自动清空
- 行为写审计:
accessed_at + access_count++
字段优先级排序:
- URL / HOST(最常用)
- USERNAME
- PASSWORD
- PORT
- 其它
一键转敏感库
凭据条目右键 → 转敏感库:
- 把凭据当作"已确认敏感",存入敏感库
- 用于跨多个客户端协同(敏感库可 CSV 导出但凭据库不直接出)
手动新建 DB 凭据
右上 新建 按钮(仅支持 DB 类型,其它由 AI 装):
| 字段 | 示例 |
|---|---|
| 类型 | MySQL / PostgreSQL / SQLite / Redis |
| 名称 | prod-db-master |
| 服务器 | (可选)关联 服务器 |
| Host | localhost / IP |
| Port | 3306 / 5432 / 6379 |
| Username | root |
| Password | 输入即加密 |
| 数据库 | mydb(可选) |
| 隧道 | 可选关联 端口转发 |
关联 Web UI
部分服务(1Panel / Portainer / Grafana 等)有 Web UI:
- 凭据卡片显示 打开 Web UI 按钮
- 点击在浏览器开 URL
- 用户名 / 密码可单独 Reveal 复制
快速查询 Drawer(SQL)
凭据卡片 查询 按钮(仅 SQL DB):
- 右侧抽屉打开 数据库工作台
- 自动连接 + 切到当前 DB
- 不离开当前页面
删除
凭据行 删除 按钮:
- 二次确认
- 同时删除关联的隧道(若有)
- 加密数据从
installed_services表清除 - 审计行保留
installed_service_deleted事件
安全特性
| 特性 | 实现 |
|---|---|
| 密码加密 | AES-256-GCM;DEK 在 keyring(可选主密码再包 Argon2 KEK) |
| Reveal 审计 | 每次解密都写 audit_log;access_count 累加 |
| 剪贴板自清 | 复制后 10 秒清空 |
| AI 不可见 | install_with_secret 只返回 vault_id + 公开字段 |
| 主密码锁屏 | 锁定时无法 Reveal、无法删除 |
| 重置凭据库 | 设置 → 重置可生成新 DEK 重加密 |
故障排查
| 症状 | 排查 |
|---|---|
| Reveal 失败 | 主密码可能锁了,先解锁 |
| 复制后剪贴板里没东西 | 已经过 10 秒清空了,重新 Reveal |
| AI 装的服务凭据格式不对 | 检查 install_with_secret 调用的模板参数是否正确 |
| 删除后审计还能搜到 | 正常,审计行保留追溯 |