Azure Role-Based Access Control (RBAC) 概念和定义

Azure Role-Based Access Control (RBAC),即 Azure 基于角色的访问控制,是 Azure 提供的一种授权系统,它允许你对 Azure 资源进行精细的权限管理。简单来说,它定义了谁(安全主体)可以对什么(作用域)执行哪些操作(角色定义)

理解 RBAC 的三个核心要素至关重要:

  1. 安全主体 (Who)

    • 用户: 个人账户,例如你的 Azure 登录账户。
    • 组: Azure AD 中的用户组,可以一次性为组内所有成员分配权限。
    • 服务主体: 应用程序、服务或自动化工具在 Azure 中的身份。当应用程序需要访问 Azure 资源时,通常会使用服务主体。
    • 托管标识: 专为 Azure 服务设计的自动托管身份,用于访问其他支持 Azure AD 身份验证的服务,无需管理凭据。
  2. 角色定义 (What can you do)

    • 角色定义是权限的集合。它列出了允许或禁止对特定资源执行的操作。Azure 提供了许多内置角色,你也可以创建自定义角色。
    • 常见内置角色示例:
      • 所有者 (Owner): 拥有所有权限,包括管理访问权限(RBAC)。
      • 参与者 (Contributor): 可以管理除访问权限(RBAC)之外的所有内容。
      • 读者 (Reader): 只能查看 Azure 资源。
      • 用户访问管理员 (User Access Administrator): 专门用于管理对 Azure 资源的访问权限(即管理 RBAC 分配)。
      • 还有许多特定服务的角色,如 “虚拟机参与者”、“存储 Blob 数据读取者” 等。
    • 权限的结构: 角色定义由 Actions (允许的操作)、NotActions (不允许的操作) 和 DataActions (数据平面操作) 等组成。
  3. 作用域 (Where)

    • 作用域定义了权限适用的范围。Azure RBAC 的权限可以在四个级别进行分配,且具有继承性(子级别会继承父级别的权限):
      • 管理组 (Management Group): 最高级别,通常用于跨订阅管理策略和合规性。
      • 订阅 (Subscription): 管理账单和所有资源。
      • 资源组 (Resource Group): 逻辑上组织相关资源(如虚拟机、网络、存储账户)。
      • 资源 (Resource): 单个资源实例,如特定的虚拟机、存储账户或虚拟网络。

RBAC 的工作原理:

当你尝试执行某个操作时,Azure 会检查你是否拥有足够的权限:

  1. 身份验证: 首先,Azure 会验证你的身份(通过 Azure AD)。
  2. 授权:
    • Azure 会查找你在该操作所针对资源的所有父级作用域(从资源本身到管理组)上拥有的所有角色分配。
    • 它会评估这些角色定义中定义的 ActionsNotActions
    • 如果至少有一个角色授予了执行该操作的权限,并且没有其他角色明确拒绝该操作,那么你就被授权执行该操作。

核心优势:

  • 精细权限控制: 可以精确到单个资源,只授予用户完成其工作所需的最小权限(最小特权原则)。
  • 集中管理: 统一在 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 是管理云资源访问权限的基石,它通过精细的角色和作用域定义,确保只有被授权的用户和应用程序才能执行其所需的特定操作,从而构建一个安全、合规的云环境。