Azure 容器注册表 中的专用数据终结点

Azure 容器注册表 中的专用数据终结点为容器映像层下载提供具有作用域限制且特定于注册表的 URL,以取代默认的通配符 Azure 存储帐户终结点(*.blob.core.chinacloudapi.cn)。 这可实现严格范围的客户端防火墙规则,并缓解数据外泄风险。

注释

专用数据端点仅在层 blob 下载(拉取)期间使用。 在推送期间上传 Blob 时,它们通过登录服务器(全局终结点或区域终结点),而不是专用数据终结点。

专用数据终结点功能可用于 高级服务层级中的注册表。

容器映像下载的工作原理:登录服务器和 307 重定向到数据终结点

从注册表拉取内容涉及两种类型的终结点:

  1. 登录服务器终结点 - 用于身份验证和内容发现。 登录服务器可以是:

    • 全局终结点contoso.azurecr.cn)— ACR 会自动将请求路由到对客户端网络性能最佳的异地复制副本。 有关详细信息,请参阅 异地复制
    • 区域终结点contoso.chinaeast2.geo.azurecr.cn) — 将请求直接路由到特定的异地副本,绕过Azure管理的路由。 有关详细信息,请参阅 异地复制

    当您运行类似 docker pull contoso.azurecr.cn/hello-world(全局端点)或 docker pull contoso.chinaeast2.geo.azurecr.cn/hello-world(区域端点)的命令时,客户端会向登录服务器进行身份验证,并协商确定所请求制品由哪些层组成。

  2. 数据端点 — 用于下载实际镜像层 blob。 登录服务器标识所需的层后,它会重定向客户端以从数据终结点下载它们。

展示终结点的示意图。

ACR 管理数据终结点的基础存储帐户。 优点包括负载均衡、跨存储帐户的内容拆分,以提高并发传递,以及对 异地复制的多区域支持。

不使用专用数据终结点

如果没有专用数据终结点,登录服务器会针对层 blob 下载发出 307 重定向,并将其重定向到使用通配符 URL(*.blob.core.chinacloudapi.cn)的 Azure 存储帐户。

使用全局终结点(Azure托管路由):

该图显示了在不使用专用数据终结点的情况下,通过全局终结点发出的请求流:客户端连接到 contoso.azurecr.cn,Azure 托管路由会选择最佳异地副本,然后该异地副本会将层 Blob 下载请求以 307 重定向到 *.blob.core.chinacloudapi.cn。

使用区域终结点(客户端指定的路由):

示意图显示了在不使用专用数据终结点时采用区域终结点的请求流:客户端连接到 contoso.chinaeast2.geo.azurecr.cn,请求直接转到中国东部 2 异地副本,而该异地副本会发出到 *.blob.core.chinacloudapi.cn 的 307 重定向,以下载层 Blob。

在这两种情况下,若要允许这些下载通过防火墙,你必须放行 *.blob.core.chinacloudapi.cn——这是一个覆盖范围广泛的通配符,它涵盖所有 Azure 存储帐户,而不仅仅是你的注册表所使用的存储帐户。

采用专用数据终端节点

启用专用数据终结点后,登录服务器会针对层 blob 下载返回 307 重定向,将其定向到特定于注册表且限定区域的 URL。

使用全局终结点(Azure托管路由):

图示说明了使用全局终结点和专用数据终结点时的请求流:客户端连接到 contoso.azurecr.cn,Azure 托管路由会选择最佳地理副本,而该地理副本会发出 307 重定向,将层 Blob 下载请求定向到 contoso.chinaeast2.data.azurecr.cn。

使用区域终结点(客户端指定的路由):

显示使用区域终结点和专用数据终结点的请求流的示意图:客户端连接到 contoso.chinaeast2.geo.azurecr.cn,请求直接发送到中国东部 2 区域的异地副本,然后该异地副本发出 307 重定向,将层 Blob 下载请求重定向到 contoso.chinaeast2.data.azurecr.cn。

每个异地副本都会获得一个采用 [registry].[region].data.azurecr.cn 模式的专用数据终结点。 防火墙规则可以限定为这些特定终结点,而不是宽泛通配符。

为什么专用数据终结点很重要

没有专用数据终结点的数据外泄风险

如果没有专用数据终结点,防火墙规则必须允许允许 *.blob.core.chinacloudapi.cn 层下载。 此广泛的通配符将打开对所有Azure存储帐户的访问,而不仅仅是注册表的存储。 恶意行为者可能会部署可将数据写入任何可通过网络访问的 Azure 存储帐户的代码。

展示客户端数据外泄风险的示意图。

具有专用数据终结点的限定范围防火墙规则

专用数据终结点使你能够用针对特定注册表数据终结点的限定范围防火墙规则替换宽泛的 *.blob.core.chinacloudapi.cn 通配符。 例如,你可以在防火墙配置中仅允许 contoso.chinaeast2.data.azurecr.cncontoso.chinaeast2.data.azurecr.cn——这样可限制对注册表的存储的访问,并阻止数据外泄到其他存储帐户。

示意图展示了具有专用数据终结点的 contoso 示例。

这适用于从本地主机、IoT 设备、自定义生成代理或任何没有专用终结点的环境进行连接的客户端。

支持异地复制的专用数据端点

