You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Virtual Network生产环境访问Blob storage报403授权失败排查

生产环境VNet内Blob Storage访问403故障排查方案

环境现状

  • 现有staging过渡、生产两套环境,均通过ARM模板部署,staging环境运行正常,生产环境存在Blob Storage访问异常
  • 部署架构如下:
    • App Service部署于frontend子网,关联的网络安全组(NSG)已配置允许互联网访问规则
    • Blob Storage部署于backend子网
    • 已部署Virtual Network(VNet)资源
    • Blob Storage已配置Private Endpoint(专用终结点)

故障现象

生产环境App Service连接Blob Storage时抛出如下403授权失败错误,staging环境无同类异常:

Azure.RequestFailedException: This request is not authorized to perform this operation.
RequestId:b648c22e-301e-0008-40e9-89a640000000
Time:2022-06-01T18:58:52.0008425Z
Status: 403 (This request is not authorized to perform this operation.)
ErrorCode: AuthorizationFailure

Content:
<?xml version="1.0" encoding="utf-8"?><Error><Code>AuthorizationFailure</Code><Message>This request is not authorized to perform this operation.
RequestId:b648d22e-301e-0008-40e9-75e640000000
Time:2022-06-01T19:58:52.0008425Z</Message></Error>

已做过的排查操作:

  • 删除生产环境Blob Storage的Private Endpoint配置,问题无改善
  • 仅当将Blob Storage移出VNet时,访问恢复正常
  • 已为所有访问Blob Storage的托管标识配置读者、数据访问权限、存储Blob数据参与者、存储账户参与者、所有者等RBAC角色,问题仍未解决

排查步骤

第一步:快速定位两套环境的配置差异

不要直接对比本地存储的ARM模板文件,以Azure侧实际生效的运行态配置为准做对比:

  • 分别在Azure门户进入staging、生产环境的资源组,使用「导出模板」功能下载当前实际运行的资源配置,逐段对比存储账户、VNet、Private Endpoint、App Service VNet集成、NSG、私有DNS区域的参数差异,重点关注默认值、枚举类参数(比如允许/拒绝规则)的区别。
  • 打开Azure Resource Graph,执行以下Kusto查询直接拉取两个环境存储账户的网络配置做对比:
resources
| where type == "microsoft.storage/storageaccounts"
| where resourceGroup in ("<替换为你的staging资源组名>","<替换为你的生产资源组名>")
| project name, resourceGroup, properties.networkAcls

重点核对networkAcls下的defaultAction取值、virtualNetworkRules、ipRules配置项,绝大多数同类问题都是生产环境存储账户防火墙默认规则设为Deny,且未正确添加App Service所在子网的允许规则,而staging环境规则配置完整。

第二步:核心网络配置核查

你已经配置了全量RBAC角色仍报错,可基本排除身份权限问题,故障点集中在网络规则和VNet流量链路层:

  • 检查存储账户防火墙规则:删除Private Endpoint不会自动修改存储账户的防火墙配置,这是你之前删除Private Endpoint后问题无改善的核心原因。确认生产环境存储账户防火墙的公网网络访问规则,如果选中了「选定网络」,必须将App Service所在的frontend子网、App Service的出站公网IP加入允许列表,否则流量会被直接拦截返回403。你把Blob移出VNet后访问恢复,本质是操作时将存储防火墙切回了「所有网络可访问」模式。
  • 检查App Service VNet集成配置:确认生产环境App Service是否正确开启了区域VNet集成,且关联的是对应VNet的frontend子网;同时检查App Service应用配置,确认WEBSITE_VNET_ROUTE_ALL配置项已开启,保证App Service到存储的流量走VNet内网而非公网出口,staging环境正常大概率是该配置已正确开启而生产环境漏配。
  • 检查Private Endpoint关联配置:如果需要保留Private Endpoint访问模式,确认私有DNS区域privatelink.blob.core.windows.net已经关联到生产环境VNet,且区域内存在指向存储Private Endpoint IP的A记录,避免App Service解析存储域名时拿到公网IP,被存储防火墙拦截。
  • 检查子网关联规则:对比staging和生产环境frontend、backend子网关联的NSG出站规则、UDR路由表规则,确认生产环境没有拦截443端口到backend子网流量的规则,也没有自定义路由将存储相关流量转发到不兼容的网络设备上。
  • 检查存储防火墙例外配置:确认存储账户防火墙的例外列表中,已勾选「允许受信任的Microsoft服务访问此存储账户」选项。

第三步:链路连通性验证

  • 进入生产环境App Service的Kudu控制台,执行nslookup <你的存储账户名>.blob.core.windows.net,如果返回的是VNet内网IP说明Private Endpoint解析正常,如果返回公网IP说明私有DNS配置存在问题。
  • 解析正常后再在Kudu中执行tcping <你的存储账户名>.blob.core.windows.net 443,确认443端口连通性正常。
  • 网络链路通了之后如果仍报错,再核对代码中使用的访问密钥、SAS令牌是否过期,是否配置了错误的IP限制或权限范围。

内容的提问来源于stack exchange,提问作者johnstaveley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:42:25