无需使用VNET将Azure App Service连接到受IP限制的存储账户
可行方案
方案1:补全App Service出站IP白名单(无需改代码)
- 进入App1的「属性」页面,复制所有出站IP和附加出站IP两个字段下的全部IP地址,不要遗漏
- 把上述所有IP添加到存储账户的防火墙白名单中,保留原有公司内部IP段的配置
- 原有存储连接字符串可直接沿用,不需要修改App代码
- 注意:App Service出站IP会在你变更服务计划层级、切换区域、开启缩放等操作时变动,需要同步更新存储白名单。
方案2:托管标识+存储资源实例规则(最稳定,无需维护IP)
- 确认你已经为App1开启系统分配托管标识,并为该标识分配了对应存储账户/目标Blob容器的「存储Blob数据参与者」权限
- 进入存储账户「网络」配置页,找到「资源实例」配置区域
- 资源类型选择
Microsoft.Web/sites,实例选择你的App1,保存配置 - 修改App1中存储连接字符串为:
DefaultEndpointsProtocol=https;AccountName=<替换为你的存储账户名>;EndpointSuffix=core.windows.net - 调整存储访问代码,使用
DefaultAzureCredential类进行身份验证,.NET Framework 4.8原生支持该认证方式 - 该规则会让App1的流量直接绕过存储的IP防火墙校验,仅验证身份权限,不需要维护IP白名单,安全性更高。
方案3:SAS令牌访问(无需改身份配置)
- 为App1使用的存储容器生成带权限限制、有有效期的SAS令牌
- App1使用SAS令牌拼接的连接字符串访问存储,不需要调整存储网络配置
- 注意需要定期轮换SAS令牌,避免泄露风险。
之前配置未生效的原因
- 「允许受信任服务列表中的Azure服务访问此存储账户」开关仅对微软官方托管的第一方服务生效,普通用户创建的Web App不在受信任服务列表中,所以开启后也不会生效,必须手动配置资源实例规则才能让你的App绕过IP校验。
- 仅为App1分配RBAC权限无法绕过存储的网络防火墙规则,存储的网络访问校验优先级高于身份权限校验,只要流量不在允许的网络范围内,就算身份权限正确也会被拦截。
- 如果你之前添加App出站IP时只加了部分出站IP,没有包含附加出站IP,也会出现部分请求被拦截的情况。
内容的提问来源于stack exchange,提问作者Daniel Procházka
相关产品推荐
相关产品推荐

