账户
基于角色的访问控制
RBAC (基于角色的访问控制) 文档
概述
系统实现了一个全面的 RBAC 模型来管理不同资源和操作的访问控制。它由角色、策略和用户角色分配组成。
核心组件
资源
系统定义了以下受保护资源:
- Audit (审计)
- DevPod
- Image (镜像)
- Payment (支付)
- Pubkey (公钥)
- Registry (仓库)
- Region (区域)
- Resource (资源)
- Serverless
- Storage (存储)
- Team (团队)
- Role (角色)
- UserRole (用户角色)
操作
资源可用的操作:
- List (列表)
- Get (获取)
- Create (创建)
- Update (更新)
- Delete (删除)
角色系统
角色是一组权限的集合,定义了用户可以对特定资源执行的操作。角色通过将相关权限组合在一起来帮助高效组织和管理访问权限。
预定义角色
-
AccountAdmin (账户管理员)
- 对账户级资源的完全访问权限
- 可以管理团队成员
- 可以配置账户设置
-
Developer (开发者)
- 可以管理 DevPods
- 可以管理 Serverless 资源
- 可以管理镜像
- 可以管理存储(仅创建/读取)
-
Auditor (审计员)
- 对审计日志的只读访问权限
-
Finance (财务)
- 对支付功能的完全访问权限
-
Ops (运维)
- 对 DevPods 和 Serverless 的读取权限
- 对镜像、存储、公钥和资源的完全访问权限
策略
策略是访问控制的基本构建块,定义了特定的权限。每个策略代表一条规则,授予在特定资源上执行某些操作的权限。
策略结构
- Resource (资源): 目标资源
- Action (操作): 允许的操作
策略分配
- 策略通过 RolePolicy 映射分配给角色
- 单个角色可以分配多个策略
- 策略分配对每个角色是唯一的
用户权限控制
系统通过三层模型实现权限控制:用户、角色和策略。角色充当用户和策略之间的桥梁,提供灵活且可管理的访问权限控制方式。
控制流程
-
用户分配
- 用户被分配一个或多个角色
- 角色分配特定于每个账户
- 用户在不同账户中可以拥有不同角色
-
角色作为桥梁
- 角色作为策略集合的容器
- 每个角色定义一组特定的职责
- 角色使权限管理更易于维护
-
策略执行
- 策略定义实际权限
- 每个请求都会根据用户角色的策略进行验证
- 只有存在匹配策略时才授予访问权限
授权流程
-
请求处理
- 提取账户信息
- 识别目标资源和操作
- 验证用户角色和策略
-
权限检查
- 针对目标账户验证特定于账户的角色
- 策略匹配考虑精确匹配和通配符
-
访问控制
- 如果任何分配的角色具有匹配策略,则授予访问权限
- 被拒绝的请求返回空结果而非错误
- 审计日志在 RBAC 验证后记录
最佳实践
-
角色管理
- 尽可能使用预定义角色
- 创建具有最小必需权限的自定义角色
- 定期审查角色分配
-
安全考虑
- 始终验证账户上下文
- 实施基于角色的 UI 限制
- 维护角色变更的审计日志
-
性能
- 角色和策略分配被缓存
- 可用于批量分配的批处理操作
- 优化的数据库查询用于权限检查