Blob 存储的 Azure 角色分配条件示例

本文列出了控制 Azure Blob 存储访问权限的角色分配条件的一些示例。

重要

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

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

先决条件

有关添加或编辑角色分配条件的先决条件的信息,请参阅有关条件的先决条件

本文中的示例摘要

使用下表快速找到适合 ABAC 方案的示例。 该表包含方案的简要说明,并按(环境、主体、请求和资源)列出了示例中使用的属性。

示例 环境 主体 请求 资源
读取带 Blob 索引标记的 Blob 标记
新 Blob 必须包含 Blob 索引标记 标记
现有 Blob 必须具有 Blob 索引标记键 标记
现有 blob 必须具有 blob 索引标记键和值 标记
读取、写入或删除命名容器中的 Blob 容器名称
使用路径读取命名容器中的 Blob 容器名称
Blob 路径
使用路径读取或列出命名容器中的 Blob Blob 前缀 容器名称
Blob 路径
使用路径写入命名容器中的 Blob 容器名称
Blob 路径
使用 Blob 索引标记和路径读取 Blob 标记
Blob 路径
读取包含特定元数据的容器中的 Blob 容器元数据
在包含特定元数据的容器中写入或删除 Blob 容器元数据
仅读取当前 Blob 版本 isCurrentVersion
读取当前 Blob 版本和特定 Blob 版本 versionId isCurrentVersion
删除旧 Blob 版本 versionId
读取当前 Blob 版本和任何 Blob 快照 快照 isCurrentVersion
允许列出 Blob 操作包含 Blob 元数据、快照或版本 列出 blob 包含
将列出 Blob 操作限制为不能包含 Blob 元数据 列出 blob 包含
仅读取已启用分层命名空间的存储帐户 isHnsEnabled
读取具有特定加密范围的 Blob 加密范围名称
在具有特定加密范围的命名存储帐户中读取或写入 Blob 存储帐户名称
加密范围名称
基于 Blob 索引标记和自定义安全属性读取或写入 Blob ID 标记 标记
基于 Blob 索引标记和多值自定义安全属性读取 Blob ID 标记
允许在特定日期和时间之后对 Blob 进行读取访问 UtcNow 容器名称
允许从特定子网访问特定容器中的 Blob 子网 容器名称
需要专用链接访问权限才能读取具有高敏感度的 Blob isPrivateLink 标记
仅允许从特定专用终结点对容器进行读取访问 专用终结点 容器名称
示例:仅允许从特定专用终结点读取高度敏感的 Blob 数据,并由标记具有访问权限的用户进行读取访问 专用终结点 ID 标记

Blob 索引标记

本部分包括涉及 Blob 索引标记的示例。

重要

尽管目前支持 Read content from a blob with tag conditions 子操作以便与 ABAC 功能预览期间实现的条件兼容,但该子操作已弃用,Azure 建议改用 Read a blob 操作。

在 Azure 门户中配置 ABAC 条件时,可能会出现“已弃用: 从具有标记条件的 Blob 中读取内容”。 Azure 建议删除该操作并将其替换为 Read a blob 操作。

如果要创作自己的条件,希望通过标记条件来限制读取访问,请参阅示例:使用 Blob 索引标记读取 Blob

示例:使用 blob 索引标记读取 blob

此条件允许用户读取 blob 索引标记键为 Project 且标记值为 Cascade 的 blob。 不允许尝试访问没有此键值标记的 blob。

为了使此条件对安全主体有效,必须将它添加到包含以下操作的所有角色分配:

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示对带有 blob 索引标记的 blob 进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户视觉编辑器添加此条件的设置。

条件 #1 设置
操作 读取 blob
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 {keyName}
操作员 StringEquals
{keyValue}

Azure 门户中条件编辑器的屏幕截图,显示了对带有 blob 索引标记的 blob 进行读取访问。

示例:新 blob 必须包含 blob 索引标记

