Solução de problemas de erros de ambiente de execução da política do AccessControl

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

IPDeniedAccess

Código do erro

accesscontrol.IPDeniedAccess

Corpo da resposta de erro

{
    "fault": {
        "faultstring": "Access Denied for client ip : client_IP",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Exemplo de mensagem de erro

{
    "fault": {
        "faultstring": "Access Denied for client ip : 104.132.196.83",
        "detail": {
            "errorcode": "accesscontrol.IPDeniedAccess"
        }
    }
}

Causa

Esse erro ocorre se o endereço IP do cliente ou qualquer endereço IP transmitido como parte da solicitação da API corresponder a qualquer endereço IP especificado no elemento <SourceAddress> dentro do elemento <MatchRule> da política de controle de acesso e o atributo action do elemento <MatchRule> está definido como DENY.

Por exemplo, digamos que o <SourceAddress> seja definido conforme mostrado abaixo:

<SourceAddress mask="32">104.132.196.83</SourceAddress>

Se o endereço IP acima corresponder ao endereço IP do sistema cliente (indicado pela variável proxy.client.ip) ou qualquer um dos endereços IP passados como parte da solicitação de API, ocorrerá um erro.

Diagnóstico

  1. Identifique os endereços IP que tiveram o acesso negado para uma solicitação de API específica. Você encontra essas informações no elemento faultstring da resposta de erro.

    Por exemplo, no faultstring seguinte, o endereço IP é 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Examine todas as políticas de controle de acesso no proxy de API com falha e determine a política específica em que os endereços IP especificados no elemento <SourceAddress> correspondem aos endereços IP identificados em faultstring (Etapa 1 acima).

    Por exemplo, a política a seguir define o IP <SourceAddress> como 104.132.196.83,, que corresponde ao que está em 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. Determine os endereços IP de onde a solicitação da API foi feita. Isso pode ser feito de várias maneiras:

    1. Como usar o IU Trace

      1. Capture o trace para a solicitação de API com falha.
      2. Selecione a política de controle de acesso específica que falhou no painel à direita.
      3. Verifique o valor da variável proxy.client.ip, conforme mostrado na captura de tela de um exemplo de trace abaixo.

      4. Se proxy.client.ip não estiver listado, verifique o valor dos cabeçalhos de mensagem X-Forwarded-For ou True-Client-IP.

    2. Como usar os relatórios personalizados

      É possível criar relatórios personalizados para determinar se um código de status 403 foi gerado durante a execução da política de controle de acesso no proxy de API e também determinar o endereço IP do cliente. Isso é especialmente útil se o problema tiver ocorrido no passado ou se o problema é intermitente e você não consegue capturar o rastro na IU.

      Consulte Criar e gerenciar relatórios personalizados para entender como criar relatórios personalizados. No relatório personalizado, escolha:

      1. Soma do tráfego como uma métrica e

      2. Proxy, Código de status de resposta, IP do cliente proxy e X-Forwarded-For como dimensões.

      Isso ajuda a determinar os endereços IP do cliente ou os endereços IP que levaram ao erro.

  4. Se o endereço IP do cliente (indicado pela variável proxy.client.ip) ou qualquer endereço IP passado como parte da solicitação da API correspondem aos endereços IP especificados no elemento <SourceAddress> dentro do elemento <MatchRule> da Política de controle de acesso, em que o atributo action foi definido como DENY, um erro será gerado.

    No exemplo mostrado acima, o valor definido na variável de referência proxy.client.ip (como visto na captura de tela do trace acima) corresponde ao endereço IP definido no elemento <SourceAddress> da política de controle de acesso. Dessa forma, ele aciona a resposta de erro:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
    

Resolução

Se a política de controle de acesso destina-se a negar acesso à solicitação de APIs proveniente dos endereços IP específicos listados em faultstring, então a mensagem de erro é esperada. Nesse caso, não é necessária nenhuma outra ação.

No entanto, se você determinar que o(s) endereço(s) IP(s) específico pode receber acesso às solicitações de API do proxy específico da API, modifique a política de controle de acesso para permitir o acesso a esses endereços IP. Como alternativa, você pode remover a Política de controle de acesso do proxy da API, se não quiser negar o acesso aos endereços IP.

Veja um exemplo que mostra como permitir o acesso a um determinado endereço IP específico 104.132.196.83 e negar o acesso para o restante:

<AccessControl name="ACL">
  <IPRules noRuleMatchAction = "DENY">
    <MatchRule action = "ALLOW">
      <SourceAddress mask="32">104.132.196.83</SourceAddress>
    </MatchRule>
  </IPRules>
</AccessControl>