Azure DevOps部署报StorageError: Forbidden 需配置哪些防火墙IP
问题说明
通过Azure DevOps部署NodeJS应用到关联VNet、配置了存储防火墙规则的Function App时,部署阶段抛出StorageError: Forbidden报错;将存储账号公网访问权限改为允许所有网络后,Pipeline可正常执行。
根因
部署流程中两类访问存储账号的请求源未被防火墙放行:一是Azure DevOps运行部署任务的代理出站请求,二是Function App部署过程中读写关联存储的出站请求,两类请求走公网访问存储时被防火墙拦截。
需配置的放行规则
- 放行Azure DevOps代理IP
若使用微软托管代理,先确认你Pipeline选择的代理地域,下载对应地域最新的微软托管代理IP段列表,将段内所有出站IP添加到存储账号防火墙允许列表。注意:微软托管代理IP每周例行更新,长期使用建议定期同步IP段,或改用部署在同VNet内的自托管代理,避免IP变动导致部署失败 - 放行Function App出站IP
进入Function App资源的「属性」页,复制页面列出的所有出站IP、附加出站IP,全部添加到存储账号防火墙允许列表。部署阶段Function App拉取部署包、写入部署状态、同步运行时配置的请求,都会从这些IP发起访问存储。 - (推荐无IP维护成本方案)配置VNet接入规则
- 将自托管代理部署在和Function App、存储账号同VNet的独立子网中
- 在存储账号防火墙的虚拟网络规则栏,添加Function App所在子网、自托管代理所在子网
- 勾选存储账号配置项
允许受信任的Microsoft服务访问此存储帐户
提示:仅勾选受信任服务选项无法放行微软托管代理的请求,微软托管代理不在存储账号默认信任的服务列表内,必须单独放通IP或通过VNet私网接入。
验证方法
规则配置完成后重新触发Pipeline,若不再抛出StorageError: Forbidden即配置生效。如果仍存在拦截,可开启存储账号的诊断日志,查看被拦截请求的源IP,将对应IP补入允许列表即可。
内容的提问来源于stack exchange,提问作者HLT
相关产品推荐
相关产品推荐

