什么是基于 Azure 属性的访问控制(Azure ABAC)?

基于属性的访问控制 (ABAC) 是一种授权系统,它根据与访问请求的安全主体、资源和环境相关联的属性来定义访问。 使用 ABAC,可以基于属性授予对资源的安全主体访问权限。 Azure ABAC 是 Azure 中 ABAC 的实现。

什么是角色分配条件?

Azure 基于角色的访问控制(Azure RBAC) 是一种授权系统,可帮助你管理谁有权访问 Azure 资源、他们可以对这些资源执行的作以及他们有权访问的区域。 在大多数情况下,Azure RBAC 将使用角色定义和角色分配提供所需的访问管理。 但是,在某些情况下,你可能想要提供更精细的访问管理或简化数百个角色分配的管理。

Azure ABAC 构建在 Azure RBAC 之上,它在特定操作上下文中根据属性添加角色分配条件。 角色分配条件是一项额外的检查,你可以选择添加到角色分配,以提供更精细的访问控制。 条件会筛选出作为角色定义和角色分配的一部分授予的权限。 例如,为了读取对象,你可添加要求对象具有特定标记的条件。 你无法使用条件显式拒绝对特定资源的访问。

结合使用 Azure RBAC 和 Azure ABAC 可集成这两种访问控制模型的优势。 由于 Azure RBAC 与业务逻辑的紧密配合,Azure RBAC 更直接地实现,而 Azure ABAC 在某些关键方案中提供了更大的灵活性。 通过结合这两种方法,组织可以实现更复杂的授权级别。

为何使用条件?

使用角色分配条件有三个主要好处:

  • 提供更精细的访问控制 - 角色分配使用包含操作和数据操作的角色定义来授予安全主体权限。 可以编写条件来筛选这些权限,以便进行更精细的访问控制。 您还可以向特定动作添加条件。 例如,只有在 Blob 被标记为 Project=Blue 时,才能向 John 授予对订阅中的 Blob 的读取访问权限。
  • 帮助减少角色分配数 - 每个 Azure 订阅当前都有角色分配限制。 在某些情况下,需要数千个角色分配。 所有这些角色分配都必须进行管理。 在这些方案中,可以添加条件以显著减少角色分配。
  • 使用具有特定业务含义的属性 - 条件允许在访问控制中使用具有特定业务含义的属性。 属性的一些示例包括项目名称、软件开发阶段和分类级别。 随着用户跨团队和项目移动,这些资源属性的值是动态的,更改。

条件示例

在某些情况下,可能需要向角色分配添加条件。 下面是一些示例。

  • 读取访问标记为 Project=Cascade 的 Blob
  • 新的 Blob 必须包含标记 Project=Cascade
  • 现有的数据块必须标记至少一个项目密钥或程序密钥
  • 现有 Blob 必须标记有一个 Project 键以及 Cascade、Baker 或 Skagit 值
  • 在名为 blobs-example-container 的容器中读取、写入或删除 Blob
  • 读取访问名为 blobs-example-container 且路径为 readonly 的容器中 Blob
  • 写入访问名为 Contosocorp 且路径为 uploads/contoso 的容器中的 Blob
  • 读取访问标记为 Program=Alpine 且路径为 logs 的 Blob
  • 对带有标记 Project=Baker 的 Blob 的读取访问权限,并且用户具有匹配的属性 Project=Baker
  • 在特定日期/时间范围内对 Blob 进行读取访问。
  • 仅通过专用链接或从特定子网对 Blob 进行写入访问。

有关如何创建这些示例的详细信息,请参阅 Blob 存储的示例 Azure 角色分配条件

可以在何处添加条件?

目前,可将条件添加到包含 Blob 存储或队列存储数据操作的内置或自定义角色分配。 在与角色分配相同的范围内添加条件。 与角色分配一样,必须具有 Microsoft.Authorization/roleAssignments/write 添加条件的权限。

下面是可在条件中使用的一些 blob 存储属性

  • 帐户名
  • blob 索引标记
  • Blob 路径
  • Blob 前缀
  • 容器名称
  • 加密范围名称
  • 是当前版本
  • 层次结构命名空间是否已启用
  • 是专用链接
  • 快照
  • UTC 现在(协调世界时中的当前日期和时间)
  • 版本标识符

条件是什么样的?

可以向新的或现有的角色分配添加条件。 下面是已在资源组范围分配给名为 Chandra 的用户的存储 Blob 数据读取者。 还添加了一个条件,仅允许使用标记 Project=Cascade 对 Blob 进行读取访问。

具有条件的角色分配关系图。

如果 Chandra 尝试读取没有 Project=Cascade 标记的 Blob,则访问将被阻止。

示意图显示了在某种条件下不允许访问。

下面是条件在 Azure 门户中的呈现效果:

Azure 门户中条件编辑器的屏幕截图,其中显示了包含 Blob 索引标记值的生成表达式部分。

下面是代码中条件的样子:

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
        AND NOT
        SubOperationMatches{'Blob.List'})
    )
    OR
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'
    )
)

有关条件格式的详细信息,请参阅 Azure 角色分配条件格式和语法

条件功能的状态

下表列出了条件功能的状态:

功能 / 特点 状态 日期
在条件中使用环境属性 乔治亚州 2024 年 4 月
Azure 门户中使用条件编辑器添加条件 乔治亚州 2022 年 10 月
使用 Azure PowerShellAzure CLIREST API 添加条件 乔治亚州 2022 年 10 月
对 Azure 存储资源、访问属性类型和存储帐户性能层的特定组合使用 资源和请求属性 。 有关详细信息,请参阅 Azure 存储中条件功能的状态 乔治亚州 2022 年 10 月
对条件中的主体使用自定义安全属性 乔治亚州 2023 年 11 月

条件和 Microsoft Entra PIM

你还可以使用 Microsoft Entra Privileged Identity Management (Microsoft Entra PIM) 为 Azure 资源的符合条件的角色分配添加条件。 使用 Microsoft Entra PIM 时,最终用户必须激活符合条件的角色分配,才能获得执行特定操作的权限。 使用 Microsoft Entra PIM 中的条件不仅可以限制用户使用细粒度条件访问资源,还可以使用 Microsoft Entra PIM 通过时间限制设置、审批工作流、审核线索等来保护资源。 有关详细信息,请查看在 Privileged Identity Management 中分配 Azure 资源角色

术语

若要更好地了解 Azure RBAC 和 Azure ABAC,可以参考以下术语列表。

术语 定义
基于属性的访问控制 (ABAC) 基于与安全主体、资源和环境关联的属性定义访问权限的授权系统。 使用 ABAC,可以基于属性授予对资源的安全主体访问权限。
Azure ABAC 是指为 Azure 实现 ABAC。
角色分配条件 可选择性地添加到角色分配中的一项额外检查,可提供更精细的访问控制。
属性 在此上下文中,键值对(如 Project=Blue),其中 Project 是属性键,Blue 是属性值。 属性和标记是访问控制目的的同义词。
表达式 在条件中计算得到 true 或 false 的语句。 表达式的格式为<属性><运算符><值>。

限制

下面是条件的一些限制。

资源 限度 注释
视觉编辑器中每个条件的表达式数量 5 可以使用代码编辑器添加五个以上的表达式

已知问题

下面是条件的已知问题:

  • 如果你使用 Microsoft Entra Privileged Identity Management (PIM) 和自定义安全属性,则添加条件时,“主体”不会出现在“属性源”中。

后续步骤