您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件。 資訊
IPDeniedAccess
錯誤代碼
accesscontrol.IPDeniedAccess
錯誤回應主體
{ "fault": { "faultstring": "Access Denied for client ip : client_IP", "detail": { "errorcode": "accesscontrol.IPDeniedAccess" } } }
錯誤訊息示例
{
"fault": {
"faultstring": "Access Denied for client ip : 104.132.196.83",
"detail": {
"errorcode": "accesscontrol.IPDeniedAccess"
}
}
}
原因
如果用戶端 IP 位址或 API 要求中傳遞的任何 IP 位址,與存取權控管政策 <MatchRule>
元素內 <SourceAddress>
元素中指定的任何 IP 位址相符,且 <MatchRule>
元素的 action
屬性設為 DENY
,就會發生這個錯誤。
舉例來說,假設 <SourceAddress>
定義如下:
<SourceAddress mask="32">104.132.196.83</SourceAddress>
如果上述 IP 位址符合用戶端系統的 IP 位址 (以變數 proxy.client.ip
表示),或是任何隨著 API 要求傳遞的 IP 位址,就會發生錯誤。
診斷
找出拒絕存取特定 API 要求的 IP 位址。您可以在錯誤回應的
faultstring
元素中找到這項資訊。舉例來說,在下列
faultstring
中,IP 位址為104.132.196.83:
"faultstring": "Access Denied for client ip : 104.132.196.83"
檢查失敗的 API Proxy 中的所有存取權控管政策,判斷
<SourceAddress>
元素中指定的 IP 位址與faultstring
(上述步驟 1) 中指明的 IP 位址相符的特定政策。舉例來說,下列政策將
<SourceAddress>
IP 定義為104.132.196.83,
,而該 IP 與faultstring
中的內容相符:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AccessControl async="false" continueOnError="false" enabled="true" name="Access-Control"> <DisplayName>Access-Control</DisplayName> <Properties/> <IPRules noRuleMatchAction="ALLOW"> <MatchRule action="DENY"> <SourceAddress mask="32">104.132.196.83</SourceAddress> </MatchRule> </IPRules> </AccessControl>
判斷發出 API 要求的 IP 位址。手法如下:
使用 UI 追蹤
- 擷取失敗 API 要求的追蹤記錄。
- 在右側面板中選取無法執行的特定存取權控管政策。
如下方追蹤記錄範例螢幕截圖所示,請查看變數
proxy.client.ip
的值。如果畫面上未列出
proxy.client.ip
,請檢查 X-Forwarded-For 或 True-Client-IP 訊息標頭的值。
使用自訂報表
您可以建立自訂報表,以判斷在 API Proxy 的「存取權控管」政策執行期間是否擲回 403 狀態碼,以及判斷用戶端 IP 位址。如果問題過去發生,或是問題間歇性,導致您無法在 UI 中擷取追蹤記錄,這個方法就特別實用。
如要瞭解如何建立自訂報表,請參閱「建立及管理自訂報表」一文。在自訂報表中選擇:
「流量總和」做為指標;以及
「Proxy」、「回應狀態碼」、「Proxy 用戶端 IP」和「X-Forwarded-For」維度。
這可以協助您判斷導致錯誤傳遞的用戶端 IP 或 IP 位址。
如果用戶端 IP 位址 (以變數
proxy.client.ip
表示) 或 API 要求中傳遞的任何 IP 位址,與存取權控管政策<MatchRule>
元素中<SourceAddress>
元素中指定的 IP 位址相符,其中action
屬性設為DENY
,就就是造成錯誤的原因。在上例中,
proxy.client.ip
參照變數設定的值 (如上方追蹤記錄的螢幕截圖所示) 與存取權控管政策<SourceAddress>
元素中定義的 IP 位址相符,因此會觸發錯誤回應:"faultstring": "Access Denied for client ip : 104.132.196.83"
解析度
如果存取權控管政策的目的是拒絕來自 faultstring
中特定 IP 位址的 API 要求存取,則預期會顯示錯誤訊息。在這種情況下,您不需要採取其他動作。
不過,如果您決定讓特定 IP 位址能存取特定 API Proxy 的 API 要求,請修改「存取權控管政策」,允許這些 IP 位址的存取權。如果不想拒絕存取任何 IP 位址,您也可以從 API Proxy 中移除存取權控管政策。
以下範例說明如何僅允許對特定 IP 位址 104.132.196.83
進行存取,並拒絕其餘 IP 位址的存取權:
<AccessControl name="ACL">
<IPRules noRuleMatchAction = "DENY">
<MatchRule action = "ALLOW">
<SourceAddress mask="32">104.132.196.83</SourceAddress>
</MatchRule>
</IPRules>
</AccessControl>