配置Azure Function访问限制后遇403 Ip Forbidden问题求助
解决跨资源组Azure Function调用的403 IP Forbidden问题
我之前也碰到过一模一样的问题,核心原因很简单:你只添加了资源组B中Function App的单个IP地址,但Azure Function App的出站请求会使用一组IP地址,不是固定的某一个。你从Properties里拿到的那个IP只是其中之一,实际调用时可能用了其他出站IP,所以被访问限制拦下来了。
下面是正确的配置步骤,以及更省心的替代方案:
方法一:配置完整的出站IP允许列表
1. 导出资源组B中Function的所有出站IP
- 登录Azure门户,打开资源组B的Function App
- 进入「设置 > 属性」页面
- 找到出站IP地址字段,这里会列出该Function所有可能用于对外请求的IP;如果你的Function用的是高级/专用计划,还要注意下方的额外出站IP地址,这些也需要加入允许列表
- 把所有这些IP复制下来,每个IP用
x.x.x.x/32的CIDR格式(单个IP的范围)
2. 在资源组A的Function中添加允许规则
- 打开资源组A的Function App,进入「网络 > 访问限制」
- 点击「添加规则」,规则类型选择「允许」
- 在「IP地址范围」中逐个粘贴刚才复制的所有出站IP(也可以把多个IP合并成规则,不过单个添加更清晰)
- 设置优先级(确保这些规则的优先级高于默认的拒绝规则,数字越小优先级越高)
- 保存所有规则,等待几分钟让配置生效,再测试调用
方法二:更省心的无IP配置方案(推荐)
如果后续Function App有缩放、计划变更的情况,出站IP可能会变化,维护IP列表会很麻烦。可以用Azure AD身份验证来替代IP限制:
- 给资源组A的Function App启用Azure AD身份验证,关闭匿名访问选项
- 在资源组B的Function App中启用系统分配的托管标识
- 给这个托管标识分配资源组A中Function App的「Function App Contributor」或自定义的访问权限
- 在资源组B的Function代码中,通过托管标识获取访问令牌,然后携带令牌调用资源组A的Function
- 此时资源组A的访问限制可以结合Azure AD身份验证,确保只有授权的身份能访问,完全不用维护IP列表
额外排查小技巧
- 先临时关闭资源组A的访问限制,测试调用是否正常,如果正常,说明确实是IP限制的问题
- 确认你获取的是出站IP,而不是Function的入站IP(Properties里的主IP是入站用的,出站IP是单独的字段)
- 如果两个Function都在同一个VNet里,可以配置VNet集成,然后在访问限制中允许VNet内的流量,这也是一种免IP的方案
内容的提问来源于stack exchange,提问作者Programador Desenvolvedor
相关产品推荐
相关产品推荐

