您正在查看 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 代理中的所有访问权限控制政策,并确定在
<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 地址。此操作可以通过多种方式完成:
使用界面跟踪记录
- 捕获失败的 API 请求的跟踪记录。
- 从右侧面板中选择失败的特定访问权限控制政策。
在阶段详细信息窗格中,检查变量
proxy.client.ip
的值,如以下示例跟踪记录屏幕截图所示。如果未列出
proxy.client.ip
,请检查 X-Forwarded-For 或 True-Client-IP 消息标头的值。
使用自定义报告
您可以创建自定义报告,以确定在 API 代理中执行访问权限控制政策期间是否抛出了 403 状态代码,同时确定客户端 IP 地址。如果过去曾发生过该问题或者该问题间歇性发生,并且您无法在界面中捕获跟踪记录,则此功能特别有用。
请参阅创建和管理自定义报告,了解如何创建自定义报告。在自定义报告中,选择:
流量总和作为“指标”,以及
代理、响应状态代码、代理客户端 IP 和 X-Forwarded-For-IP 作为“维度”。
这应可帮助您确定导致错误的一个或多个传递的客户端 IP 地址。
如果客户端 IP 地址(由变量
proxy.client.ip
指示)或在 API 请求中传递的任何 IP 地址与在访问权限控制政策(其中action
属性设为DENY
)<MatchRule>
元素内的<SourceAddress>
元素中指定的 IP 地址相匹配,则这是导致错误的原因。在上面所示的示例中,在引用变量
proxy.client.ip
中设置的值(如在上面的跟踪记录的屏幕截图所示)与在访问权限控制政策的<SourceAddress>
元素中定义的 IP 地址相匹配,从而触发错误响应:"faultstring": "Access Denied for client ip : 104.132.196.83"
解决方法
如果访问控制政策要拒绝访问来自 faultstring
中列出的特定 IP 地址的 API 请求,则应该显示错误消息。在这种情况下,您不需要执行任何其他操作。
但是,如果您确定可允许特定 IP 地址访问特定 API 代理的 API 请求,则修改访问控制政策以允许访问这些 IP 地址。或者,如果您不想拒绝对对任何 IP 地址的访问,则可以从 API 代理中移除访问权限控制政策。
以下示例显示了如何仅允许访问特定 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>