Azure APIM未强制校验Subscription Key,如何限制访问?
强制Azure API Management校验订阅密钥的配置方案
1. 确认API及操作的订阅要求设置
- 登录APIM控制台,定位到目标API:
- 再次验证API级别的“Subscription Required”已开启;
- 逐一检查该API下的所有操作,进入单个操作的“设置”页面,确保“Subscription Required”选项勾选为“是”。部分场景下会单独为操作关闭该设置,导致绕过校验。
2. 限制Azure Function的直接访问
- 若Function允许直接通过自身URL访问,用户会绕开APIM的密钥校验,需配置访问限制:
- 进入Azure Function实例,依次打开“网络” > “访问限制”;
- 添加允许规则:将APIM实例的所有出站IP地址(可在APIM“概述”页面获取)加入允许列表;
- 添加拒绝规则:设置“拒绝所有其他IP”,确保所有请求必须经过APIM。
3. 验证并添加订阅密钥校验策略
- 默认开启“Subscription Required”会自动注入校验策略,但可手动确认或补充:
- 进入目标API的“设计”页面,查看“入站处理”环节的策略代码;
- 确保存在
<check-subscription-key>策略,示例代码如下:<check-subscription-key header-name="Ocp-Apim-Subscription-Key" query-param-name="subscription-key" /> - 若策略缺失,手动添加并保存,确保策略作用于API级别(所有操作继承)或指定操作。
4. 确认订阅密钥的作用域关联
- 检查订阅的作用域是否覆盖目标API:
- 进入APIM的“订阅”页面,找到对应订阅;
- 查看“作用域”字段,确保其包含目标API(支持API级别、产品级别或全局级别);
- 若作用域不匹配,编辑订阅调整作用域范围。
5. 确保使用APIM的合法调用URL
- 测试时必须使用APIM提供的API入口URL(格式:
https://<apim实例名>.azure-api.net/<API路径>),而非Azure Function的原生URL(https://<函数名>.azurewebsites.net/api/<函数路径>)。直接访问Function URL不会触发APIM的密钥校验。
6. 等待配置生效并重新测试
- APIM配置变更可能存在5-10分钟的生效延迟,修改设置后等待一段时间,再使用携带订阅密钥的请求测试,确认校验生效。
内容的提问来源于stack exchange,提问作者mickymikemichaelmikemike
相关产品推荐
相关产品推荐

