配置虚拟网络的ACR通过Azure Logic Apps访问Blob存储遇403失败
排查Azure容器注册表(ACR)虚拟网络配置导致Blob存储403授权失败问题
问题场景
已配置ACR使用虚拟网络私有访问,存储账户仅允许该虚拟网络访问,但部署的容器组运行时访问Blob存储返回403 AuthorizationFailure,将存储账户开放至所有网络后恢复正常,怀疑ACR未正确接入虚拟网络。
排查与修复步骤
1. 验证ACR的虚拟网络端点配置
- 确认ACR已启用专用端点并关联到目标虚拟网络的子网,且端点状态为「已批准」。
- 检查子网是否禁用了
Network Policy(该策略可能阻止专用端点流量),可通过Azure CLI验证:
若返回az network vnet subnet show --resource-group <资源组名称> --vnet-name <虚拟网络名称> --name <子网名称> --query "privateEndpointNetworkPolicies"Enabled,需将其设为Disabled:az network vnet subnet update --resource-group <资源组名称> --vnet-name <虚拟网络名称> --name <子网名称> --disable-private-endpoint-network-policies true
2. 修正容器组的网络配置
当前容器组未指定虚拟网络接入,默认部署在公共网络,导致流量未经过目标虚拟网络。需在容器组配置中添加网络接入设置:
[ { "name": "py-container-@{variables('Time')}", "properties": { "image": "filogixcontainerregistry.azurecr.io/my-python-app:latest", "resources": { "requests": { "memoryInGB": 1.5, "cpu": 1 }, "limits": { "memoryInGB": 1.5, "cpu": 1 } }, "environmentVariables": [ { "name": "AZURE_STORAGE_CONNECTION_STRING", "value": @{parameters('connection_string')} }, { "name": "BLOB_PATH", "value": @{variables('Path_name')} } ], "networkProfile": { "id": "/subscriptions/<订阅ID>/resourceGroups/<资源组名称>/providers/Microsoft.Network/networkProfiles/<网络配置文件名称>" } } } ]
若容器组支持直接VNet接入,也可替换为virtualNetwork字段指定子网ID,实现容器直接加入虚拟网络。
3. 校验存储账户的访问规则
- 确认存储账户「网络」设置中,已将目标虚拟网络的子网添加至允许列表,未排除ACR专用端点所在子网。
- 可选:为存储账户配置专用端点,确保Blob访问流量完全在虚拟网络内闭环。
4. 确认ACR镜像拉取权限
- 检查容器组所用身份(服务主体/托管身份)是否拥有ACR的
AcrPull角色权限。 - 查看容器组日志,确认镜像拉取步骤无报错,避免因镜像拉取失败导致后续网络请求异常。
内容的提问来源于stack exchange,提问作者josh-hills
相关产品推荐
相关产品推荐