此条件要求所有新的 blob 必须包含 blob 索引标记键 Project 和标记值 Cascade。

有两个操作允许创建新的 blob,因此必须以获取这两个操作作为目标。 必须将此条件添加到包含以下操作之一的任何角色分配:

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示了新的 blob 必须包含标记的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 写入到具有 blob 索引标记的 blob
写入到具有 blob 索引标记的 blob
特性源 请求
特性 blob 索引标记 [键中的值]
密钥 {keyName}
操作员 StringEquals
{keyValue}

Azure 门户中条件编辑器的屏幕截图,显示了新的 blob 必须包含 blob 索引标记。

示例:现有 blob 必须具有 blob 索引标记键

此条件要求使用至少一个允许的 blob 索引标记键(Project 或 Program)标记任何现有 blob。 该条件适用于向现有 blob 添加治理。

有两个操作允许更新现有 blob 上的标记,因此必须以获取这两个权限为目标。 必须将此条件添加到包含以下操作之一的任何角色分配:

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示现有 blob 必须具有 blob 标记键的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 写入到具有 blob 索引标记的 blob
写入 blob 索引标记
特性源 请求
特性 blob 索引标记 [键]
运算符 ForAllOfAnyValues:StringEquals
{keyName1}
{keyName2}

Azure 门户中条件编辑器的屏幕截图,显示了现有 blob 必须具有 blob 标记键。

示例:现有 blob 必须具有 blob 索引标记键和值

此条件要求任何现有 blob 均需具有 blob 索引标记键 Project 和标记值 Cascade、Baker 或 Skagit。 该条件适用于向现有 blob 添加治理。

有两个操作允许更新现有 blob 上的标记,因此必须以获取这两个权限为目标。 必须将此条件添加到包含以下操作之一的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示现有 blob 必须具有 blob 索引标记键和值的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 写入到具有 blob 索引标记的 blob
写入 blob 索引标记
特性源 请求
特性 blob 索引标记 [键]
运算符 ForAnyOfAnyValues:StringEquals
{keyName}
操作员
表达式 2
特性源 请求
特性 blob 索引标记 [键中的值]
密钥 {keyName}
操作员 ForAllOfAnyValues:StringEquals
{keyValue1}
{keyValue2}
{keyValue3}

Azure 门户中条件编辑器的屏幕截图,显示了现有 blob 必须具有 blob 标记键和值。

Blob 容器名称或路径

本部分包含一些示例,它们演示了如何根据容器名称或 Blob 路径来限制对对象的访问。

示例:读取、写入或删除命名容器中的 blob

该条件允许用户读取、写入或删除名为 blob-example-container 的存储容器中的 blob。 该条件适用于与订阅中的其他用户共享特定存储容器。

有五个操作用于读取、写入和删除现有 blob。 必须将此条件添加到包含以下操作之一的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。
如果此条件中包含的存储帐户已启用分层命名空间或将来可能启用,则请添加。

在该条件下不使用子操作,因为只有在条件为基于标记创作时才需要子操作。

显示读取、写入或删除命名容器中的 blob 的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

Azure 门户中条件编辑器的屏幕截图,显示了读取、写入或删除命名容器中的 blob。

示例:使用路径读取命名容器中的 blob

