Azure APIM部署在Front Door后切内部模式访问异常配置方法
问题根因
访问中断由三个配置错误共同导致:
- APIM切换为
internal mode后会直接解绑所有公网IP,公网域名my-api-management.azure-api.net仅会解析到VNet内网地址。当前Front Door后端池配置的是该公网域名,公网侧的Front Door边缘节点无法路由到纯内网地址,自然无法连接后端。 - NSG规则中放通的3443端口是APIM管理平面专用端口,业务网关的HTTPS流量默认监听443端口,端口配置完全不匹配业务流量需求。
AzureFrontDoor.Frontend服务标签仅对公网入站流量生效,APIM切换到内部模式后没有公网暴露路径,该服务标签对应的流量根本无法抵达子网网卡层面。
正确配置方案
以下两种方案都可以实现类似App Service「访问限制」的效果,即仅允许Front Door流量接入APIM,拦截所有直接公网访问。
方案1:APIM保留External模式 + 内置入站限制(配置成本最低)
该方案不需要复杂的VNet对接,直接用APIM原生能力实现访问控制,逻辑和App Service访问限制完全一致:
- 先将APIM切回
External模式,等待服务恢复,确认直接访问APIM网关、通过Front Door访问均正常。 - 进入APIM实例的「网络」配置页,找到入站访问限制设置项。
- 新增优先级最高的允许规则:
- 规则类型:服务标签
- 关联服务标签:
AzureFrontDoor.Frontend - 匹配端口:443
- 动作:允许
- 将入站默认规则从「允许」修改为「拒绝」,此时所有不在允许列表内的公网流量(包括直接访问APIM公网地址的流量)都会被拦截,仅Front Door流量可以正常接入。
- 额外加固:在APIM入站策略中添加
X-Azure-FDID请求头校验,填入当前Front Door实例的ID,防止其他租户的Front Door实例恶意接入你的APIM后端,策略代码如下:
<check-header name="X-Azure-FDID" failed-check-httpcode="403" failed-check-error-message="Invalid request source" ignore-case="true"> <value>替换为当前Front Door实例的资源ID</value> </check-header>
- 配置完成后验证:直接访问APIM公网域名会返回403禁止访问,通过配置好的Front Door域名可正常访问所有API,符合预期。
方案2:APIM使用Internal模式 + Front Door专用链接(安全等级最高)
如果要求APIM完全不暴露公网攻击面,通过内网对接Front Door,按以下步骤配置:
- 先将APIM切回
External模式恢复访问,给APIM所在子网配置正确的NSG入站规则:- 优先级100:源为
AzureLoadBalancer,源端口任意,目标任意,目标端口443,协议TCP,动作允许(Azure平台健康探测必需规则,不可省略) - 优先级110:源为当前VNet内网网段,源端口任意,目标任意,目标端口443、3443,协议TCP,动作允许(用于内网管理和专用链接通信)
- 调整默认入站规则为拒绝所有其他入站流量
- 优先级100:源为
- 将APIM切换回
Internal模式,等待部署完成。 - 修改Front Door后端池配置,不要直接填写APIM公网域名,新增「专用链接服务」类型的后端,选择目标APIM实例,提交后到APIM侧审批专用连接请求。
- 连接生效后,Front Door会通过Azure内网骨干直接访问VNet内的APIM实例,全程流量不经过公网,APIM无任何公网暴露面。
- 同样建议添加
X-Azure-FDID请求头校验,拦截非授权来源的接入请求。
内容的提问来源于stack exchange,提问作者Nayden Van
相关产品推荐
相关产品推荐

