防止跨 Microsoft Entra 租户进行对象复制

对象复制将块 blob 从一个存储帐户中的容器异步复制到另一个存储帐户中的容器。 当你配置对象复制策略时,需要指定源存储帐户和容器以及目标帐户和容器。 策略配置完成后,Azure 存储将对源对象的创建、更新和删除操作的结果自动复制到目标对象。 有关 Azure 存储中的对象复制的详细信息,请参阅针对块 blob 的对象复制

如果允许跨 Microsoft Entra 租户进行跨租户复制,则授权用户可以配置一个对象复制策略,使源帐户和目标帐户位于不同的 Microsoft Entra 租户中。 如果安全策略要求将对象复制限制为仅驻留在同一租户中的存储帐户,则可以禁止创建源帐户和目标帐户位于不同租户中的策略。 默认情况下,2023 年 12 月 15 日之后创建的所有新存储帐户的跨租户对象复制功能处于禁用状态,除非显示允许此功能。

本文介绍了如何为存储帐户修正跨租户对象复制。 还介绍了如何创建策略来强制禁止对新的和现有的存储帐户进行跨租户对象复制。

有关如何配置对象复制策略(包括跨租户策略)的详细信息,请参阅为块 blob 配置对象复制

修正跨租户对象复制

为防止跨 Microsoft Entra 租户进行对象复制,可以将存储帐户的“AllowCrossTenantReplication”属性设置为“false”。 如果存储帐户当前没有参与任何跨租户对象复制策略,则将 AllowCrossTenantReplication 属性设置为 false 可防止将来配置跨租户对象复制策略时将此存储帐户作为源或目标。 但是,如果存储帐户当前已参与一个或多个跨租户对象复制策略,则在删除现有的跨租户策略之前,不允许将 AllowCrossTenantReplication 属性设置为 false。

默认情况下,不允许对 2023 年 12 月 15 日之后创建的存储帐户使用跨租户策略。 但是,默认情况下,不会为 2023 年 12 月 15 日之前创建的现有存储帐户设置 AllowCrossTenantReplication 属性,并且在显式设置此属性之前不会返回值。 对于 2023 年 12 月 15 日之后创建的新帐户,当属性值为 null 或 true 时,存储帐户可以参与跨租户对象复制策略。 对于在该时间之后创建的帐户,该属性需要设置为 true。 设置 AllowCrossTenantReplication 属性不会导致存储帐户出现任何停机时间。

为新帐户修正跨租户复制

若要禁止对新存储帐户进行跨租户复制,请使用 Azure 门户、PowerShell 或 Azure CLI。 对于 2023 年 12 月 15 日之后创建的新帐户,该属性默认为 false,即使未显式设置也是如此。

若要禁止对存储帐户进行跨租户对象复制,请执行以下步骤:

  1. 在 Azure 门户中,导航到“存储帐户”页,然后选择“创建”。

  2. 填写新存储帐户的“基本信息”选项卡。

  3. 在“高级”选项卡上的“Blob 存储”部分中,找到“允许跨租户复制”设置,然后取消选中该框。

    Screenshot showing how to disallow cross-tenant object replication for a new storage account

  4. 完成创建帐户的过程。

为现有帐户修正跨租户复制

若要禁止对现有存储帐户进行跨租户复制,请使用 Azure 门户、PowerShell 或 Azure CLI。

若要禁止对当前未参与任何跨租户策略的现有存储帐户进行跨租户对象复制,请执行以下步骤:

  1. 导航到 Azure 门户中的存储帐户。

  2. 在“数据管理”下,选择“对象复制”。

  3. 选择“高级设置”。

  4. 取消选中“允许跨租户复制”。 默认情况下,此框处于已选中状态,因为是允许对存储帐户进行跨租户对象复制的,除非你显式禁止它。

    Screenshot showing how to disallow cross-tenant object replication for an existing storage account

  5. 选择“确定”,保存所做更改。

如果存储帐户当前正在参与一个或多个跨租户复制策略,那么,在你删除这些策略之前,无法禁止跨租户对象复制。 在此场景下,此设置在 Azure 门户不可用,如下图所示。

Screenshot

禁止跨租户复制后,尝试使用存储帐户作为源或目标配置跨租户策略会失败。 Azure 存储返回一个错误,指示不允许对存储帐户进行跨租户对象复制。

禁止对某个存储帐户进行跨租户对象复制后,你使用该帐户创建的任何新的对象复制策略都必须包括源帐户和目标帐户的完整 Azure 资源管理器 ID。 Azure 存储需要使用完整的资源 ID 来验证源帐户和目标帐户是否驻留在同一租户中。 有关详细信息,请参阅指定源帐户和目标帐户的完整资源 ID

AllowCrossTenantReplication 属性仅支持用于使用 Azure 资源管理器部署模型的存储帐户。 有关哪些存储帐户使用 Azure 资源管理器部署模型的信息,请参阅存储帐户的类型

允许或禁止跨租户复制的权限

