Azure Blob存储403授权失败:同资源组API访问受限问题排查
问题场景
同一Azure App Service计划下托管多个后端API,所有API共享相同出站IP,且均启用访问限制仅允许API网关访问。Blob存储已配置网络限制(路径:Networking --> 允许选定的虚拟网络和IP地址 --> 防火墙),并添加了所有API的出站IP,但API获取Blob图片时抛出403错误:
Azure.RequestFailedException: This request is not authorized to perform this operation.
RequestId:0bc5827d-c01e-0030-382f-929e61000000
Status: 403 (This request is not authorized to perform this operation.)
ErrorCode: AuthorizationFailure
Content:AuthorizationFailureThis request is not authorized to perform this operation. RequestId:0bc5827d-c01e-0030-382f-929e61000000
Time:2023-05-29T13:11:56.0013545Z
补充信息:API和Blob均未使用虚拟网络(vNet),位于同一资源组、使用相同标识,移除存储账户网络限制(允许所有网络访问)后可正常工作。
解决方法
补全所有出站IP
Azure Web App的出站IP包含静态出站IP和额外出站IP两类,别只加静态IP。去Web App的属性页面把所有列出的出站IP都添加到Blob存储的防火墙规则里。开启信任Microsoft服务选项
即使没配置vNet,若Web App所在区域启用了存储服务端点,请求可能不走出站IP。在Blob存储的网络设置里勾选允许受信任的Microsoft服务访问此存储账户,测试是否恢复正常。检查标识权限
虽然共用同一标识,但要确认该标识有没有Blob存储的Storage Blob Data Reader或更高权限。去存储账户的**访问控制(IAM)**页面,检查该标识的权限配置,确保具备读取Blob的权限。核对请求源IP
如果API网关或Web App有额外代理,请求实际源IP可能不是Web App的出站IP。开启Blob存储的诊断日志,查看请求的源IP,确认和你添加的IP是否一致。
内容的提问来源于stack exchange,提问作者Saad Awan

