允许受信任的服务安全访问受网络限制的容器注册表

Azure 容器注册表允许选择受信任的 Azure 服务访问配置了网络访问规则的注册表。 允许受信任的服务时,受信任的服务实例可以安全地绕过注册表的网络规则并执行拉取或推送映像等操作。 本文介绍如何通过网络受限的 Azure 容器注册表启用和使用受信任的服务。

请使用本地安装的 Azure CLI 来运行本文中的命令示例。 若要在本地使用 Azure CLI,需要安装 2.18 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

限制

  • 某些使用受信任服务的注册表访问方案需要 Azure 资源的托管标识。 除非注明支持用户分配的托管标识,否则只能使用系统分配的标识。
  • 允许受信任的服务这一功能不适用于配置了服务终结点的容器注册表。 此功能只影响受专用终结点限制或已应用公共 IP 访问规则的注册表。

关于受信任的服务

Azure 容器注册表具有分层的安全模型,支持多个限制对注册表进行访问的网络配置,其中包括:

  • 使用 Azure 专用链接的专用终结点。 配置后,注册表的专用终结点只供虚拟网络中的资源使用专用 IP 地址进行访问。
  • 注册表防火墙规则,仅允许从特定的公共 IP 地址或地址范围访问注册表的公共终结点。 使用专用终结点时,还可以将防火墙配置为阻止对公共终结点进行的所有访问。

在虚拟网络中进行部署或使用防火墙规则进行配置后,注册表会拒绝从这些源的外部访问用户或服务。

若干多租户 Azure 服务从不能包括在这些注册表网络设置中的网络运行,使得它们无法执行从注册表拉取或向其推送映像的操作。 通过将某些服务实例指定为“受信任”,注册表所有者就可以允许选择 Azure 资源,以便安全地绕过注册表的网络设置来执行注册表操作。

受信服务

如果启用了注册表的“允许受信任的服务”设置(默认设置),则下列服务的实例可以访问受网络限制的容器注册表。 我们会不断添加更多的服务。

在指示的位置,受信任服务的访问需要在服务实例中额外配置托管标识、分配 RBAC 角色和使用注册表进行身份验证。 有关示例步骤,请参阅本文后面的受信任的服务工作流

受信服务 支持的使用方案 使用 RBAC 角色配置托管标识
Microsoft Defender for Cloud 通过适用于容器注册表的 Microsoft Defender 执行漏洞扫描
ACR 任务 从 ACR 任务访问父注册表或其他注册表
机器学习 使用自定义 Docker 容器映像在机器学习工作区中部署训练模型
Azure 容器注册表 向/从受网络限制的 Azure 容器注册表导入映像

注意

目前,启用“允许受信任服务”设置不适用于应用服务。

允许受信任的服务 - CLI

默认情况下,在新的 Azure 容器注册表中启用“允许受信任的服务”设置。 通过运行 az acr update 命令禁用或启用此设置。

若要禁用此设置,请执行以下命令:

az acr update --name myregistry --allow-trusted-services false

若要在现有注册表或已禁用此设置的注册表中启用此设置,请执行以下命令:

az acr update --name myregistry --allow-trusted-services true

允许受信任的服务 - 门户

默认情况下,在新的 Azure 容器注册表中启用“允许受信任的服务”设置。

若要在门户中禁用或重新启用此设置,请执行以下操作:

  1. 在门户中,导航到容器注册表。

  2. 在“设置”下选择“网络” 。

  3. 在“允许公用网络访问”中,选择“所选网络”或“禁用”。

  4. 执行下列操作之一:

    • 若要禁止受信任的服务进行访问,请在“防火墙例外”下取消选中“允许受信任的 Microsoft 服务访问此容器注册表”。
    • 若要允许受信任的服务,请在“防火墙例外”下选中“允许受信任的 Microsoft 服务访问此容器注册表”。
  5. 选择“保存”。

受信任服务工作流

下面是一个典型的工作流,它使受信任的服务的实例可以访问受网络限制的容器注册表。 如果使用服务实例的托管标识绕过注册表的网络规则,则需要此工作流。

  1. 在 Azure 容器注册表中的一个受信任服务的实例中启用托管标识。
  2. Azure 角色的标识分配到注册表。 例如,分配 ACRPull 角色以拉取容器映像。
  3. 在受网络限制的注册表中,将此设置配置为允许受信任的服务进行访问。
  4. 使用标识的凭据通过受网络限制的注册表进行身份验证。
  5. 从注册表中拉取映像,或执行角色允许的其他操作。

示例:ACR 任务

以下示例演示如何使用 ACR 任务作为受信任的服务。 有关任务详细信息,请参阅使用 Azure 托管标识在 ACR 任务中进行跨注册表的身份验证

  1. 创建或更新 Azure 容器注册表。 创建 ACR 任务。
    • 在创建任务时启用系统分配的托管标识。
    • 禁用任务的默认身份验证模式 (--auth-mode None)。
  2. 为任务标识分配用于访问注册表的 Azure 角色。 例如,分配有权拉取和推送映像的 AcrPush 角色。
  3. 将注册表的托管标识凭据添加到任务。
  4. 若要确认任务绕过网络限制,请在注册表中禁用公共访问
  5. 运行任务。 如果注册表和任务已正确配置,则该任务会成功运行,因为注册表允许进行访问。

若要对禁止受信任的服务进行访问这一功能进行测试,请执行以下操作:

  1. 禁用允许受信任的服务进行访问的设置。
  2. 再次运行任务。 在这种情况下,任务运行会失败,因为注册表不再允许任务进行访问。

后续步骤