Resolução de problemas de erros de tempo de execução da política AccessControl

Está a ver a documentação do Apigee e do Apigee Hybrid.
Ver documentação do Apigee Edge.

IPDeniedAccess

Código de 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

Este erro ocorre se o endereço IP do cliente ou qualquer endereço IP transmitido como parte do pedido da API corresponder a qualquer endereço IP especificado no elemento <SourceAddress> no elemento <MatchRule> da política de controlo de acesso e o atributo action do elemento <MatchRule> estiver definido como DENY.

Por exemplo, suponhamos que o <SourceAddress> está 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 a qualquer um dos endereços IP transmitidos como parte do pedido da API, ocorre o erro.

Diagnóstico

  1. Identifique os endereços IP aos quais o acesso foi recusado para um pedido de API específico. Pode encontrar estas informações no elemento faultstring da resposta de erro.

    Por exemplo, no seguinte faultstring, 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 controlo de acesso no proxy de API com falha e determine a política específica onde os endereços IP especificados no elemento <SourceAddress> correspondem aos endereços IP identificados no elemento faultstring (passo 1 acima).

    Por exemplo, a seguinte política define o IP <SourceAddress> como 104.132.196.83,, que corresponde ao que está no 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. Determinar os endereços IP a partir dos quais o pedido de API foi feito. Isto pode ser feito de várias formas:

    1. Usar o rastreio da IU

      1. Capture o rastreio do pedido de API com falha.
      2. Selecione a política de controlo de acesso específica que falhou no painel do lado direito.
      3. No painel Detalhes da fase, verifique o valor da variável proxy.client.ip, conforme mostrado na seguinte captura de ecrã de um exemplo de rastreio.

        O painel Detalhes da fase mostra o endereço IP a partir do qual o pedido de API foi feito.

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

    2. Usar relatórios personalizados

      Pode criar relatórios personalizados para determinar se foi gerado um código de estado 403 durante a execução da política de controlo de acesso no proxy de API e também determinar o endereço IP do cliente. Isto é particularmente útil se o problema tiver ocorrido no passado ou se for intermitente e não conseguir capturar o rastreio na IU.

      Consulte o artigo Criar e gerir relatórios personalizados para saber como criar relatórios personalizados. No relatório personalizado, escolha:

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

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

      Isto deve ajudar a determinar o IP do cliente ou os endereços IP transmitidos que originaram o erro.

  4. Se o endereço IP do cliente (indicado pela variável proxy.client.ip) ou qualquer endereço IP transmitido como parte do pedido da API corresponder aos endereços IP especificados no elemento <SourceAddress> no elemento <MatchRule> da política de controlo de acesso, em que o atributo action está definido como DENY, essa é a causa do erro.

    No exemplo apresentado acima, o valor definido na variável de referência proxy.client.ip (como se vê na captura de ecrã do rastreio acima) corresponde ao endereço IP definido no elemento <SourceAddress> da política de controlo de acesso, o que aciona a resposta de erro:

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

Resolução

Se a política de controlo de acesso se destinar a negar o acesso a pedidos de API provenientes dos endereços IP específicos indicados em faultstring, a mensagem de erro é esperada. Neste caso, não é necessária nenhuma ação adicional.

No entanto, se determinar que os endereços IP específicos podem ter acesso aos pedidos da API para o proxy de API específico, modifique a política de controlo de acesso para permitir o acesso a esses endereços IP. Em alternativa, pode remover a política de controlo de acesso do proxy de API se não quiser negar o acesso a nenhum endereço IP.

Segue-se um exemplo que mostra como permitir o acesso 104.132.196.83apenas a um endereço IP específico e recusar o acesso para o resto:

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