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

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

Диагностика

  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>