Files
iam-service/docs/SECURITY_GOVERNANCE.md
2026-01-31 15:44:56 +08:00

4.1 KiB
Raw Blame History

安全评估与接口治理建议IAM Service

本文面向本仓库当前实现,给出“暴露面审查、风险识别、接口分级、敏感操作二次验证、隐藏策略”建议,并标注已落地的控制点。

1) 当前接口暴露面概览(按访问级别)

公开接口Public

特点:无需 Bearer Token可被外部直接调用应最小化

  • POST /tenants/register:创建租户
  • POST /auth/register:租户内注册用户(依赖 Header X-Tenant-ID
  • POST /auth/login:租户内登录(依赖 Header X-Tenant-ID
  • GET /scalarOpenAPI/Scalar 文档

认证接口Authenticated

特点:要求 Bearer Token应默认通过网关/WAF 暴露。

  • GET /tenants/mePATCH /tenants/meDELETE /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/appsGET/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而不仅是逻辑权限校验。