对于 异地复制 的注册表,每个异地副本获取其自己的专用数据终结点。 URL 模式为 [registry].[region].data.azurecr.cn.

从全局端点拉取映像时,ACR 会将请求路由到对客户端而言网络性能最佳的异地复制副本。 然后,提供服务的异地副本会发出 307 重定向响应,将层 blob 下载重定向到该提供服务的异地副本自己的专用数据终结点。 重定向始终保留在与提供服务的异地副本相同的区域内——被路由到“中国东部 2”异地副本的拉取请求始终会重定向到 contoso.chinaeast2.data.azurecr.cn,绝不会重定向到其他区域中的专用数据终结点。

使用 区域终结点时也适用。 从区域终结点 (contoso.chinaeast2.geo.azurecr.cn) 的拉取会将层下载重定向到 contoso.chinaeast2.data.azurecr.cn — 从不跨区域。 这意味着防火墙规则可以按区域限定范围。

启用专用数据终结点

注释

如果以前为现有的 *.blob.core.chinacloudapi.cn 终结点配置了客户端防火墙访问权限,则切换到专用数据终结点会影响客户端连接,这可能会导致数据提取失败。 若要确保客户端具有一致的访问权限,请将新的数据终结点规则添加到客户端防火墙规则。 完成后,使用Azure CLI或其他工具为注册表启用专用数据终结点。

在映像拉取期间,如果启用了专用数据终结点,则 ACR 在每次需要提取映像层时,都会向客户端提供临时下载链接。 此链接指向专用数据终结点,有效期为 20 分钟,提供用于下载层的安全短期 URL。 20 分钟后,链接过期,如果客户需要在拉取镜像时下载另一个层,只需请求一个新的链接。

可以使用 Azure 门户或 Azure CLI 启用专用数据终结点。 数据终结点遵循区域模式 <registry-name>.<region>.data.azurecr.cn。 在地理复制注册表中,启用数据终结点会在所有副本区域中生效,激活相应的终结点。

使用 Azure 门户启用专用数据终结点

  1. 转到容器注册表。
  2. 在服务菜单中的“设置”下,选择“网络”
  3. “公共访问”中,选中“ 使用专用数据终结点 ”复选框。
  4. 选择“保存”

现在可在 Azure 门户中看到数据终结点。

使用Azure CLI启用专用数据终结点

az acr update --name myregistry --data-endpoint-enabled

若要查看数据终结点,请运行 az acr show-endpoints 命令:

az acr show-endpoints --name myregistry

此示例输出显示完整的终结点架构,包括专用数据终结点和区域终结点(如果已启用):

{
    "loginServer": "myregistry.azurecr.cn",
    "dataEndpoints": [
        {
            "region": "chinaeast2",
            "endpoint": "myregistry.chinaeast2.data.azurecr.cn"
        },
        {
            "region": "chinaeast3",
            "endpoint": "myregistry.chinaeast3.data.azurecr.cn"
        }
    ],
    "regionalEndpoints": [
        {
            "region": "chinaeast2",
            "endpoint": "myregistry.chinaeast2.geo.azurecr.cn"
        },
        {
            "region": "chinaeast3",
            "endpoint": "myregistry.chinaeast3.geo.azurecr.cn"
        }
    ]
}

为注册表设置专用数据终结点后,可以为数据终结点启用客户端防火墙访问规则。 为所有必需的注册表区域启用数据终结点访问规则。 有关详细信息,请参阅配置规则以访问防火墙后的 Azure 容器注册表

限制对数据终结点的网络访问

启用专用数据终结点后,可以限制客户端访问这些终结点的方式。 有两种方法:

Azure专用终结点(虚拟网络)

Azure专用终结点是控制从虚拟网络中的客户端到注册表的网络访问的最安全方法。 配置专用终结点时,可以使用分配给虚拟网络中的专用终结点资源的专用 IP 从虚拟网络中访问登录服务器(全局终结点和区域终结点)和数据终结点。 客户还可以在注册表上 禁用公共网络访问 ,确保专用数据终结点只能通过专用终结点访问。

如果注册表至少配置了一个专用终结点,则会自动启用专用数据终结点。 有关详细信息,请参阅 使用专用终结点从虚拟网络私下连接到注册表

专用终结点IP地址注意事项

每个专用终结点资源使用虚拟网络子网中的专用 IP 地址。 相应地规划子网大小:

  • 1 个 IP 用于全局端点(myregistry.azurecr.cn
  • 专用数据终结点每个异地复制副本对应 1 个 IPmyregistry.<region>.data.azurecr.cn)— 配置专用终结点时自动启用
  • 每个异地副本 1 个 IP,用于区域终结点(myregistry.<region>.geo.azurecr.cn)— 仅当注册表已启用区域终结点时

例如,启用了 3 个地理复制副本和区域终结点的注册表,每个专用终结点资源需要 1(全局)+ 3(数据)+ 3(区域)= 7 个专用 IP 地址。 有关详细信息,请参阅 使用专用终结点从虚拟网络私下连接到注册表

客户端防火墙规则

如果专用终结点不是选项,请将客户端防火墙规则配置为允许访问每个所需注册表区域的专用数据终结点。 有关详细信息,请参阅配置规则以访问防火墙后的 Azure 容器注册表

后续步骤