您目前查看的是 Apigee 和 Apigee Hybrid 說明文件。
查看
Apigee Edge 說明文件。
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中識別的 IP 位址相符的特定政策 (如上方的步驟 1 所示)。舉例來說,下列政策會將
<SourceAddress>IP 定義為104.132.196.83,,與faultstring中的 IP 相符:<?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 要求的追蹤記錄。
- 從右側面板選取失敗的特定存取權控管政策。
在「Phase Details」窗格中,檢查變數
proxy.client.ip的值,如下列範例追蹤記錄的螢幕截圖所示。
如果沒有列出
proxy.client.ip,請檢查 X-Forwarded-For 或 True-Client-IP 訊息標頭的值。
使用自訂報表
您可以建立自訂報表,判斷在 API 代理程式中執行存取權控管政策時是否擲回 403 狀態碼,並判斷用戶端 IP 位址。如果問題過去曾發生,或是問題間歇性出現,且您無法在 UI 中擷取追蹤記錄,這個方法就特別實用。
如要瞭解如何建立自訂報表,請參閱「建立及管理自訂報表」。在自訂報表中,選擇:
「流量總和」做為指標,以及
「Proxy」、「回應狀態碼」、「Proxy 用戶端 IP」和「X-Forwarded-For-IP」做為維度。
這有助於判斷導致錯誤的用戶端 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>