IP訪問控制插件
是API網關
提供的 API 安全防護組件之一,負責控制 API 的調用來源 IP (支持IP段)。您可以通過配置某個 API 的 IP 白名單/黑名單來允許/拒絕某個來源的API請求。
1. 概述
支持白名單或黑名單方式:
白名單:支持配置 IP 或者 AppID + IP 的白名單訪問,不在白名單列表的請求將會被拒絕。
IP 白名單,只允許設定的調用來源 IP 的請求被允許。
AppID + IP ,如果配置了AppId,則該條目僅對該AppId生效,此AppId只能在設定的 IP 下訪問,不限制其他已授權App的調用IP。
黑名單:您可以配置 IP 黑名單,黑名單中 IP 的訪問將被 API 網關拒絕。
IP訪問控制插件僅支持IPv4地址,不支持IPv6地址。
2. 插件配置
可以選擇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內地址作為配置值。
3. 穿透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。
4. 跨VPC訪問
在跨VPC訪問的情況,API網關可以直接從請求中讀取來源VPC內的IP地址,您可以放心編寫針對VPC內IP的IP訪問控制插件。API網關還可以讀取到來源VPC的VPCID,您可以通過設置參數訪問控制插件來設置只允許某些指定的VPC訪問您的API。
5. 接入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網關看到的來源地址處于這個地址段
6. IP訪問控制插件支持插件數據集
IP訪問控制插件的配置和詳細說明參考IP訪問控制插件。
6.1. 創建插件數據集
登錄API網關控制臺,選擇地域并在左側導航欄選擇API管理 > 插件管理。
在插件列表頁面選擇自定義數據集欄,單擊頁面右上角創建數據集,在創建數據集彈框中填寫數據集的名稱,類型選擇IP_WHITELIST_CIDR。
單擊目標數據集ID,進入數據集頁面單擊創建數據集條目,在創建數據集條目彈框中填寫數據值(IP地址或IP地址段)和過期時間(數據集中的數據條目在到達其過期時間后將自動失效。)。
插件數據集只在專享實例生效,如果您配置了數據集的插件所綁定的API不是配置在專享實例上,那么插件中配置的數據集將不生效。
6.2. IP訪問控制插件配置插件數據集
IP訪問控制插件中配置插件數據集是在IP訪問控制插件中配置的基礎上,在items集合元素中增加blocksDatasetId字段,該字段的值就是上述創建的IP_ACCESS_CIDR類型的數據集ID。blocksDatasetId和blocks是相互兼容的,每個item中可以同時配置blocksDatasetId和blocks,也可以單獨配置其中一個。
---
type: ALLOW
items:
- blocksDatasetId: 87b65008e92541938537b1a4a236eda5
appId: 219810
- blocksDatasetId: 87b65008e92541938537b1a4a236eda3
blocks:
- 127.0.XX.XX
- 192.168.XX.XX/24