Устранение ошибок во время выполнения политики AccessControl

Вы просматриваете документацию 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, возникнет ошибка.

Диагноз

  1. Определите IP-адрес(а), которым был запрещен доступ для конкретного запроса к API. Эту информацию можно найти в элементе faultstring ответа об ошибке.

    Например, в следующей faultstring IP-адрес равен 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Проанализируйте все политики контроля доступа в неисправном 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>
    
  3. Определите IP-адрес(а), с которого(их) был(и) отправлен(ы) запрос к API. Это можно сделать несколькими способами:

    1. Использование трассировки пользовательского интерфейса

      1. Зафиксируйте трассировку неудачного запроса к API.
      2. В правой панели выберите конкретную политику контроля доступа, которая не сработала.
      3. Проверьте значение переменной proxy.client.ip , как показано на следующем снимке экрана с примером трассировки.

      4. Если proxy.client.ip отсутствует в списке, проверьте значение заголовков сообщений X-Forwarded-For или True-Client-IP.

    2. Использование пользовательских отчетов

      Вы можете создавать пользовательские отчеты, чтобы определить, был ли выдан код состояния 403 во время выполнения политики контроля доступа в API-прокси, а также определить IP-адрес клиента. Это особенно полезно, если проблема возникала ранее или если она носит периодический характер, и вы не можете получить трассировку в пользовательском интерфейсе.

      Для получения информации о создании пользовательских отчетов обратитесь к разделу «Создание и управление пользовательскими отчетами» . В пользовательском отчете выберите:

      1. Суммарный трафик как показатель, и

      2. В качестве параметров используются: прокси-сервер , код состояния ответа , IP-адрес клиента прокси-сервера и X-Forwarded-For .

      Это должно помочь вам определить IP-адрес или IP-адреса клиента, которые привели к ошибке.

  4. Если 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>