该条件允许使用 blob 路径 readonly/* 对名为 blob-example-container 的存储容器进行读取访问。 该条件适用于与订阅中的其他用户共享存储容器的特定部分以进行读取访问。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。
如果此条件中包含的存储帐户已启用分层命名空间或将来可能启用,则请添加。

显示使用路径对命名容器中的 blob 进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 容器名称
运算符 StringEquals
{containerName}
表达式 2
操作员
特性源 资源
特性 Blob 路径
运算符 StringLike
{pathString}

Azure 门户中条件编辑器的屏幕截图,显示了使用路径对命名容器中的 blob 进行读取访问。

示例:使用路径读取或列出命名容器中的 blob

此条件允许使用 blob 路径 readonly/* 对名为 blob-example-container 的存储容器进行读取访问和列出访问。 条件 #1 适用于除列出 blob 之外的读取操作。 条件 #2 适用于列出 blob。 此条件适用于与订阅中的其他用户共享存储容器的特定部分以进行读取或列出访问。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。
如果此条件中包含的存储帐户已启用分层命名空间或将来可能启用,则请添加。

显示使用路径对命名容器中的 blob 进行读取和列出访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

注意

Azure 门户使用 prefix='' 列出容器根目录中的 blob。 使用前缀 StringStartsWith 'readonly/' 通过列出 blob 操作添加条件后,目标用户将无法在 Azure 门户中列出容器根目录中的 blob。

条件 #1 设置
操作 读取 blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 容器名称
运算符 StringEquals
{containerName}
表达式 2
操作员
特性源 资源
特性 Blob 路径
运算符 StringStartsWith
{pathString}
条件 #2 设置
操作 列出 Blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 容器名称
运算符 StringEquals
{containerName}
表达式 2
操作员
特性源 请求
特性 Blob 前缀
运算符 StringStartsWith
{pathString}

示例:使用路径在命名容器中写入 blob

该条件允许合作伙伴(Microsoft Entra 来宾用户)通过 uploads/contoso/* 路径将文件放入名为 Contosocorp 的存储容器。 该条件适用于允许其他用户将数据放入存储容器。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。
如果此条件中包含的存储帐户已启用分层命名空间或将来可能启用,则请添加。

显示使用路径对命名容器中的 blob 进行写入访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 写入到 blob
创建 blob 或快照,或追加数据
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 容器名称
运算符 StringEquals
{containerName}
表达式 2
操作员
特性源 资源
特性 Blob 路径
运算符 StringLike
{pathString}

Azure 门户中条件编辑器的屏幕截图,显示了使用路径对命名容器中的 blob 进行写入访问。

示例:使用 blob 索引标记和路径读取 blob

该条件允许用户读取 blob 索引标记键为 Program、标记值为 Alpine 且 blob 路径为 logs* 的 blob。 blob 路径 logs* 还包括 blob 名称。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示对带有 blob 索引标记和路径的 blob 进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 {keyName}
操作员 StringEquals
{keyValue}

Azure 门户中条件 1 编辑器的屏幕截图,显示了对带有 blob 索引标记和路径的 blob 进行读取访问。

条件 #2 设置
操作 读取 blob
特性源 资源
特性 Blob 路径
运算符 StringLike
{pathString}

Azure 门户中条件 2 编辑器的屏幕截图,显示了对带有 blob 索引标记和路径的 blob 进行读取访问。

Blob 容器元数据

示例:读取包含特定元数据的容器中的 Blob

此条件允许用户使用特定元数据键/值对读取 Blob 容器中的 Blob。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
特性源 资源
属性 容器元数据
运算符 StringEquals
{containerName}

Azure 门户中条件编辑器的屏幕截图,显示了容器中具有特定元数据的读取 blob。

示例:在包含特定元数据的容器中写入或删除 Blob

此条件允许用户使用特定元数据键/值对写入或删除 Blob 容器中的 Blob。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 写入到 blob
删除 Blob
特性源 资源
属性 容器元数据
运算符 StringEquals
{containerName}

Azure 门户中条件编辑器的屏幕截图,显示了在具有特定元数据的容器中写入和删除 Blob。

Blob 版本或 blob 快照

本部分包含一些示例,它们演示了如何根据容器版本或快照来限制对对象的访问。

示例:仅读取当前 blob 版本

此条件允许用户仅读取当前 blob 版本。 用户无法读取其他 blob 版本。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

仅显示对当前 blob 版本进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 是否为当前版本
运算符 BoolEquals
True

示例:读取当前 blob 版本和特定 blob 版本

此条件允许用户读取当前 blob 版本以及版本 ID 为 2022-06-01T23:38:32.8883645Z 的 blob。 用户无法读取其他 blob 版本。 版本 ID 属性仅适用于未启用分层命名空间的存储帐户。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read

显示对特定 blob 版本进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
特性源 请求
特性 版本 ID
运算符 DateTimeEquals
<blobVersionId>
表达式 2
操作员
特性源 资源
特性 是否为当前版本
运算符 BoolEquals
True

示例:删除旧 blob 版本

此条件允许用户删除早于 2022 年 6 月 1 日的 blob 版本以执行清理。 版本 ID 属性仅适用于未启用分层命名空间的存储帐户。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/deleteBlobVersion/action

显示对旧的 blob 版本进行删除访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 删除 Blob
删除 blob 的版本
特性源 请求
特性 版本 ID
运算符 DateTimeLessThan
<blobVersionId>

示例:读取当前 blob 版本和任何 blob 快照

此条件允许用户读取当前 blob 版本和任何 blob 快照。 版本 ID 属性仅适用于未启用分层命名空间的存储帐户。 快照属性适用于未启用分层命名空间的存储帐户,当前为已启用分层命名空间的存储帐户提供预览版。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示对当前 blob 版本和任何 blob 快照进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 请求
特性 快照
Exists 已选中
表达式 2
操作员
特性源 资源
特性 是否为当前版本
运算符 BoolEquals
True

示例:允许列出 Blob 操作包含 Blob 元数据、快照或版本

此条件允许用户列出容器中的 Blob,并包括元数据、快照和版本信息。 列出 Blob 包含属性适用于未启用分层命名空间的存储帐户。

注意

列出 Blob 包含是一个请求属性,通过在调用列出 Blob 操作时允许或限制 include 参数中的值来发挥作用。 使用叉积比较运算符include 参数中的值与条件中指定的值进行比较。 如果比较结果为 true,则允许 List Blobs 请求。 如果比较结果为 false,则拒绝 List Blobs 请求。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 列出 Blob
特性源 请求
属性 列出 blob 包含
运算符 ForAllOfAnyValues:StringEqualsIgnoreCase
{'metadata', 'snapshots', 'versions'}

Azure 门户中条件编辑器的屏幕截图,显示了一个允许用户列出容器中的 blob 并包含元数据、快照和版本信息的条件。

示例:将列出 Blob 操作限制为不能包含 Blob 元数据

当请求中包含元数据时,此条件会限制用户列出 Blob。 列出 Blob 包含属性适用于未启用分层命名空间的存储帐户。

注意

列出 Blob 包含是一个请求属性,通过在调用列出 Blob 操作时允许或限制 include 参数中的值来发挥作用。 使用叉积比较运算符include 参数中的值与条件中指定的值进行比较。 如果比较结果为 true,则允许 List Blobs 请求。 如果比较结果为 false,则拒绝 List Blobs 请求。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 列出 Blob
特性源 请求
属性 列出 blob 包含
运算符 ForAllOfAllValues:StringNotEquals
{'metadata'}

Azure 门户中条件编辑器的屏幕截图,显示了一个当请求中包含元数据时会限制用户列出 Blob 的条件。

分层命名空间

本部分包含一些示例,它们演示了如何根据是否已为存储帐户启用分层命名空间来限制对对象的访问。

示例:仅读取已启用分层命名空间的存储帐户

此条件允许用户仅读取已启用分层命名空间的存储帐户中的 blob。 此条件仅适用于资源组范围或更大范围。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示对启用了分层命名空间的存储帐户进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
帐户的所有数据操作均已启用分层命名空间(如果适用)
特性源 资源
特性 层次结构命名空间是否已启用
运算符 BoolEquals
True

加密范围

本部分包含一些示例,它们演示了如何限制对具有已批准加密范围的对象的访问。

示例:读取具有特定加密范围的 blob

此条件允许用户读取使用加密范围 validScope1validScope2 加密的 blob。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

显示对具有加密范围 validScope1 或 validScope2 的 blob 进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
特性源 资源
特性 加密范围名称
运算符 ForAnyOfAnyValues:StringEquals
<scopeName>

示例:在具有特定加密范围的命名存储帐户中读取或写入 blob

此条件允许用户在名为 sampleaccount 并使用加密范围 ScopeCustomKey1 加密的存储帐户中读取或写入 blob。 如果 blob 未使用 ScopeCustomKey1 加密或解密,则请求将返回禁止。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

注意

由于不同存储帐户的加密范围可能不同,因此建议将 storageAccounts:name 特性与 encryptionScopes:name 特性结合使用,以限制允许的特定加密范围。

显示对具有加密范围 ScopeCustomKey1 的示例帐户存储帐户中的 blob 进行读取或写入访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 blob
写入到 blob
创建 blob 或快照,或追加数据
特性源 资源
特性 帐户名称
运算符 StringEquals
<accountName>
表达式 2
操作员
特性源 资源
特性 加密范围名称
运算符 ForAnyOfAnyValues:StringEquals
<scopeName>

主体属性

本部分包含一些示例,它们演示了如何根据自定义安全主体来限制对对象的访问。

示例:基于 blob 索引标记和自定义安全属性读取或写入 blob

如果用户具有与 blob 索引标记匹配的自定义安全属性,则此条件允许对 blob 进行读取或写入访问。

例如,如果 Brenda 具有特性 Project=Baker,则她只能读取和写入具有 Project=Baker blob 索引标记的 blob。 同样,Chandra 只能读取和写入具有 Project=Cascade 的 blob。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

有关详细信息,请参阅基于标记和自定义安全属性允许对 Blob 进行读取访问

显示对基于 blob 索引标记和自定义安全属性的 blob 进行读取或写入访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 Blob 条件
特性源 主体
Attribute <attributeset>_<key>
操作员 StringEquals
选项 Attribute
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 <键>
条件 #2 设置
操作 写入到具有 blob 索引标记的 blob
写入到具有 blob 索引标记的 blob
特性源 主体
Attribute <attributeset>_<key>
操作员 StringEquals
选项 Attribute
特性源 请求
特性 blob 索引标记 [键中的值]
密钥 <键>

示例:基于 blob 索引标记和多值自定义安全属性读取 blob

如果用户的自定义安全属性具有任何与 blob 索引标记匹配的值,则此条件允许对 blob 进行读取访问。

例如,如果 Chandra 的 Project 属性具有值 Baker 和 Cascade,则她只能读取带 Project=BakerProject=Cascade Blob 索引标记的 Blob。

必须将此条件添加到包含以下操作的任何角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

有关详细信息,请参阅基于标记和自定义安全属性允许对 Blob 进行读取访问

显示对基于 blob 索引标记和多值自定义安全属性的 blob 进行读取访问的条件图。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户添加此条件的设置。

条件 #1 设置
操作 读取 Blob 条件
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 <键>
操作员 ForAnyOfAnyValues:StringEquals
选项 Attribute
特性源 主体
Attribute <attributeset>_<key>

环境属性

本部分包含一些示例,它们演示了如何根据网络环境或当前日期和时间来限制对对象的访问。

示例:允许在特定日期和时间之后对 Blob 进行读取访问

此条件仅允许在协调世界时 (UTC) 2023 年 5 月 1 日下午 1 点之后对 Blob 容器 container1 进行读取访问。

读取现有 Blob 有两种可能的操作。 为了使此条件对具有多个角色分配的主体有效,必须将该条件添加到包含以下任何操作的所有角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

添加操作

选择“添加操作”,然后仅选择“读取 Blob”子操作,如下表所示。

操作 子操作
所有读取操作 读取 blob

请不要选择顶层“所有读取操作”操作或任何其他子操作,如下图所示:

Azure 门户中条件编辑器的屏幕截图,它显示了仅选择读取操作。

生成表达式

使用下表中的值生成条件的表达式部分:

设置
特性源 资源
特性 容器名称
运算符 StringEquals
container1
逻辑运算符 'AND'
特性源 环境
属性 UtcNow
操作员 DateTimeGreaterThan
2023-05-01T13:00:00.000Z

下图显示了将设置输入到 Azure 门户后的情况。 必须对表达式进行分组以确保计算正确。

Azure 门户中条件编辑器的屏幕截图,它显示了特定日期和时间后允许的读取访问。

示例:允许从特定子网访问特定容器中的 Blob

此条件仅允许从虚拟网络 virtualnetwork1 上的子网 default 读取、写入、添加和删除 container1 中的 Blob。 若要在本示例中使用子网属性,子网必须为 Azure 存储启用服务终结点

对现有 Blob 执行读取、写入、添加和删除有五种可能的操作。 为了使此条件对具有多个角色分配的主体有效,必须将该条件添加到包含以下任何操作的所有角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

添加操作

选择“添加操作”,然后仅选择下表中显示的顶层操作。

操作 子操作
所有读取操作 n/a
写入到 blob n/a
创建 blob 或快照,或追加数据 n/a
删除 Blob 不适用

请不要选择任何单独的子操作,如下图所示:

Azure 门户中条件编辑器的屏幕截图,它显示了选择读取、写入、添加和删除操作。

生成表达式

使用下表中的值生成条件的表达式部分:

设置
特性源 资源
特性 容器名称
运算符 StringEquals
container1
逻辑运算符 'AND'
特性源 环境
属性 子网
操作员 StringEqualsIgnoreCase
/subscriptions/<your subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/virtualnetwork1/subnets/default

下图显示了将设置输入到 Azure 门户后的情况。 必须对表达式进行分组以确保计算正确。

Azure 门户中条件编辑器的屏幕截图,它显示了允许从特定子网对特定容器进行读取访问。

此条件要求请求读取 Blob,其中 Blob 索引标记敏感度具有 high 值,可通过专用链接(任何专用链接)进行访问。 这意味着从公共 Internet 读取高度敏感的 Blob 的所有尝试都会被禁止。 用户可以从公共 Internet 读取敏感度设置为 high 以外的某个值的 Blob。

此 ABAC 示例条件的真值表如下所示:

操作 敏感性 专用链接 Access
读取 blob high 允许
读取 blob high 不允许
读取 blob 不高 允许
读取 blob 不高 允许

读取现有 Blob 有两种可能的操作。 为了使此条件对具有多个角色分配的主体有效,必须将该条件添加到包含以下任何操作的所有角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户中的可视化条件编辑器添加此条件的设置。

添加操作

选择“添加操作”,然后仅选择“读取 Blob”子操作,如下表所示。

操作 子操作
所有读取操作 读取 blob

请不要选择顶层“所有读取操作”操作或任何其他子操作,如下图所示:

Azure 门户中条件编辑器的屏幕截图,它显示了仅选择读取操作。

生成表达式

使用下表中的值生成条件的表达式部分:

Group 设置
组 #1
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 sensitivity
操作员 StringEquals
high
逻辑运算符 'AND'
特性源 环境
属性 是专用链接
运算符 BoolEquals
True
组 #1 结束
逻辑运算符 'OR'
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 sensitivity
操作员 StringNotEquals
high

下图显示了将设置输入到 Azure 门户后的情况。 必须对表达式进行分组以确保计算正确。

Azure 门户中条件编辑器的屏幕截图,它显示需要专用链接才能对敏感数据进行读取访问。

示例:仅允许从特定专用终结点对容器进行访问

此条件要求通过名为 privateendpoint1 的专用终结点对存储容器 container1 中的 Blob 执行所有读取、写入、添加和删除操作。 对于未命名为 container1 的所有其他容器,不需要通过专用终结点进行访问。

对现有 Blob 执行读取、写入和删除有五种可能的操作。 为了使此条件对具有多个角色分配的主体有效,必须将该条件添加到包含以下任何操作的所有角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/add/action
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/delete
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。
如果此条件中包含的存储帐户已启用分层命名空间或将来可能启用,则请添加。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户中的可视化条件编辑器添加此条件的设置。

添加操作

选择“添加操作”,然后仅选择下表中显示的顶层操作。

操作 子操作
所有读取操作 n/a
写入到 blob n/a
创建 blob 或快照,或追加数据 n/a
删除 Blob 不适用

请不要选择任何单独的子操作,如下图所示:

Azure 门户中条件编辑器的屏幕截图,它显示了选择读取、写入、添加和删除操作。

生成表达式

使用下表中的值生成条件的表达式部分:

Group 设置
组 #1
特性源 资源
特性 容器名称
运算符 StringEquals
container1
逻辑运算符 'AND'
特性源 环境
属性 专用终结点
操作员 StringEqualsIgnoreCase
/subscriptions/<your subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateEndpoints/privateendpoint1
组 #1 结束
逻辑运算符 'OR'
特性源 资源
特性 容器名称
运算符 StringNotEquals
container1

下图显示了将设置输入到 Azure 门户后的情况。 必须对表达式进行分组以确保计算正确。

Azure 门户中条件编辑器的屏幕截图,它显示了在具有专用终结点环境属性的命名容器中读取、写入或删除 Blob。

示例:仅允许从特定专用终结点读取高度敏感的 Blob 数据,并由标记具有访问权限的用户进行读取访问

此条件要求索引标记敏感度设置为 high 的 Blob 只能由具有匹配的敏感度安全属性值的用户读取。 此外,必须通过名为 privateendpoint1 的专用终结点访问它们。 可以通过其他终结点或 Internet 来访问敏感度标记设为其他值的 Blob。

读取现有 Blob 有两种可能的操作。 为了使此条件对具有多个角色分配的主体有效,必须将该条件添加到包含以下任何操作的所有角色分配。

操作 说明
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/runAsSuperUser/action 如果角色定义包含此操作(例如存储 Blob 数据所有者),则请添加。

可以使用 Azure 门户或 Azure PowerShell 将条件添加到角色分配。 该门户有两个用于生成 ABAC 条件的工具 - 可视化编辑器和代码编辑器。 在 Azure 门户中,可以在这两个编辑器之间切换,以在不同的视图中查看条件。 在“可视化编辑器”选项卡和“代码编辑器”选项卡之间切换,以查看首选门户编辑器的示例

以下是通过 Azure 门户中的可视化条件编辑器添加此条件的设置。

添加操作

选择“添加操作”,然后仅选择“读取 Blob”子操作,如下表所示。

操作 子操作
所有读取操作 读取 blob

请不要选择顶层操作,如下图所示:

Azure 门户中条件编辑器的屏幕截图,它显示了选择读取 Blob 操作。

生成表达式

使用下表中的值生成条件的表达式部分:

Group 设置
组 #1
特性源 主体
Attribute <attributeset>_<key>
操作员 StringEquals
选项 Attribute
逻辑运算符 'AND'
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 <键>
逻辑运算符 'AND'
特性源 环境
属性 专用终结点
操作员 StringEqualsIgnoreCase
/subscriptions/<your subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Network/privateEndpoints/privateendpoint1
组 #1 结束
逻辑运算符 'OR'
特性源 资源
特性 blob 索引标记 [键中的值]
密钥 sensitivity
操作员 StringNotEquals
high

下图显示了将设置输入到 Azure 门户后的情况。 必须对表达式进行分组以确保计算正确。

Azure 门户中条件编辑器的屏幕截图,它显示了允许已标记用户通过特定专用终结点进行读取访问。

后续步骤