为何经APIM转发的请求,Function App识别到的源IP不一致?
问题描述
我拥有以下资源:
- 一个Consumption类型的Function App
- 一个连接到该Function App后端的APIM API(Developer层,带有静态IP),无额外自定义配置或策略
我为Function App开启流量规则,设置如下:
- 允许<APIM静态IP>
- 默认拒绝
执行结果:
- 通过Postman调用Function App端点可获得成功响应
- 通过Power Automate的HTTP动作调用时,返回403错误,
x-ms-forbidden-ip头显示为已知Logic Apps地址段
添加LogicApps.<region>服务标签到Function App的允许流量规则后,Power Automate的请求可正常通行。
我的问题是:APIM内部执行了什么操作,导致Function App针对不同请求源识别到不同的源IP?我已查阅相关APIM IP地址文档但未找到相关行为的解释。
原因分析
核心原因是APIM在转发请求时,会根据请求发起方的类型,采用不同的源IP转发策略:
针对Postman这类外部客户端发起的请求:
APIM会以自身的静态IP作为源IP向Function App发送请求,这也是仅允许APIM静态IP就能正常访问的原因。针对Power Automate(属于Azure Logic Apps生态)这类Azure托管服务发起的请求:
APIM会触发Azure内部托管服务间的特殊转发逻辑——此时请求的源IP会保留Power Automate所属的Logic Apps地址段,而非替换为APIM的静态IP。这是因为Azure内部服务间的调用会遵循专属的身份验证与路由规则,APIM会直接传递原始托管服务的源信息,而非强制覆盖为自身IP。
内容的提问来源于stack exchange,提问作者the_rb
相关产品推荐
相关产品推荐

