Risoluzione dei problemi relativi agli errori di runtime dei criteri di controllo degli accessi

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

IPDeniedAccess

Codice di errore

accesscontrol.IPDeniedAccess

Corpo della risposta di errore

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

Esempio di messaggio di errore

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

Causa

Questo errore si verifica se l'indirizzo IP client o qualsiasi indirizzo IP trasmesso come parte della richiesta API corrisponde a uno o più indirizzi IP specificati nell'elemento <SourceAddress> all'interno dell'elemento <MatchRule> del criterio di controllo dell'accesso e l'attributo action dell'elemento <MatchRule> è impostato su DENY.

Ad esempio, supponiamo che <SourceAddress> sia definito come mostrato di seguito:

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

Se l'indirizzo IP riportato sopra corrisponde all'indirizzo IP del sistema client (indicato dalla variabile proxy.client.ip) o a uno degli indirizzi IP trasmessi nell'ambito della richiesta API, si verificherà l'errore.

Diagnosi

  1. Identifica gli indirizzi IP a cui è stato negato l'accesso per una richiesta API specifica. Puoi trovare queste informazioni nell'elemento faultstring della risposta di errore.

    Ad esempio, nel seguente faultstring, l'indirizzo IP è 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Esamina tutte le policy di controllo dell'accesso nel proxy API non riuscito e determina la policy specifica in cui gli indirizzi IP specificati nell'elemento <SourceAddress> corrispondono agli indirizzi IP identificati in faultstring (passaggio 1 sopra).

    Ad esempio, la seguente policy definisce l'IP <SourceAddress> come 104.132.196.83,, che corrisponde a quanto presente in 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. Determina gli indirizzi IP da cui è stata effettuata la richiesta API. Puoi farlo in diversi modi:

    1. Utilizzo di UI Trace

      1. Acquisisci la traccia della richiesta API non riuscita.
      2. Seleziona la specifica policy di controllo dell'accesso non riuscita dal riquadro a destra.
      3. Nel riquadro Dettagli fase, controlla il valore della variabile proxy.client.ip come mostrato nello screenshot seguente di una traccia di esempio.

        Il riquadro dei dettagli fase che mostra l'indirizzo IP da cui è stata effettuata la richiesta API.

      4. Se proxy.client.ip non è elencato, controlla il valore delle intestazioni dei messaggi X-Forwarded-For o True-Client-IP.

    2. Utilizzo dei report personalizzati

      Puoi creare report personalizzati per determinare se è stato generato un codice di stato 403 durante l'esecuzione del criterio di controllo dell'accesso all'interno del proxy API e anche per determinare l'indirizzo IP del client. Ciò è particolarmente utile se il problema si è verificato in passato o se è intermittente e non riesci ad acquisire la traccia nell'interfaccia utente.

      Consulta Creazione e gestione di report personalizzati per capire come creare report personalizzati. Nel report personalizzato, scegli:

      1. Somma del traffico come metrica e

      2. Proxy, Codice di stato della risposta, IP client proxy e X-Forwarded-For-IP come dimensioni.

      In questo modo, potrai determinare l'IP o gli indirizzi IP client trasmessi che hanno generato l'errore.

  4. Se l'indirizzo IP del client (indicato dalla variabile proxy.client.ip) o qualsiasi indirizzo IP trasmesso nell'ambito della richiesta API corrisponde agli indirizzi IP specificati nell'elemento <SourceAddress> all'interno dell'elemento <MatchRule> del criterio di controllo dell'accesso, dove l'attributo action è impostato su DENY, questa è la causa dell'errore.

    Nell'esempio mostrato sopra, il valore impostato nella variabile di riferimento proxy.client.ip (come mostrato nello screenshot della traccia sopra) corrisponde all'indirizzo IP definito nell'elemento <SourceAddress> del criterio di controllo dell'accesso, attivando così la risposta di errore:

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

Risoluzione

Se la policy di controllo dell'accesso ha lo scopo di negare l'accesso alle richieste API provenienti dagli indirizzi IP specifici elencati in faultstring, il messaggio di errore è previsto. In questo caso, non è richiesta alcuna azione aggiuntiva.

Tuttavia, se determini che è possibile concedere l'accesso alle richieste API per il proxy API specifico all'indirizzo o agli indirizzi IP specifici, modifica il criterio di controllo dell'accesso per consentire l'accesso a questi indirizzi IP. In alternativa, puoi rimuovere la policy di controllo dell'accesso dal proxy API se non vuoi negare l'accesso a indirizzi IP.

Ecco un esempio che mostra come consentire l'accesso solo a un indirizzo IP specifico 104.132.196.83 e negare l'accesso per il resto:

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