Устранение неполадок с ошибками выполнения правил 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>