Azure Role-Based Access Control (RBAC),即 Azure 基于角色的访问控制,是 Azure 提供的一种授权系统,它允许你对 Azure 资源进行精细的权限管理。简单来说,它定义了谁(安全主体)可以对什么(作用域)执行哪些操作(角色定义)。
理解 RBAC 的三个核心要素至关重要:
-
安全主体 (Who)
- 用户: 个人账户,例如你的 Azure 登录账户。
- 组: Azure AD 中的用户组,可以一次性为组内所有成员分配权限。
- 服务主体: 应用程序、服务或自动化工具在 Azure 中的身份。当应用程序需要访问 Azure 资源时,通常会使用服务主体。
- 托管标识: 专为 Azure 服务设计的自动托管身份,用于访问其他支持 Azure AD 身份验证的服务,无需管理凭据。
-
角色定义 (What can you do)
- 角色定义是权限的集合。它列出了允许或禁止对特定资源执行的操作。Azure 提供了许多内置角色,你也可以创建自定义角色。
- 常见内置角色示例:
- 所有者 (Owner): 拥有所有权限,包括管理访问权限(RBAC)。
- 参与者 (Contributor): 可以管理除访问权限(RBAC)之外的所有内容。
- 读者 (Reader): 只能查看 Azure 资源。
- 用户访问管理员 (User Access Administrator): 专门用于管理对 Azure 资源的访问权限(即管理 RBAC 分配)。
- 还有许多特定服务的角色,如 “虚拟机参与者”、“存储 Blob 数据读取者” 等。
- 权限的结构: 角色定义由
Actions(允许的操作)、NotActions(不允许的操作) 和DataActions(数据平面操作) 等组成。
-
作用域 (Where)
- 作用域定义了权限适用的范围。Azure RBAC 的权限可以在四个级别进行分配,且具有继承性(子级别会继承父级别的权限):
- 管理组 (Management Group): 最高级别,通常用于跨订阅管理策略和合规性。
- 订阅 (Subscription): 管理账单和所有资源。
- 资源组 (Resource Group): 逻辑上组织相关资源(如虚拟机、网络、存储账户)。
- 资源 (Resource): 单个资源实例,如特定的虚拟机、存储账户或虚拟网络。
- 作用域定义了权限适用的范围。Azure RBAC 的权限可以在四个级别进行分配,且具有继承性(子级别会继承父级别的权限):
RBAC 的工作原理:
当你尝试执行某个操作时,Azure 会检查你是否拥有足够的权限:
- 身份验证: 首先,Azure 会验证你的身份(通过 Azure AD)。
- 授权:
- Azure 会查找你在该操作所针对资源的所有父级作用域(从资源本身到管理组)上拥有的所有角色分配。
- 它会评估这些角色定义中定义的
Actions和NotActions。 - 如果至少有一个角色授予了执行该操作的权限,并且没有其他角色明确拒绝该操作,那么你就被授权执行该操作。
核心优势:
- 精细权限控制: 可以精确到单个资源,只授予用户完成其工作所需的最小权限(最小特权原则)。
- 集中管理: 统一在 Azure AD 中管理身份和访问权限。
- 提高安全性: 减少了因过度授权而带来的安全风险。
- 简化合规性: 帮助组织满足合规性要求,例如 SOX、HIPAA 等。
- 易于审计: 可以轻松查看谁在何时对哪些资源拥有哪些权限。
示例:
-
场景 1: 你希望开发人员只能在特定的资源组
DevRG中创建和管理虚拟机,而不能修改其他资源。- 将 “虚拟机参与者” 角色分配给开发人员组,作用域为
DevRG。
- 将 “虚拟机参与者” 角色分配给开发人员组,作用域为
-
场景 2: 你希望财务部门的分析师能够查看所有订阅的成本信息,但不能修改任何资源。
- 将 “读者” 角色分配给财务分析师组,作用域为所有订阅(或顶层管理组)。
-
场景 3: 一个自动化脚本需要将文件上传到某个存储账户的特定容器。
- 创建一个服务主体,并为其分配 “存储 Blob 数据参与者” 角色,作用域为该特定的存储账户或容器。
RBAC 与 Azure AD 角色 (Azure AD roles) 的区别:
需要注意的是,Azure RBAC 主要用于控制对 Azure 资源(如虚拟机、存储账户、数据库等)的访问。
Azure AD 还有它自己的角色系统(例如 “全局管理员”、“用户管理员” 等),这些角色用于控制对 Azure AD 本身(如用户管理、应用程序注册、域管理)的权限。
虽然两者都涉及“角色”,但它们管理的目标不同。不过,Azure RBAC 的权限分配通常依赖于 Azure AD 中的安全主体。
总之,Azure RBAC 是管理云资源访问权限的基石,它通过精细的角色和作用域定义,确保只有被授权的用户和应用程序才能执行其所需的特定操作,从而构建一个安全、合规的云环境。