账户

基于角色的访问控制

RBAC (基于角色的访问控制) 文档

概述

系统实现了一个全面的 RBAC 模型来管理不同资源和操作的访问控制。它由角色、策略和用户角色分配组成。

核心组件

资源

系统定义了以下受保护资源:

  • Audit (审计)
  • DevPod
  • Image (镜像)
  • Payment (支付)
  • Pubkey (公钥)
  • Registry (仓库)
  • Region (区域)
  • Resource (资源)
  • Serverless
  • Storage (存储)
  • Team (团队)
  • Role (角色)
  • UserRole (用户角色)

操作

资源可用的操作:

  • List (列表)
  • Get (获取)
  • Create (创建)
  • Update (更新)
  • Delete (删除)

角色系统

角色是一组权限的集合,定义了用户可以对特定资源执行的操作。角色通过将相关权限组合在一起来帮助高效组织和管理访问权限。

预定义角色

  1. AccountAdmin (账户管理员)

    • 对账户级资源的完全访问权限
    • 可以管理团队成员
    • 可以配置账户设置
  2. Developer (开发者)

    • 可以管理 DevPods
    • 可以管理 Serverless 资源
    • 可以管理镜像
    • 可以管理存储(仅创建/读取)
  3. Auditor (审计员)

    • 对审计日志的只读访问权限
  4. Finance (财务)

    • 对支付功能的完全访问权限
  5. Ops (运维)

    • 对 DevPods 和 Serverless 的读取权限
    • 对镜像、存储、公钥和资源的完全访问权限

策略

策略是访问控制的基本构建块,定义了特定的权限。每个策略代表一条规则,授予在特定资源上执行某些操作的权限。

策略结构

  • Resource (资源): 目标资源
  • Action (操作): 允许的操作

策略分配

  • 策略通过 RolePolicy 映射分配给角色
  • 单个角色可以分配多个策略
  • 策略分配对每个角色是唯一的

用户权限控制

系统通过三层模型实现权限控制:用户、角色和策略。角色充当用户和策略之间的桥梁,提供灵活且可管理的访问权限控制方式。

控制流程

  1. 用户分配

    • 用户被分配一个或多个角色
    • 角色分配特定于每个账户
    • 用户在不同账户中可以拥有不同角色
  2. 角色作为桥梁

    • 角色作为策略集合的容器
    • 每个角色定义一组特定的职责
    • 角色使权限管理更易于维护
  3. 策略执行

    • 策略定义实际权限
    • 每个请求都会根据用户角色的策略进行验证
    • 只有存在匹配策略时才授予访问权限

授权流程

  1. 请求处理

    • 提取账户信息
    • 识别目标资源和操作
    • 验证用户角色和策略
  2. 权限检查

    • 针对目标账户验证特定于账户的角色
    • 策略匹配考虑精确匹配和通配符
  3. 访问控制

    • 如果任何分配的角色具有匹配策略,则授予访问权限
    • 被拒绝的请求返回空结果而非错误
    • 审计日志在 RBAC 验证后记录

最佳实践

  1. 角色管理

    • 尽可能使用预定义角色
    • 创建具有最小必需权限的自定义角色
    • 定期审查角色分配
  2. 安全考虑

    • 始终验证账户上下文
    • 实施基于角色的 UI 限制
    • 维护角色变更的审计日志
  3. 性能

    • 角色和策略分配被缓存
    • 可用于批量分配的批处理操作
    • 优化的数据库查询用于权限检查