若要设置存储帐户的 AllowCrossTenantReplication 属性,用户必须有权创建和管理存储帐户。 提供这些权限的 Azure 基于角色的访问控制 (Azure RBAC) 角色包含 Microsoft.Storage/storageAccounts/write 或 Microsoft.Storage/storageAccounts/* 操作。 具有此操作的内置角色包括:

这些角色未提供通过 Microsoft Entra ID 访问存储帐户中数据的访问权限。 但是,它们包含 Microsoft.Storage/storageAccounts/listkeys/action,可以授予对帐户访问密钥的访问权限。 借助此权限,用户可以使用帐户访问密钥访问存储帐户中的所有数据。

角色分配的范围必须限定为存储帐户级别或更高级别,用户才能够允许或禁止对存储帐户进行跨租户对象复制。 有关角色作用域的详细信息,请参阅了解 Azure RBAC 的作用域

请注意,仅向需要能够创建存储帐户或更新其属性的用户分配这些角色。 使用最小特权原则确保用户拥有完成任务所需的最少权限。 有关使用 Azure RBAC 管理访问权限的详细信息,请参阅 Azure RBAC 最佳做法

注意

经典订阅管理员角色“服务管理员”和“共同管理员”具有 Azure 资源管理器所有者角色的等效权限。 所有者角色包括所有操作,因此具有这些管理角色之一的用户也可以创建和管理存储帐户。 有关详细信息,请参阅 Azure 角色、Azure AD 角色和经典订阅管理员角色

使用 Azure Policy 审核合规性

如果你有大量存储帐户,可能需要执行审核,确保将这些帐户配置为阻止跨租户对象复制。 若要审核一组存储帐户的合规性,请使用 Azure Policy。 Azure Policy 是一项服务,可用于创建、分配和管理将规则应用于 Azure 资源的策略。 Azure Policy 可帮助你确保这些资源始终符合公司标准和服务级别协议。 有关详细信息,请参阅 Azure Policy 概述

创建具有 Audit 效果的策略

Azure Policy 支持的效果决定了针对资源评估某个策略规则时会发生什么情况。 当资源不合规时,Audit 效果会创建一个警告,但不会停止请求。 有关效果的详细信息,请参阅了解 Azure Policy 效果

若要通过 Azure 门户为存储帐户的跨租户对象复制设置创建具有“审核”效果的策略,请执行以下步骤:

  1. 在 Azure 门户中,导航到 Azure Policy 服务。

  2. 在“创作”部分下,选择“定义”。

  3. 选择“添加策略定义”以创建新的策略定义。

  4. 对于“定义位置”字段,选择“更多”按钮以指定审核策略资源所在的位置。

  5. 指定策略的名称。 还可以指定说明和类别。

  6. 在“策略规则”下,将以下策略定义添加到“policyRule”部分。

    {
      "if": {
        "allOf": [
          {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
          },
          {
            "not": {
              "field":"Microsoft.Storage/storageAccounts/allowCrossTenantReplication",
              "equals": "false"
            }
          }
        ]
      },
      "then": {
        "effect": "audit"
      }
    }
    
  7. 保存策略。

分配策略

接下来,将策略分配给资源。 策略的作用域对应于该资源及其下的所有资源。 有关策略分配的详细信息,请参阅 Azure Policy 分配结构

若要在 Azure 门户中分配策略,请执行下列步骤:

  1. 在 Azure 门户中,导航到 Azure Policy 服务。
  2. 在“创作”部分下,选择“分配”。
  3. 选择“分配策略”以创建新的策略分配。
  4. 对于“作用域”字段,请选择策略分配的作用域。
  5. 对于“策略定义”字段,请选择“更多”按钮,然后从列表中选择你在上一部分定义的策略。
  6. 提供策略分配的名称。 说明是可选的。
  7. 让“策略强制实施”设置为“启用”状态。 此设置对审核策略没有影响。
  8. 选择“查看 + 创建”以创建分配。

查看合规性报告

分配策略后,你可以查看合规性报告。 审核策略的合规性报告提供有关哪些存储帐户仍允许跨租户对象复制策略的信息。 有关详细信息,请参阅获取策略合规性数据

创建策略分配后,合规性报告可能需要几分钟时间才会变得可用。

若要在 Azure 门户中查看合规性报告,请执行以下步骤:

  1. 在 Azure 门户中,导航到 Azure Policy 服务。

  2. 选择“合规性”。

  3. 筛选你在上一步创建的策略分配名称的结果。 该报告显示不符合策略的资源。

  4. 你可以在报告中向下钻取以获取更多详细信息,包括不合规的存储帐户的列表。

    Screenshot showing compliance report for audit policy for blob cross-tenant object replication

使用 Azure Policy 强制实施同租户复制策略

Azure Policy 可以确保 Azure 资源符合要求和标准,从而为云治理提供支持。 若要确保组织中的存储帐户禁止跨租户复制,你可以创建一个策略,阻止创建允许跨租户对象复制策略的新存储帐户。 强制实施策略会使用“拒绝”效果来阻止将创建或修改一个允许跨租户对象复制的存储帐户的请求。 如果一个现有帐户的跨租户对象复制设置不符合策略,则“拒绝”策略还会阻止对该帐户进行的所有配置更改。 有关“拒绝”效果的详细信息,请参阅了解 Azure Policy 效果

若要为跨租户对象复制创建具有“拒绝”效果的策略,请执行使用 Azure Policy 审核合规性中所述的相同步骤,但在策略定义的“policyRule”部分中提供以下 JSON:

{
  "if": {
    "allOf": [
      {
        "field": "type",
        "equals": "Microsoft.Storage/storageAccounts"
      },
      {
        "not": {
          "field":"Microsoft.Storage/storageAccounts/allowCrossTenantReplication",
          "equals": "false"
        }
      }
    ]
  },
  "then": {
    "effect": "deny"
  }
}

创建具有“拒绝”效果的策略并将其分配给作用域后,用户便无法创建允许跨租户对象复制的存储帐户。 用户也不能对当前允许跨租户对象复制的现有存储帐户进行任何配置更改。 如果尝试这样做,将会导致错误。 必须将存储帐户的 AllowCrossTenantReplication 属性设置为 false,继续进行帐户创建或配置更新,以符合该策略。

下图显示了在以下情况下发生的错误:当具有“拒绝”效果的策略要求禁止跨租户对象复制时,你尝试创建允许跨租户对象复制(针对新帐户的默认设置)的存储帐户。

Screenshot showing the error that occurs when creating a storage account in violation of policy

另请参阅