feat: 权限与日志治理完善,MinIO 独立部署与 tiktoken 离线打包适配
- 后端:强化平台/审批/资源/系统接口权限校验与操作日志,更新权限设计文档与测试用例 - 存储:新增 MinIO 独立部署适配(端口 19000/19001),外部端点与 host-gateway 互通 - 离线:打包 tiktoken cl100k_base 词表进镜像,避免无网环境联网下载 - 其他:算力节点接口微调,前端微调创建页小修,忽略 MinIO 运行时数据 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -803,3 +803,88 @@ async function loadGpus() {
|
||||
4. **前端适配**:GPU 下拉过滤、资源授权按钮、权限管理页面优化
|
||||
5. **审批扩展**:在删除/停止接口中接入 `_require_approval_or_admin`
|
||||
6. **测试补充**:扩展 `test_governance.py` 覆盖 GPU 分配、资源过滤、审批扩展场景
|
||||
## 16. 2.0 权限增强基线(MinIO、缓存与跨节点场景)
|
||||
|
||||
### 16.1 默认拒绝
|
||||
|
||||
所有受保护接口采用 deny by default。权限判定依次执行:认证、租户边界、项目成员关系、页面权限、资源动作权限、审批校验和审计记录。任何一步无法确定时返回 403,不得因为字段缺失、资源不存在或 ACL 查询异常而自动放行。
|
||||
|
||||
### 16.2 资源归属和继承
|
||||
|
||||
资源统一使用 `tenant_id`、`project_id`、`created_by`、`visibility` 表达边界。训练任务继承模型、数据集和项目边界;训练模型继承训练任务边界;合并模型继承被合并模型边界;评测必须同时校验模型和数据集;推理必须校验模型、项目和算力节点。
|
||||
|
||||
### 16.3 MinIO 对象权限
|
||||
|
||||
- 所有对象访问必须经过 Backend 鉴权,前端不得持有 MinIO 密钥。
|
||||
- Compute API 只使用 Backend 签发的预签名 URL。
|
||||
- 预签名 URL 默认有效期不超过 15 分钟,上传和下载分别签发。
|
||||
- 生成 URL 前必须校验资源权限、对象状态和版本归属。
|
||||
- bucket 由服务端配置,禁止客户端提交任意 bucket。
|
||||
- 禁止通过修改 `object_key`、`version_id` 或文件名越权访问对象。
|
||||
- 删除对象使用 `deleting -> deleted` 状态,失败时保留错误信息并可重试。
|
||||
|
||||
### 16.4 缓存和算力节点权限
|
||||
|
||||
- 缓存是资源副本,不产生新的资源所有权。
|
||||
- 只有拥有源模型或数据集 `execute` 权限的用户才能触发缓存。
|
||||
- 用户不能直接调用 Compute API 的缓存、文件、上传和推理管理接口。
|
||||
- Compute API 只接受 Backend 服务令牌,不能转发用户 Token。
|
||||
- 产物归档必须校验任务、节点、资源和项目关联关系。
|
||||
- 任务运行期间缓存引用不可被普通用户清理。
|
||||
- 缓存清理只能删除节点副本,不得删除 MinIO 正式对象。
|
||||
|
||||
### 16.5 训练、合并、推理和评测动作矩阵
|
||||
|
||||
| 动作 | 必要权限 | 额外约束 |
|
||||
|---|---|---|
|
||||
| 创建训练 | 项目 `write` + 模型/数据集 `execute` | GPU、配额和节点权限同时通过 |
|
||||
| 查看训练 | 任务 `read` | 日志、曲线、checkpoint 继承任务权限 |
|
||||
| 停止训练 | 任务 `write` 或 `admin` | 停止他人任务需要审批或管理员权限 |
|
||||
| 权重合并 | 训练模型 `execute` | 使用绑定节点或有权限的指定节点 |
|
||||
| 归档训练产物 | 任务 `write` | 只能归档任务输出目录内文件 |
|
||||
| 创建推理 | 模型 `execute` | 节点、GPU 配额和项目权限通过 |
|
||||
| 删除推理 | 推理服务 `delete` 或管理员 | 释放 GPU 和缓存引用 |
|
||||
| 创建评测 | 模型/数据集 `execute` | 两个资源必须在允许范围内 |
|
||||
| 下载报告 | 评测任务 `read` + 报告 `download` | 预签名 URL 短时有效 |
|
||||
|
||||
### 16.6 服务身份和密钥边界
|
||||
|
||||
| 身份 | 用途 | 禁止事项 |
|
||||
|---|---|---|
|
||||
| 用户 Token | 调用 Backend 业务接口 | 直接调用 Compute 或 MinIO |
|
||||
| Backend 服务令牌 | 调用 Compute API | 返回前端或写入任务参数 |
|
||||
| MinIO 管理密钥 | Backend 对象操作 | 注入浏览器、Compute 容器或日志 |
|
||||
| Compute 节点身份 | 节点心跳和任务执行 | 访问其他节点本地路径 |
|
||||
|
||||
生产环境禁止使用默认凭据;服务令牌必须从环境变量或密钥管理系统读取并脱敏记录。
|
||||
|
||||
### 16.7 必须补充的接口保护
|
||||
|
||||
```text
|
||||
POST /storage/objects/presign
|
||||
POST /storage/resources/{type}/{id}/prepare/{node_id}
|
||||
POST /storage/resources/{type}/{id}/archive-node/{node_id}
|
||||
GET /storage/cache/jobs/{node_id}
|
||||
POST /model-manage/merge
|
||||
POST /model-chat/local/preload
|
||||
POST /model-chat/trained/preload
|
||||
POST /model-chat/local/unload
|
||||
POST /model-compare/{task_id}/load
|
||||
POST /model-compare/{task_id}/unload
|
||||
```
|
||||
|
||||
请求体中的所有资源 ID 都必须校验。`node_id`、`model_id`、`dataset_id`、`task_id` 不一致时返回 403 或 409。
|
||||
|
||||
### 16.8 权限审计验收用例
|
||||
|
||||
必须覆盖:用户 A 不能读取用户 B 资源;项目 A 不能使用项目 B 数据集;评测必须同时拥有模型和数据集 `execute` 权限;修改对象 key、版本或资源 ID 不能获取预签名 URL;普通用户不能调用 Compute API;产物路径不能越出任务数据根目录;用户不能清理其他项目正在使用的缓存;无节点权限时推理返回 403;删除、停止、合并和归档他人资源按规则进入审批。
|
||||
|
||||
## 17. 2.0 实施顺序
|
||||
|
||||
1. 建立统一 `authorize_resource_action()` 和 `authorize_task_resources()` 后端辅助函数。
|
||||
2. 为模型、数据集、训练、推理、评测和对象接口补齐租户/项目过滤。
|
||||
3. 统一预签名 URL 权限校验、有效期和审计日志。
|
||||
4. 为 Compute API 增加服务令牌、节点归属和路径范围校验。
|
||||
5. 将 GPU、缓存、配额和节点选择校验合并到任务创建事务中。
|
||||
6. 增加跨资源权限测试和越权回归测试。
|
||||
7. 前端仅负责隐藏操作按钮,最终权限以 Backend 返回为准。
|
||||
|
||||
Reference in New Issue
Block a user