配置规则以访问防火墙后面的Azure容器注册表

本文介绍如何在防火墙上配置规则,以允许访问Azure容器注册表。 例如,防火墙或代理服务器后面的Azure IoT Edge设备可能需要访问容器注册表来拉取容器映像。 或者,本地网络中的锁定服务器可能需要访问权限以推送映像。

若要仅在Azure虚拟网络中配置对容器注册表的入站网络访问,请参阅配置Azure Private Link Azure容器注册表

关于注册表终结点

若要将映像或其他项目拉取或推送到Azure容器注册表,Docker 守护程序等客户端需要通过 HTTPS 与两个不同的终结点进行交互。 对于从防火墙后面访问注册表的客户端,需要为两个终结点配置访问规则。 通过端口 443 可以访问两个终结点。

  • 注册表 REST API 终结点 - 身份验证和注册表管理操作通过注册表的公共 REST API 终结点进行处理。 此终结点是注册表的登录服务器名称。 示例: myregistry.azurecr.cn

    • 证书的 Registry REST API 终结点 - Azure 容器注册表为所有子域使用通配符 SSL 证书。 使用 SSL 连接到Azure容器注册表时,客户端必须能够下载 TLS 握手的证书。 在这种情况下,azurecr.cn 还必须是可访问的。
  • 存储(数据)终结点 - Azure 在 Azure Storage 账户中分配 Blob 存储,以代表每个注册表管理容器镜像和其他工件的数据。 当客户端访问Azure容器注册表中的映像层时,它会使用注册表提供的存储帐户终结点发出请求。

如果你的注册表是异地复制的,则客户端可能需要与特定区域或多个已复制区域中的数据终结点交互。

允许访问 REST 和数据终结点

  • REST 终结点 - 允许访问完全限定的注册表登录服务器名称、<registry-name>.azurecr.cn 或关联的 IP 地址范围
  • Storage (data) 终结点 - 允许使用通配符 *.blob.core.chinacloudapi.cn 或关联的 IP 地址范围访问所有Azure blob 存储帐户。

注意

Azure Container Registry支持专用数据终结点,使你能够严格限制注册表存储的客户端防火墙规则。 可选地在注册表所在或复制的所有区域中使用格式 <registry-name>.<region>.data.azurecr.cn 启用数据终结点。

关于 Azure 容器注册表 FQDNs(完全限定域名)

Azure Container Registry 使用两个 FQDN:登录 URL 和数据终结点。

  • 登录 URL 和数据终结点都可以通过启用专用链接,使用专用 IP,从虚拟网络内部访问。
  • 不使用数据终结点的注册表必须从表单 *.blob.core.chinacloudapi.cn的终结点访问数据。 配置防火墙规则时,这不提供所需的隔离。
  • 启用了专用链接的注册表会自动获取专用数据终结点。
  • 为每个区域为注册表创建一个专用数据终结点。
  • 无论启用还是禁用专用数据终结点,登录 URL 保持不变。

允许按 IP 地址范围访问

如果组织有仅允许访问特定 IP 地址或地址范围的策略,请下载最新版本的 Azure IP 范围和服务标记 - 中国云

若要查找需要允许访问的 ACR REST 终结点 IP 范围,请在 JSON 文件中搜索 AzureContainerRegistry。

重要

Azure服务的 IP 地址范围可能会更改,并且每周发布更新。 定期下载 JSON 文件,并在访问规则中进行必要的更新。 如果方案涉及在Azure虚拟网络中配置网络安全组规则或使用Azure Firewall,请改用 AzureContainerRegistryservice tag

所有区域的 REST IP 地址

{
  "name": "AzureContainerRegistry",
  "id": "AzureContainerRegistry",
  "properties": {
    "changeNumber": 10,
    "region": "",
    "platform": "Azure",
    "systemService": "AzureContainerRegistry",
    "addressPrefixes": [
      "40.73.136.24/29",
    [...]

特定区域的 REST IP 地址

搜索特定的区域,例如 AzureContainerRegistry.ChinaNorth。

{
  "name": "AzureContainerRegistry.ChinaNorth",
  "id": "AzureContainerRegistry.ChinaNorth",
  "properties": {
    "changeNumber": 1,
    "region": "chinanorth",
    "platform": "Azure",
    "systemService": "AzureContainerRegistry",
    "addressPrefixes": [
      "139.217.48.104/29",
    [...]

所有区域的存储 IP 地址

{
  "name": "Storage",
  "id": "Storage",
  "properties": {
    "changeNumber": 19,
    "region": "",
    "platform": "Azure",
    "systemService": "AzureStorage",
    "addressPrefixes": [
      "40.72.64.0/24",
    [...]

特定区域的存储 IP 地址

搜索特定的区域,例如 Storage.ChinaNorth。

{
  "name": "Storage.ChinaNorth",
  "id": "Storage.ChinaNorth",
  "properties": {
    "changeNumber": 1,
    "region": "chinanorth",
    "platform": "Azure",
    "systemService": "AzureStorage",
    "addressPrefixes": [
      "40.72.64.0/24"
    [...]

允许通过服务标记访问

在Azure虚拟网络中,使用网络安全规则筛选来自资源(例如虚拟机到容器注册表)的流量。 若要简化Azure网络规则的创建,请使用 AzureContainerRegistryservice tag。 服务标记表示一组 IP 地址前缀,用于全局或每个Azure区域访问Azure服务。 当地址更改时,将自动更新标记。

例如,使用目标 AzureContainerRegistry 创建出站网络安全组规则,以允许流向Azure容器注册表的流量。 若要仅允许在特定区域中访问服务标记,请使用以下格式指定区域: AzureContainerRegistry.[region name]

启用专用数据终结点

注意

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

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

专用数据终结点是 高级 容器注册表服务层的可选功能,可帮助 缓解数据外泄风险。 有关注册表服务层级和限制的信息,请参阅 Azure Container Registry 服务层

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

在 Azure 门户中为容器注册表启用专用数据终结点

若要使用 Azure 门户启用专用数据端点,请执行以下步骤:

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

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

使用 Azure CLI 为容器注册表启用专用数据终结点

若要在容器注册表上启用专用数据终结点,请使用 az acr update 命令:

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": "chinanorth2",
            "endpoint": "myregistry.chinanorth2.data.azurecr.cn",
        }
    ]
}

为注册表设置专用数据终结点后,可以为数据终结点启用客户端防火墙访问规则。 为所有必需的注册表区域启用数据终结点访问规则。

配置 MCR 的客户端防火墙规则

若要从防火墙后面访问Microsoft容器注册表(MCR),请参阅配置 MCR 客户端防火墙规则的指导。 MCR 是所有 Microsoft 发布的 Docker 映像的主注册表,例如 Windows Server 映像。

后续步骤