feat(handler): add app
This commit is contained in:
90
docs/SECURITY_GOVERNANCE.md
Normal file
90
docs/SECURITY_GOVERNANCE.md
Normal file
@@ -0,0 +1,90 @@
|
||||
# 安全评估与接口治理建议(IAM Service)
|
||||
|
||||
本文面向本仓库当前实现,给出“暴露面审查、风险识别、接口分级、敏感操作二次验证、隐藏策略”建议,并标注已落地的控制点。
|
||||
|
||||
## 1) 当前接口暴露面概览(按访问级别)
|
||||
|
||||
### 公开接口(Public)
|
||||
|
||||
特点:无需 Bearer Token;可被外部直接调用(应最小化)。
|
||||
|
||||
- `POST /tenants/register`:创建租户
|
||||
- `POST /auth/register`:租户内注册用户(依赖 Header `X-Tenant-ID`)
|
||||
- `POST /auth/login`:租户内登录(依赖 Header `X-Tenant-ID`)
|
||||
- `GET /scalar`:OpenAPI/Scalar 文档
|
||||
|
||||
### 认证接口(Authenticated)
|
||||
|
||||
特点:要求 Bearer Token;应默认通过网关/WAF 暴露。
|
||||
|
||||
- `GET /tenants/me`、`PATCH /tenants/me`、`DELETE /tenants/me`
|
||||
- `POST /tenants/me/status`
|
||||
- `GET /me/permissions`
|
||||
- `GET/PATCH/DELETE /users...`、`GET/PUT /users/{id}/roles`
|
||||
- `GET/POST /roles`
|
||||
|
||||
### 内部/平台接口(Internal / Platform)
|
||||
|
||||
特点:平台权限(系统角色)才能访问,建议网关层做更严格限制(IP allowlist、mTLS、独立域名等)。
|
||||
|
||||
- `GET/PUT /platform/tenants/{tenant_id}/enabled-apps`
|
||||
- `GET/POST /platform/apps`、`GET/PATCH/DELETE /platform/apps/{app_id}`
|
||||
- `POST /platform/apps/{app_id}/status-change-requests`
|
||||
- `GET /platform/app-status-change-requests`
|
||||
- `POST /platform/app-status-change-requests/{request_id}/approve|reject`
|
||||
|
||||
## 2) 风险识别(重点)
|
||||
|
||||
- **租户创建为公开接口**:可能被滥用批量创建租户,造成资源耗尽、审计噪声、后续越权风险面扩大。
|
||||
- **注册为公开接口**:对任意租户 ID 可注册用户(虽然要求 `X-Tenant-ID`,但租户 ID 可被枚举/泄露)。
|
||||
- **平台接口暴露风险**:即便有平台权限控制,一旦 token 泄露将影响全局(enabled_apps 与 apps 注册表)。
|
||||
- **文档暴露**:`/scalar` 默认公开,可能暴露内部接口与参数细节。
|
||||
|
||||
## 3) 已落地控制点(本次实现)
|
||||
|
||||
- **敏感操作二次验证(可选开关)**
|
||||
- 通过环境变量 `IAM_SENSITIVE_ACTION_TOKEN` 启用二次验证。
|
||||
- 当启用时,下列操作必须额外携带 Header `X-Sensitive-Token: <token>`:
|
||||
- `POST /tenants/register`
|
||||
- `DELETE /platform/apps/{app_id}`
|
||||
- 目的:降低“单一 Bearer Token 泄露”或“误调用”带来的破坏面。
|
||||
|
||||
- **平台权限细分**
|
||||
- apps 生命周期管理引入平台权限码:`iam:app:read|write|approve|delete`
|
||||
- enabled_apps 管理权限码:`iam:tenant:enabled_apps:read|write`
|
||||
|
||||
## 4) 建议的接口分级制度(治理)
|
||||
|
||||
建议把接口按“公开 / 认证 / 内部平台”分级,并在网关与代码侧同时落实:
|
||||
|
||||
- Public(公开)
|
||||
- 强制:限流、验证码/人机校验(可选)、IP 风控、灰度开关、审计
|
||||
- 建议:对 `tenants/register` 改为“邀请制/工单制”,或迁移到平台后台
|
||||
|
||||
- Authenticated(认证)
|
||||
- 强制:最小权限、全链路审计、错误码统一、分页上限、输入校验
|
||||
|
||||
- Internal / Platform(内部)
|
||||
- 强制:网关层隔离(独立域名/路由、mTLS 或 IP allowlist)、更严格限流、短 TTL token、专用账号
|
||||
- 建议:默认不在公开文档展示(需要登录后才能看到或独立文档入口)
|
||||
|
||||
## 5) 接口隐藏策略建议(不改变业务语义)
|
||||
|
||||
- 网关层
|
||||
- 路由隔离:`/platform/*` 走独立 upstream 或仅内网可达
|
||||
- 访问控制:IP allowlist、mTLS、JWT audience/issuer 分离
|
||||
- 速率限制:对平台接口与租户创建设置更低阈值
|
||||
|
||||
- 版本管理
|
||||
- 对内部平台接口采用独立版本前缀:如 `/platform/v1/...`
|
||||
- 对外接口保持稳定;内部接口可快速迭代
|
||||
|
||||
- 文档权限
|
||||
- 将 `/scalar` 拆分为 public 与 internal 两份,或对 internal 文档加登录保护
|
||||
|
||||
## 6) 下一步改造建议(按风险优先级)
|
||||
|
||||
1. 将 `POST /tenants/register` 从公开接口迁移为平台接口(或邀请制),并引入更强风控。
|
||||
2. 对 `POST /auth/register` 引入租户级注册策略(开关、邀请、允许域名白名单等)。
|
||||
3. 对 `/platform/*` 接口在网关实现“物理隔离”(内网 + mTLS)而不仅是逻辑权限校验。
|
||||
|
||||
Reference in New Issue
Block a user