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

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

在本教程中,你将了解如何执行以下操作:

  • 将条件添加到角色分配
  • 基于 blob 索引标记限制对 blob 的访问

重要

目前,Azure 基于属性的访问控制 (Azure ABAC) 已正式发布 (GA),仅限使用标准存储帐户性能层中的 requestresourceprincipal 属性控制对 Azure Blob 存储、Azure Data Lake Storage Gen2 和 Azure 队列的访问。 对于其他存储帐户性能层、资源类型和属性,该功能不可用,或处于预览阶段。 有关 Azure 存储 ABAC 的完整功能状态信息,请参阅 Azure 存储中条件功能的状态

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

先决条件

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

条件

在本教程中,你将使用特定的标记来限制对 blob 的访问。 例如,将条件添加到角色分配,使 Chandra 只能读取带有 Project=Cascade 标记的文件。

Diagram of role assignment with a condition.

如果 Chandra 尝试读取不带 Project=Cascade 标记的 blob,则访问将被拒绝。

Diagram showing read access to blobs with Project=Cascade tag.

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

(
    (
        !(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 索引标记与条件配合使用。

    密钥
    Project Cascade

Screenshot showing Upload blob pane with Blog index tags section.

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

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

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

    密钥
    Project Baker

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

  1. 打开资源组。

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

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

  4. 选择“添加”>“添加角色分配”。 随即打开“添加角色分配”页面:

Screenshot of Add > Add role assignment menu.

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

Screenshot of Add role assignment page with Roles tab.

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

Screenshot of Add role assignment page with Members tab.

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

  2. 选择下一步

步骤 4:添加条件

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

Screenshot of Add role assignment condition page for a new condition.

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

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

Screenshot of Select an action pane with an action selected.

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

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

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

    设置
    特性源 资源
    特性 blob 索引标记 [键中的值]
    密钥 Project
    运算符 StringEqualsIgnoreCase
    Cascade

Screenshot of Build expression section for blob index tags.

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

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

Screenshot of condition displayed in code editor.

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

  2. 选择下一步

  3. 在“查看 + 分配”选项卡上,选择“查看 + 分配”来分配具有条件的角色。

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

Screenshot of role assignment list after assigning role.

步骤 5:分配读取者角色

  • 重复上述步骤,为你以前在资源组范围内创建的用户分配读取者角色。

    注意

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

步骤 6:测试条件

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

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

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

  4. 请确保身份验证方法设置为“Microsoft Entra 用户帐户”而不是“访问密钥”

Screenshot of storage container with test files.

  1. 选择 Baker 文本文件。

    不应能够查看或下载 Blob,应会显示授权失败消息。

  2. 选择 Cascade 文本文件。

    应能够查看和下载 Blob。

步骤 7:清理资源

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

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

  3. 删除创建的用户。

后续步骤