Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
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>