教程:添加角色分配条件以使用 Azure 门户限制对 Blob 的访问

在大多数情况下,角色分配授予对 Azure 资源所需的权限。 但是,在某些情况下,你可能希望通过添加角色分配条件来提供更精细的访问控制。

本教程中,您将学习如何:

  • 向角色分配添加条件
  • 基于数据片段索引标记限制访问数据片段

重要

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

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

Prerequisites

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

Condition

在本教程中,将限制对具有特定标记的 Blob 的访问。 例如,向角色分配添加条件,以便 Chandra 只能读取带有标记 Project=Cascade的文件。

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

如果 Chandra 尝试读取没有标记 Project=Cascade的 Blob,则不允许访问。

图表显示对具有 Project=Cascade 标记的 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'
    )
)

步骤 1:创建用户

  1. 以订阅所有者的身份登录到 Azure 门户。

  2. 选择“Microsoft Entra ID”。

  3. 创建用户或查找现有用户。 本教程使用 Chandra 作为示例。

步骤 2:设置存储

  1. 创建与 Blob 索引标记功能兼容的存储帐户。 有关详细信息,请查看使用 Blob 索引标记管理和查找 Azure Blob 数据

  2. 在存储帐户中创建新容器,并将匿名访问级别设置为“专用”(无匿名访问)。

  3. 在容器中,选择“ 上传 ”以打开“上传 Blob”窗格。

  4. 查找要上传的文本文件。

  5. 选择“ 高级 ”以展开窗格。

  6. “Blob 索引标记 ”部分中,将以下 Blob 索引标记添加到文本文件中。

    如果你刚刚注册了订阅,却没有看到 Blob 索引标记部分,则可能需要等待几分钟才能让更改生效。 有关详细信息,请参阅 使用 Blob 索引标记管理和查找 Azure Blob 存储上的数据

    备注

    Blob 还支持存储用户定义的任意键值元数据。 尽管元数据与 blob 索引标记类似,但必须使用带条件的 blob 索引标记。

    Key Value
    Project Cascade

显示含有“Blob 索引标记”部分的“上传 blob”窗格的屏幕截图。

  1. 选择“ 上传 ”按钮以上传文件。

  2. 上传第二个文本文件。

  3. 将以下 Blob 索引标记添加到第二个文本文件。

    Key Value
    Project Baker

步骤 3:分配存储 blob 数据角色

  1. 打开资源组。

  2. 选择“访问控制(IAM)”

  3. 选择“角色分配”选项卡以查看此范围内的角色分配。

  4. 选择添加>添加角色分配。 此时会打开“添加角色分配”页:

“添加 > 角色分配”菜单的屏幕截图。

  1. 在“ 角色 ”选项卡上,选择 “存储 Blob 数据读取者 ”角色。

“添加角色分配”页的屏幕截图,其中显示了“角色”选项卡。

  1. 在“ 成员 ”选项卡上,选择之前创建的用户。

“添加角色分配”页的屏幕截图,其中包含“成员”选项卡。

  1. (可选)在 “说明 ”框中,输入 对带有 Project=Cascade 标记的 Blob 的读取访问权限

  2. Select Next.

步骤 4:添加条件

  1. 在“ 条件”(可选) 选项卡上,选择“ 添加条件”。 此时会显示“添加角色分配条件”页:

用于添加新条件的“添加角色分配条件”页面的屏幕截图。

  1. 在“添加操作”部分中,选择“添加操作”。

    显示“选择操作”窗格。 此窗格是基于角色分配(将作为条件的目标)进行了筛选的数据操作列表。 选中“读取 Blob”旁边的框,然后选中“选择”:

“选择一个操作”窗格的屏幕截图,其中选择了一个操作。

  1. 在“生成表达式”部分中,选择“ 添加表达式”。

    随即展开“表达式”部分。

  2. 指定以下表达式设置:

    Setting Value
    Attribute source Resource
    Attribute blob 索引标记 [键中的值]
    Key Project
    Operator StringEqualsIgnoreCase
    Value Cascade

Blob 索引标记的“生成表达式”部分的屏幕截图。

  1. 向上滚动到 编辑器类型 ,然后选择 “代码”。

    条件显示为代码。 可以对此代码编辑器中的条件进行更改。 若要返回到视觉对象编辑器,请选择 “视觉对象”。

代码编辑器中显示的条件的屏幕截图。

  1. 选择 “保存” 以添加条件并返回到“添加角色分配”页。

  2. Select Next.

  3. 在“ 审阅 + 分配 ”选项卡上,选择“ 审阅 + 分配 ”以分配有条件的角色。

    片刻之后,会在所选范围内为安全主体分配角色。

分配角色后的角色分配列表的屏幕截图。

步骤 5:分配读取者角色

  • 重复前面的步骤,将 读者 角色分配给之前在资源组范围内创建的用户。

    备注

    通常不需要分配“读取者”角色。 但是,这样做是为了使用 Azure 门户测试条件。

步骤 6:测试条件

  1. 在新窗口中,登录到 Azure 门户

  2. 以之前创建的用户身份登录。

  3. 打开创建的存储帐户和容器。

  4. 确保身份验证方法设置为 Microsoft Entra 用户帐户 而不是 Access 密钥

包含测试文件的存储容器的屏幕截图。

  1. 选择 Baker 文本文件。

    你应该无法查看或下载 Blob,并且应看到授权失败的消息。

  2. 选择Cascade格式文本文件。

    您应该能够查看和下载数据块。

步骤 7:清理资源

  1. 删除您添加的角色分配。

  2. 删除创建的测试存储帐户。

  3. 删除已创建的用户。

Next steps