Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
默认情况下,Azure容器注册表接受来自任何网络上主机的 Internet 连接。 本文介绍如何将容器注册表配置为仅允许来自特定公共 IP 地址或地址范围的访问。 它使用Azure CLI和Azure门户提供等效的步骤。
IP 网络规则在公共注册表终结点上进行配置。 IP 网络规则不适用于配置了 Private Link 的专用终结点。
可在“高级”容器注册表服务层级配置 IP 访问规则。 有关注册表服务层和限制的信息,请参阅 Azure 容器注册表层。
每个注册表最多支持 200 个 IP 访问规则。
重要
如果容器注册表限制对专用终结点、所选子网或 IP 地址的访问,则某些功能可能不可用或需要更多配置。
- 禁用对注册表的公共网络访问时,某些受信任的服务(包括 Microsoft Defender for Cloud)仅当启用网络设置以绕过网络规则时,才能访问注册表。
- 禁用公用网络访问后,某些Azure服务的实例(包括Azure DevOps服务)无法访问容器注册表。
- Azure DevOps管理的代理目前不支持专用终结点。 需要使用自托管代理与专用终结点建立网络路径。
- 如果注册表具有批准的专用终结点并禁用公共网络访问,则无法使用Azure门户、Azure CLI或其他工具列出虚拟网络外部的存储库和标记。
从所选的公用网络进行访问 - CLI
更改默认网络对注册表的访问权限
要将访问权限仅授予所选公用网络,请先将默认操作更改为拒绝访问。 在以下 az acr update 命令中,替换注册表的名称:
az acr update --name myContainerRegistry --default-action Deny
向注册表添加网络规则
使用 az acr network-rule add 命令向注册表添加允许从公共 IP 地址或范围进行访问的网络规则。 例如,替换容器注册表的名称和虚拟网络中 VM 的公共 IP 地址。
az acr network-rule add \
--name mycontainerregistry \
--ip-address <public-IP-address>
注意
添加规则后,请等待几分钟,使规则生效。
从所选的公用网络访问 - 门户
在门户中,导航到容器注册表。
在设置下选择网络 。
在“公共访问”选项卡上,选择允许从“所选网络”进行公共访问 。
在“防火墙”下,输入公共 IP 地址,如虚拟网络中 VM 的公共 IP 地址。 或者,以 CIDR 表示法输入包含 VM IP 地址的地址范围。
选择“保存”。
注意
添加规则后,请等待几分钟,使规则生效。
提示
或者,也可通过本地客户端计算机或 IP 地址范围启用注册表访问。 要允许此访问,需要计算机的公共 IPv4 地址。 可通过在 Internet 浏览器中搜索“我的 IP 地址是多少”来查找此地址。 在门户中的“网络”页面上配置防火墙设置时,当前客户端 IPv4 地址也会自动出现。
禁用公用网络访问
(可选)禁用注册表上的公共终结点。 禁用公共终结点会重写所有防火墙配置。 例如,你可能想要使用 Private Link 禁用对虚拟网络中保护的注册表的公共访问。
注意
如果在虚拟网络中使用服务终结点设置了注册表,则禁用对注册表的公共终结点的访问也会在虚拟网络中禁用对注册表的访问。
禁用公共访问 - CLI
若要使用 Azure CLI禁用公共访问,请运行 az acr update 并将 --public-network-enabled 设置为 false。
public-network-enabled 参数需要Azure CLI 2.6.0 或更高版本。
az acr update --name myContainerRegistry --public-network-enabled false
关闭公共访问(门户)
在门户中,导航到容器注册表,选择设置 > 网络。
在“公共访问”选项卡上的“允许公用网络访问”中,选择“禁用” 。 然后,选择“保存”。
还原公用网络访问
要重新启用公共终结点,请更新网络设置以允许公共访问。 启用公共终结点会重写所有防火墙配置。
恢复公共访问 - 命令行界面
运行 az acr update 并将 --public-network-enabled 设置为 true。
注意
public-network-enabled 参数需要Azure CLI 2.6.0 或更高版本。
az acr update --name myContainerRegistry --public-network-enabled true --default-action Allow
恢复公共访问 - 门户网站
在门户中,导航到容器注册表,选择设置 > 网络。
在“公共访问”选项卡上的“允许公用网络访问”中,选择“所有网络” 。 然后,选择“保存”。
故障排除
通过 HTTPS 代理进行访问
如果设置公共网络规则或拒绝对注册表的公共访问,则无法从不允许的公共网络登录到注册表。 如果未为代理设置访问规则,则来自 HTTPS 代理后面的客户端访问也会失败。 你会看到类似于Error response from daemon: login attempt failed with status: 403 Forbidden或Looks like you don't have access to registry的错误信息。
如果使用网络访问规则允许的 HTTPS 代理,但在客户端环境中未正确配置代理,则也会发生这些错误。 检查 Docker 客户端和 Docker 守护程序均已针对代理行为进行了配置。 有关详细信息,请参阅 Docker 文档中的 HTTP/HTTPS 代理。
从Azure Pipelines访问
如果将Azure Pipelines用于限制对特定 IP 地址的访问的Azure容器注册表,则管道可能无法访问注册表。 管道中的出站 IP 地址未修复。 默认情况下,管道会使用 Microsoft 托管的代理在具有一组变化的 IP 地址的虚拟机池上运行作业。
一种解决方法是将用于运行管道的代理从 Microsoft 托管的代理更改为自托管代理。 使用在您管理的 Windows 或 Linux 计算机上运行的自承载代理,您可以控制管道的出站 IP 地址。 可以在注册表 IP 访问规则中添加此地址。
从 AKS 访问
如果您使用具有对特定 IP 地址访问限制的 Azure 容器注册表与 Azure Kubernetes Service (AKS),则默认情况下无法配置固定的 AKS IP 地址。 从 AKS 群集的出口 IP 地址是随机分配的。
若要允许 AKS 群集访问注册表,请使用以下选项之一:
- 对于 Azure Basic Load Balancer,请为 AKS 群集设置静态 IP 地址。
- 参考有关 Azure Standard Load Balancer 的指南,以管理群集的出口流量。
后续步骤
- 若要使用虚拟网络中的专用终结点限制对注册表的访问,请参阅Azure容器注册表的 Configure Azure Private Link。
- 若要从客户端防火墙后面设置注册表访问规则,请参阅 配置规则,以访问防火墙后面的Azure容器注册表。
- 有关更多故障排除指南,请参阅使用注册表排查网络问题。