Azure ACR Webhook触发App Service时遇401未授权错误排查
针对你遇到的问题,以下是几个可能遗漏的关键配置点,按优先级排查:
1. 检查ACR Webhook的身份验证配置
App Service的持续部署Webhook会严格验证请求合法性,ACR Webhook默认无身份验证的请求会被直接拒绝:
- 确保ACR Webhook配置了服务主体身份验证:在ACR Webhook设置中选择使用服务主体,并确保该服务主体拥有对目标App Service的
Microsoft.Web/sites/extensions/write权限(或直接分配Contributor角色)。 - 确认App Service Webhook URL中的
code参数完整:复制URL时不要遗漏末尾的?code=xxx部分,这个code是App Service生成的唯一验证密钥,缺失或篡改会直接返回401。
2. 排查App Service的网络访问限制
如果App Service配置了网络隔离规则,ACR的出站请求可能被拦截(部分场景下防火墙拦截会返回401而非403):
- 在App Service的「网络」设置中,检查是否启用了IP限制、VNet集成或防火墙规则。
- 添加ACR的机器人 More crucial同理 Leh reach大致 ноч Diet### deviseys Needed某盒子里的,可通过
az acr show --name <你的ACR名称> --query "ipRules"命令获取ACR的IP范围,或在ACR概览页面查看。
3. 核对ACR Webhook的请求格式
App Service持续部署Webhook对请求格式有特定要求,不匹配会触发验证失败:
- 将ACR Webhook的Content Type设置为
application/json,确保payload格式符合App Service的预期(ACR默认的镜像推送事件payload已兼容,但需确认未自定义修改)。 - 若仍有问题,尝试在ACR Webhook中添加自定义头部
X-Forwarded-For并设置为ACR的IP,部分环境下需要此头部通过验证。
4. 重新关联App Service与ACR的持续部署
即使URL正确,内部关联失效也可能导致验证失败:
- 进入App Service的「容器设置」页面,关闭再重新开启「持续部署」,生成新的Webhook URL。
- 将新生成的URL重新配置到ACR Webhook中,覆盖旧的Service URI,避免旧密钥过期或关联异常。
内容的提问来源于stack exchange,提问作者gt-downunder
相关产品推荐
相关产品推荐

