问题描述
API Management service 设置禁止外网访问,请求通过外网(Internet)将无法解析到APIM的网关地址,只能通过APIM所集成的内网(Virtual Network)来访问?
问题解答
API Management Service有可以将整个APIM都保护中内部网络访问的功能,也可以针对某些敏感数据的API进行特殊设定,通过访问策略来实现特定IP地址的访问。
方式一:把APIM整个服务集成在内部虚拟网络中
可以将 API Management service 到 Azure 虚拟网络 (Vnet) 内部,以便它可以访问该网络中的后端服务。
- 外部:可以通过外部负载均衡器从公共 Internet 访问 API 管理网关和开发人员门户。 网关可以访问虚拟网络中的资源。
- 内部:只能通过内部负载均衡器从虚拟网络内部访问 API 管理网关和开发人员门户。 网关可以访问虚拟网络中的资源。
在门户上配置根据页面提示一步一步完成,非常容易上手,只是这个过程耗时较长(45分钟左右)。
注意:要进行验证是否配置成功,需要在同一虚拟网络(VNET)中创建虚拟机(VM),访问APIM的开发者门户或APIM中API的完整URL进行验证。
方式二:设置APIM访问限制策略 -- ip-filter 限制调用方IP
ip-filter
策略筛选(允许/拒绝)来自特定 IP 地址和/或地址范围的调用。(官网介绍:https://docs.azure.cn/zh-cn/api-management/api-management-access-restriction-policies#restrict-caller-ips)
设置语句
<policies> <inbound> <base /> <ip-filter action="allow | forbid"> <address>address</address> <address-range from="address" to="address" /> </ip-filter> </inbound> <backend> <base /> </backend> <outbound> <base /> </outbound> <on-error> <base /> </on-error> </policies>
在API的Design页面,也可以通过界面方式操作:
参考资料
在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-management/api-management-using-with-internal-vnet?tabs=stv2
API 管理访问限制策略:https://docs.azure.cn/zh-cn/api-management/api-management-access-restriction-policies
- 检查 HTTP 标头 - 强制必须存在和/或强制采用 HTTP 标头的值。
- 按订阅限制调用速率 - 根据订阅限制调用速率,避免 API 使用量暴增。
- 按密钥限制调用速率 - 根据密钥限制调用速率,避免 API 使用量暴增。
- 限制调用方 IP - 筛选(允许/拒绝)来自特定 IP 地址和/或地址范围的调用。
- 按订阅设置使用量配额 - 允许根据订阅强制实施可续订或有生存期的调用量和/或带宽配额。
- 按密钥设置使用量配额 - 允许根据密钥强制消耗可续订或有生存期的调用量和/或带宽配额。
- 验证 JWT - 强制从指定 HTTP 标头或指定查询参数提取的 JWT 必须存在且有效。
- 验证客户端证书 - 强制客户端提供给 API 管理实例的证书与指定的验证规则和声明相匹配。
[END]