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

Azure APIM与Function Apps配置问题:仅允许通过APIM访问函数应用

解决Azure Function Apps仅允许APIM访问的问题

我先帮你理清楚问题根源:你把Function的IP限制设成只允许VNet内的流量,但External模式的APIM默认是用公网IP向Function发起请求的,这个公网IP不在你的VNet地址范围里,所以Function直接拒绝并返回403。而当你把自己的IP加入允许列表时,Function可能会读取请求里的X-Forwarded-For头(如果无意中开启了信任代理),把你的客户端IP当成源IP,结果既允许了APIM的转发请求,也让你能直接访问Function了。

下面给你两个靠谱的解决方案,按需选择:


方案一:用VNet集成让APIM和Function在同一网络内访问(更安全)

这个方案能让APIM从VNet内部访问Function,彻底隔绝公网直接访问的可能:

1. 给Consumption计划的Function配置Regional VNet集成

Consumption计划现在已经支持Regional VNet集成了,操作步骤:

  • 打开你的Function App,进入网络 -> VNet集成页面
  • 点击添加VNet,选择你之前创建的VNet,建议专门给Function分配一个子网(比如192.168.0.32/27,别和APIM用的子网冲突)
  • 完成配置后,Function就会加入到你的VNet中,只有VNet内的流量才能访问它

2. 配置APIM通过VNet访问Function

  • 进入APIM的后端页面,找到你导入的Function后端
  • 把后端URL改成Function的VNet内部访问地址(或者直接用Function的私有端点地址,如果你创建了私有端点的话)
  • 确保APIM的VNet连接有权限访问Function所在的子网,这样APIM发起的请求源IP就是VNet内的地址,符合Function的IP限制规则

3. 锁定Function的IP限制

保持你之前的规则:允许192.168.0.0/24,默认拒绝所有其他流量。这样公网直接访问Function会被403拦截,只有APIM的VNet内请求能通过。


方案二:允许APIM的出站IP,再加额外验证(更简单)

如果不想折腾VNet集成,可以用这个方法,重点是让Function只接受APIM的请求:

1. 获取APIM的出站IP地址

打开APIM实例的概述页面,找到出站IP地址列表(一般是多个IP,全部记下来)

2. 更新Function的IP限制规则

  • 进入Function App的网络 -> 访问限制页面
  • 删除之前的VNet地址允许规则,添加新规则:允许APIM的所有出站IP地址
  • 把默认规则设为拒绝所有其他流量

3. 加一层额外验证(推荐)

为了防止有人伪造APIM的IP访问Function,建议加个额外验证:

  • 在APIM的API策略里,添加一个自定义请求头,比如X-APIM-Secret,值设为一个只有你知道的密钥
  • 在Function的代码入口(比如用Middleware或者函数开头的逻辑),检查请求里是否包含这个头,并且值正确,否则返回403
  • 或者用AAD身份验证:让APIM用专属的服务主体访问Function,同时在Function里设置AAD身份验证,只允许这个服务主体的请求通过

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:44:48