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

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

什么是角色分配条件?

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

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

为何要使用条件?

使用角色分配条件主要有三个优点:

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

条件的示例场景

在一些场景中,你可能想要将条件添加到角色分配。 下面是一些示例。

  • 读取访问标记为 Project=Cascade 的 Blob
  • 新的 Blob 必须包含标记 Project=Cascade
  • 现有 Blob 必须至少标记有一个 Project 键或 Program 键
  • 现有 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)(当前日期和时间(协调世界时))
  • 版本 ID

条件是什么样的?

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

Diagram of role assignment with a condition.

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

Diagram of access is not allowed with a condition.

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

Screenshot of condition editor in Azure portal showing build expression section with values for blob index tags.

下面是条件在代码中的呈现效果:

(
    (
        !(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 角色分配条件格式和语法

条件功能的状态

条件的某些功能仍为预览版。 下表列出了条件功能的状态:

功能 状态 日期
在条件中使用环境属性 预览 2023 年 4 月
使用 Azure 门户中的条件编辑器添加条件 GA 2022 年 10 月
使用 Azure PowerShellAzure CLIREST API 添加条件 GA 2022 年 10 月
对 Azure 存储资源、访问属性类型和存储帐户性能层的特定组合使用资源和请求属性。 有关详细信息,请参阅 Azure 存储中的条件功能的状态 GA 2022 年 10 月
条件中的主体使用自定义安全属性 GA 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。
角色分配条件 可选择性地添加到角色分配中的一项额外检查,可提供更精细的访问控制。
attribute 在此上下文中,键值对 Project=Blue 中的 Project 是属性键,Blue 是属性值。 在访问控制方面,属性和标记是同义词。
expression 在条件中计算得到 true 或 false 的语句。 表达式的格式为 <attribute><operator><value>。

限制

下面是对条件的一些限制。

资源 限制 说明
使用可视化编辑器时每个条件的表达式数 5 可以使用代码编辑器添加五个以上的表达式

已知问题

下面是条件存在的已知问题:

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

后续步骤