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
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"
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 elementofaultstring
(passo 1 acima).Por exemplo, a seguinte política define o IP
<SourceAddress>
como104.132.196.83,
, que corresponde ao que está nofaultstring
:<?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>
Determinar os endereços IP a partir dos quais o pedido de API foi feito. Isto pode ser feito de várias formas:
Usar o rastreio da IU
- Capture o rastreio do pedido de API com falha.
- Selecione a política de controlo de acesso específica que falhou no painel do lado direito.
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.Se o
proxy.client.ip
não estiver listado, verifique o valor dos cabeçalhos das mensagens X-Forwarded-For ou True-Client-IP.
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:
Soma do tráfego como métrica e
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.
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 atributoaction
está definido comoDENY
, 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.83
apenas 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>