如何为不同网络组的Azure容器应用配置ACR访问权限
解决方案
一、替换镜像源为Azure Container Registry
在创建或更新容器应用时,直接填写你的ACR镜像完整地址即可,格式为myregistry.azurecr.io/[镜像名称]:[版本标签],比如myregistry.azurecr.io/web-app:v2。只要容器应用能访问到该ACR并具备权限,就会自动从此处拉取镜像,替代Docker Hub等公共源。
二、为Dev/Uat环境的容器应用开通ACR访问权限
针对跨资源组的场景,有三种实用方案:
方案1:使用Azure托管标识(推荐)
这种方式无需手动管理密码,安全性更高:
- 给Dev/Uat的容器应用开启系统分配托管标识,或创建用户分配托管标识并关联到容器应用
- 为该托管标识分配ACR的
AcrPull角色(仅拥有拉取镜像的权限,符合最小权限原则),可通过Azure CLI执行以下命令:az role assignment create --assignee <托管标识的客户端ID或资源ID> --scope /subscriptions/<你的订阅ID>/resourceGroups/production-network-group/providers/Microsoft.ContainerRegistry/registries/myregistry --role AcrPull - 最后在容器应用的镜像配置中,选择“使用托管标识”认证,无需再填写用户名和密码
方案2:使用服务主体凭证
如果必须采用凭证方式访问:
- 创建一个Azure AD服务主体,并为其分配ACR的
AcrPull角色 - 将服务主体的客户端ID和密钥作为私有注册表凭证,添加到Dev/Uat的容器应用中:在容器应用的“容器”配置页面,新增私有注册表,地址填写
myregistry.azurecr.io,用户名设为服务主体客户端ID,密码设为服务主体密钥 - 配置完成后,容器应用即可通过该凭证拉取ACR中的镜像
方案3:网络层面打通(适用于要求私有网络访问的场景)
若不想让流量走公网,可通过网络配置实现私有访问:
- 在production-network-group中为ACR创建专用端点,关联到prod环境的VNet
- 将Dev/Uat环境的VNet(分别位于dev-network-group、uat-network-group)与prod的VNet建立VNet对等连接
- 配置ACR的网络规则,允许来自Dev/Uat VNet的流量访问
- 网络打通后,容器应用无需额外配置凭证,直接使用ACR地址即可拉取镜像
内容的提问来源于stack exchange,提问作者Python coder
相关产品推荐
相关产品推荐

