安全与 Token
GPUPlane 是单用户产品:不做多租户,威胁模型是“防止误用与局域网内的意外访问”, 而不是抵御恶意租户。安全模型因此刻意简单。
Token 模型
Section titled “Token 模型”~/.gpuctl/server.yaml 配置多个 token,各带 scope:
tokens: - name: admin token_hash: "..." # 首次启动自动生成一个 admin token scope: write - name: observer token_hash: "..." scope: read| scope | 用途 |
|---|---|
read |
观测与语义工具;Web UI 只读浏览 |
write |
全部能力(submit/cancel/retry/evaluate/set_primary_metric) |
agent |
agent 主机的 WS 接入 |
sdk |
训练进程指标上报 |
REST / WebSocket / MCP 统一使用 Authorization: Bearer <token>。
GET /api/v1/auth/whoami 返回 {name, scope, can_write},客户端可据此自适应
(gpuctl-mcp 启动时即以此决定注册哪些工具)。
只读 token 调用写操作会得到统一的 WriteScopeError。
| 场景 | 建议 |
|---|---|
| 信任网络(LAN / Tailscale) | 明文 HTTP 可接受 |
| 跨网访问 | 必须 TLS:推荐 Tailscale 兜底,或 Caddy 自动证书反代 |
| 公网暴露 | 不做。这不是为公网设计的产品 |
uv run gpuctl backup # 在线备份 server SQLite 到 <data_dir>/backups/uv run gpuctl backup-agent # 在每台 agent 主机归档完整 job 日志/runtime/spool分体部署时两类备份都要保留(server 的 SQLite + 各 agent 的日志归档)。
MCP adapter 的边界
Section titled “MCP adapter 的边界”HTTP 形态的 gpuctl-mcp 本身是写能力边界:它要求客户端持与 adapter 转发上游相同的 Bearer token,本地进程不能仅靠“够得着它的端口”就继承 adapter 的权限。