Вы просматриваете документацию по 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-адрес клиента или любой IP-адрес, переданный в составе запроса к API, совпадает с любым IP-адресом, указанным в элементе <SourceAddress> внутри элемента <MatchRule> правила контроля доступа, а атрибут action элемента <MatchRule> имеет значение DENY.
Предположим, что параметр <SourceAddress> определен следующим образом:
<SourceAddress mask="32">104.132.196.83</SourceAddress>
Если указанный выше IP-адрес совпадает с IP-адресом клиентской системы (обозначен переменной proxy.client.ip) или любым из IP-адресов, переданных в составе запроса к API, произойдет ошибка.
диагностика;
Определите IP-адреса, которым было отказано в доступе к определенному запросу к API. Эту информацию можно найти в элементе
faultstringответа об ошибке.Например, в следующем фрагменте
faultstringIP-адрес –104.132.196.83:."faultstring": "Access Denied for client ip : 104.132.196.83"Проверьте все правила контроля доступа в API-прокси, который не удалось развернуть, и определите правило, в котором IP-адреса, указанные в элементе
<SourceAddress>, совпадают с IP-адресами, указанными в элементеfaultstring(шаг 1 выше).Например, в приведенных ниже правилах IP-адрес
<SourceAddress>определен как104.132.196.83,, что соответствует значению в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>Определите IP-адрес или адреса, с которых был отправлен запрос к API. Это можно сделать несколькими способами:
Как использовать трассировку интерфейса
- Захватите трассировку для неудачного запроса к API.
- На панели справа выберите определенное правило управления доступом, которое не удалось применить.
Проверьте значение переменной
proxy.client.ip, как показано на скриншоте ниже.
Если
proxy.client.ipне указан, проверьте значение заголовков сообщений X-Forwarded-For или True-Client-IP.
Использование специальных отчетов
Вы можете создать специальный отчет, чтобы узнать, был ли сгенерирован код статуса 403 во время выполнения правила контроля доступа в прокси-сервере API, а также определить IP-адрес клиента. Это особенно полезно, если проблема возникала в прошлом или если она непостоянна и вы не можете записать трассировку в интерфейсе.
Подробнее о том, как создавать специальные отчеты и управлять ими… В специальном отчете выберите:
Сумма трафика в качестве показателя;
Прокси, Код статуса ответа, IP-адрес клиента прокси-сервера и X-Forwarded-For в качестве параметров.
Это поможет вам определить IP-адрес клиента или IP-адреса, которые привели к ошибке.
Если IP-адрес клиента (указанный переменной
proxy.client.ip) или любой IP-адрес, переданный как часть запроса к API, соответствует IP-адресам, указанным в элементе<SourceAddress>элемента<MatchRule>правила контроля доступа, где атрибутуactionприсвоено значениеDENY, то это и является причиной ошибки.В приведенном выше примере значение, заданное в переменной
proxy.client.ip(как показано на скриншоте трассировки выше), совпадает с IP-адресом, определенным в элементе<SourceAddress>правил контроля доступа, поэтому возникает ответ с ошибкой:"faultstring": "Access Denied for client ip : 104.132.196.83"
Разрешение
Если правило контроля доступа предназначено для запрета доступа к запросам API, поступающим с определенных IP-адресов, указанных в faultstring, то сообщение об ошибке ожидаемо. В этом случае никаких дополнительных действий не требуется.
Однако, если вы определите, что определенным IP-адресам можно предоставить доступ к запросам API для определенного прокси API, измените правила контроля доступа, чтобы разрешить доступ к этим IP-адресам. Вы также можете удалить правило контроля доступа из прокси API, если не хотите запрещать доступ с каких-либо IP-адресов.
Ниже приведен пример того, как разрешить доступ только к определенному IP-адресу 104.132.196.83 и запретить доступ для всех остальных:
<AccessControl name="ACL">
<IPRules noRuleMatchAction = "DENY">
<MatchRule action = "ALLOW">
<SourceAddress mask="32">104.132.196.83</SourceAddress>
</MatchRule>
</IPRules>
</AccessControl>