全部产品
Search
文档中心

IP访问控制插件

更新时间: 2021-12-03

IP访问控制插件API网关提供的 API 安全防护组件之一,负责控制 API 的调用来源 IP (支持IP段)。您可以通过配置某个 API 的 IP 白名单/黑名单来允许/拒绝某个来源的API请求。

如何使用

支持白名单或黑名单方式:

  • 白名单: 支持配置 IP 或者 APPID + IP 的白名单访问,不在白名单列表的请求将会被拒绝。

    • IP 白名单,只允许设定的调用来源 IP 的请求被允许。

    • APPID + IP 此APPID只能在设定的 IP 下访问,其他 IP 来源将被拒绝。

  • 黑名单: 您可以配置 IP 黑名单,黑名单中 IP 的访问将被 API 网关拒绝。

插件配置

可以选择JSON或者YAML格式的来配置您的插件,两种格式的schema相同,可以搜索yaml to json转换工具来进行配置格式的转换,yaml格式的模板见下表。

---
type: ALLOW           # 控制模式,支持白名单模式'ALLOW'和黑名单模式'REFUSE'
resource: "XFF:-1"   # 可选字段,如果设置本字段,取X-Forwarded-For头中的IP作为判断依据,本示例取XFF头的倒数第一个IP作为客户端源IP判断,
items: 
- blocks:         # IP地址段
  - 61.3.XX.XX/24   # 使用CIDR方式配置
  appId: 219810   # (可选) 如果配置了appId则该条目仅对该AppId生效
- blocks:         # IP地址
  - 79.11.XX.XX    # 使用IP地址方式配置
- blocks:         # 用户VPC
  - 192.168.XX.XX/32    # 专享实例场景,从用户VPC内访问API网关的请求,API网关看到的来源地址处于这个地址段

需要特别注意最后一点,专享实例场景,API网关允许从用户VPC内发送请求到API网关,此时API网关可以直接读取来源VPC内的地址,比如192.168.XX.XX,用户设置黑白名单时可以直接使用VPC内地址作为配置值。

穿透WAF配置

如果API网关前面有WAF等中间件,业务需要实现API级别IP黑白名单能力时,就需要用到resource字段,resource字段为可选字段,如果不填写,取和网关直接连接前一跳的IP作为判断依据。如果填写本字段,允许设置X-Forwarded-For头中的值作为IP判断依据。

说明

WAF会将他收到的请求的源IP加入到X-Forwarded-For头的最后发送给API网关,API网关去判断X-Forwarded-For头中的这个值就可以。这种情况建议用户使用"XFF:-1"来判断WAF前一跳的IP地址。

resource字段填写格式为“XFF:index”,index的值为X-Forwarded-For头中IP排序序号,从0开始算,允许负数,比如X-Forwarded-For的值为IP1,IP2,IP3,那么如果index值为0,取IP1,如果index的值为-1,取IP3,也就是倒数第一个IP。

跨VPC访问

在跨VPC访问的情况,API网关可以直接从请求中读取来源VPC内的IP地址,您可以放心编写针对VPC内IP的IP访问控制插件。API网关还可以读取到来源VPC的VPCID,您可以通过设置参数访问控制插件来设置只允许某些指定的VPC访问您的API。

接入WAF的同时跨VPC访问

有一种场景,用户的API需要同时对公网和内网提供服务,而在公网提供服务的时候,在API网关前接入了WAF中间件,需要API网关对WAF前的客户端做IP访问控制,同时需要对内网来源做IP访问控制。网关为了这种场景做了适配,用户可以用resource字段和allowResourceMissing字段配合使用来实现同时控制内网和使用WAF等中间件的公网的来源IP。用户通过设置resource字段来指定API网关从X-Forwarded-For头中获取透过WAF中间件过来的客户端的IP,通过allowResourceMissing字段来配置API网关遇到客户端没有传X-Forwarded-For头时的内网访问场景,从前一跳获取客户端的IP作为判断依据。下面是例子:

---
type: ALLOW           # 控制模式,支持白名单模式'ALLOW'和黑名单模式'REFUSE'
resource: "XFF:-1"   # 可选字段,如果设置本字段,取X-Forwarded-For头中的IP作为判断依据,本示例取XFF头的倒数第一个IP作为客户端源IP判断
allowResourceMissing: "true"  #允许Resource缺失,缺失时取API网关的前一跳的IP作为判断条件
items: 
- blocks:         # IP地址段
  - 61.3.XX.XX/24   # 使用CIDR方式配置
  appId: 219810   # (可选) 如果配置了appId则该条目仅对该AppId生效
- blocks:         # IP地址
  - 79.11.XX.XX    # 使用IP地址方式配置
- blocks:         # 用户VPC
  - 192.168.XX.XX/32    # 专享实例场景,从用户VPC内访问API网关的请求,API网关看到的来源地址处于这个地址段