你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure 角色分配条件授予对 Azure Blob 存储的访问权限

基于属性的访问控制 (ABAC) 是一个授权策略,根据与安全主体、资源、环境以及请求本身关联的属性定义访问级别。 使用 ABAC,可以基于使用这些属性表达为谓词的条件向安全主体授予对资源的访问权限。

Azure ABAC 构建在 Azure 基于角色的访问控制 (Azure RBAC) 基础之上,添加了 Azure 角色分配的条件。 它使你能够基于主体、资源、请求和环境属性创建角色分配条件。

重要

Azure 基于属性的访问控制 (Azure ABAC) 已正式发布 (GA),用于使用标准和高级存储帐户性能层中的 requestresourceenvironmentprincipal 属性控制对 Azure Blob 存储、Azure Data Lake Storage Gen2 和 Azure 队列的访问。 目前,“容器元数据”资源属性和“列出 blob 操作的所含内容”请求属性处于预览状态。 有关 Azure 存储 ABAC 的完整功能状态信息,请参阅 Azure 存储中条件功能的状态

有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

Azure 存储中的条件概述

可以使用 Microsoft Entra ID (Microsoft Entra ID) 通过 Azure RBAC 来授权对 Azure 存储资源的请求。 Azure RBAC 可帮助你通过使用角色定义和角色分配定义谁有权访问资源以及他们可对这些资源执行哪些操作,来管理对资源的访问。 Azure 存储定义了一组 Azure 内置角色,它们包含用于访问 Azure 存储数据的通用权限集。 还可以定义具有选定权限集的自定义角色。 Azure 存储支持存储帐户和 Blob 容器的角色分配。

Azure ABAC 构建在 Azure RBAC 基础之上,它在特定操作上下文中添加了角色分配条件。 角色分配条件是在为针对存储资源的操作授权时评估的附加检查。 此条件表达为谓词,该谓词使用与下列其中任何一项关联的属性:

  • 请求授权的安全主体
  • 请求访问的资源
  • 请求参数
  • 发出请求的环境

使用角色分配条件的好处如下:

  • 实现对资源的更精细访问 - 例如,如果你希望仅当你存储帐户中的 Blob 标记为 Project=Sierra 时,才向用户授予对这些 Blob 的读取访问权限,则可以使用标记作为属性,针对读取操作使用条件。
  • 减少必须创建和管理的角色分配数量 - 为此,可对某个安全组使用通用角色分配,然后使用一个条件来限制该组中各个成员的访问权限,该条件会对主体的属性与所要访问的特定资源(例如 Blob 或容器)的属性进行匹配。
  • 使用具有业务含义的属性来表达访问控制规则 - 例如,可以使用代表项目名称、业务应用程序、组织职能或分类级别的属性来表达条件。

使用条件的弊端是在整个组织中使用属性时需要结构化且一致的分类。 必须保护属性以防止访问权限被恶意利用。 此外,必须认真设计并评审条件的影响。

Azure Blob 存储支持 Azure 存储中的角色分配条件。 还可以将条件用于启用了分层命名空间 (HNS) 功能的帐户 (Data Lake Storage Gen2)。

支持的属性和操作

可以针对 DataActions 配置角色分配条件以实现这些目标。 可以将条件用于自定义角色,或选择内置角色。 请注意,不支持通过存储资源提供程序为管理操作使用条件。

可以向内置角色或自定义角色添加条件。 可对其使用角色分配条件的内置角色包括:

可将条件用于自定义角色,但前提是该角色包含支持条件的操作

如果使用基于 Blob 索引标记的条件,则应使用“存储 Blob 数据所有者”,因为此角色包括标记操作的权限。

注意

使用分层命名空间的 Data Lake Storage Gen2 存储帐户不支持 Blob 索引标记。 不应在启用了 HNS 的存储帐户上使用索引标记创建角色分配条件。

Azure 角色分配条件格式允许在条件中使用 @Principal@Resource@Request@Environment 属性。 @Principal 属性是主体(例如用户、企业应用程序(服务主体)或托管标识)上的自定义安全属性。 @Resource 属性是指正在访问的存储资源(例如存储帐户、容器或 Blob)的现有属性。 @Request 属性是指存储操作请求中包含的属性或参数。 属性 @Environment 是指网络环境或请求的日期和时间。

Azure RBAC 对每个订阅支持的角色分配数量有限。 如果需要创建数千个 Azure 角色分配,可能会遇到此限制。 管理数百甚至数千个角色分配可能很有难度。 在某些情况下,可以使用条件来减少存储帐户上的角色分配数量,使其更易于管理。 可以使用主体的条件和 Microsoft Entra 自定义安全属性调整角色分配的管理

Azure 存储中的条件功能的状态

Azure 基于属性的访问控制 (Azure ABAC) 已正式发布 (GA),用于使用标准和高级存储帐户性能层中的 requestresourceenvironmentprincipal 属性控制对 Azure Blob 存储、Azure Data Lake Storage Gen2 和 Azure 队列的访问。 目前,“容器元数据”资源属性和“列出 blob 操作的所含内容”请求属性处于预览状态。

下表按存储资源类型和属性类型显示 ABAC 的当前状态。 还会显示特定属性的异常。

资源类型 特性类型 属性 可用性
Blob
Data Lake Storage Gen2
队列
请求
资源
环境
主体
除此表中注明的属性外的所有属性 GA
Data Lake Storage Gen2 资源 快照 预览
Blob
Data Lake Storage Gen2
资源 容器元数据 预览
Blob 请求 列出 blob include 预览

有关 beta 版本、预览版或尚未正式发布的版本的 Azure 功能所适用的法律条款,请参阅 Microsoft Azure 预览版的补充使用条款

注意

使用分层命名空间 (HNS) 的 Data Lake Storage Gen2 存储帐户不支持某些存储功能。 若要了解详细信息,请参阅 Blob 存储功能支持

为存储帐户启用分层命名空间时,不支持以下 ABAC 属性:

后续步骤

请参阅