Azure Functions代理经应用网关后服务端点访问受限问题咨询
这是完全正常的行为,我来拆解背后的逻辑
你遇到的情况完全符合Azure VNet集成、服务端点以及Premium函数应用的出站流量规则,下面一步步解释原因,以及如何调整让流量按你预期的走子网服务端点:
Premium函数应用的出站流量默认不走VNet服务端点
你的代理函数用的是Premium EP1计划,虽然做了Regional VNet集成,但这种集成默认仅支持函数访问VNet内部资源(比如虚拟机、私有端点存储);而出站访问其他PaaS服务(比如你的Web API)时,流量默认会走公共互联网,源IP是函数应用的公共出站IP,而非集成子网内的IP。这就是为什么把该公共IP加入Web API白名单后就能正常访问——此时流量走公网,符合白名单规则。服务端点的流量验证逻辑
你给Web API所在子网配置了Microsoft.Web服务端点,且设置访问限制仅允许来自该子网的流量,但这里的“来自子网的流量”特指通过服务端点发起、源IP属于该子网的内网流量。而代理函数默认的出站请求并未通过服务端点走内网,自然不满足访问限制条件,所以被拦截。让流量按预期走子网服务端点的配置步骤
要实现内网流量路径,需要完成两个关键配置:- 给代理函数配置强制路由到VNet:在Premium函数应用的VNet集成设置里,开启「路由所有出站流量通过VNet」选项,或者添加自定义路由规则,将Web API域名(比如
api1.azurewebsites.net)的流量路由指向VNet内部。这样函数的出站请求就会通过集成子网走服务端点,而非公网。 - 调整Web API的访问限制:把代理函数所在的子网添加到Web API的访问允许列表中(而非仅允许Web API自身的子网),因为此时流量的源子网是代理函数的子网,而非Web API的子网。
- 给代理函数配置强制路由到VNet:在Premium函数应用的VNet集成设置里,开启「路由所有出站流量通过VNet」选项,或者添加自定义路由规则,将Web API域名(比如
你可以在代理函数里加一段简单的代码,比如调用http://icanhazip.com获取并打印出站请求的源IP,就能验证配置前后的IP变化——配置前是函数的公共IP,配置后会变成集成子网内的IP。
内容的提问来源于stack exchange,提问作者David C
相关产品推荐
相关产品推荐

