Risoluzione degli errori di runtime del criterio AccessControl

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

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 del client o qualsiasi indirizzo IP passato nell'ambito della richiesta API corrisponde a uno o più indirizzi IP specificati nell'elemento <SourceAddress> all'interno dell'elemento <MatchRule> del criterio di controllo degli accessi e l'attributo action dell'elemento <MatchRule> è impostato su DENY.

Ad esempio, supponiamo che <SourceAddress> sia definito come descritto 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 qualsiasi degli indirizzi IP passati nell'ambito della richiesta API, si verificherà un errore.

Diagnosi

  1. Identifica gli indirizzi IP a cui è stato negato l'accesso per una specifica richiesta API. 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 tutti i criteri di controllo dell'accesso nel proxy API non riuscito e determina il criterio specifico in cui gli indirizzi IP specificati nell'elemento <SourceAddress> corrispondono agli indirizzi IP identificati in faultstring (passaggio 1 sopra).

    Ad esempio, il seguente criterio definisce l'IP di <SourceAddress> come 104.132.196.83,, che corrisponde a quanto contenuto 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. Esistono diversi modi per farlo:

    1. Utilizzo della traccia UI

      1. Acquisisci la traccia per la richiesta API non riuscita.
      2. Seleziona dal riquadro a destra lo specifico criterio di controllo dell'accesso per il quale non è stato possibile eseguire l'accesso.
      3. Controlla il valore della variabile proxy.client.ip come mostrato nello screenshot seguente di una traccia di esempio.

      4. Se proxy.client.ip non è presente nell'elenco, controlla il valore del valore Intestazioni dei messaggi X-Forwarded-For o True-Client-IP.

    2. Utilizzare i rapporti personalizzati

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

      Per informazioni su come creare report personalizzati, consulta Creare e gestire i report personalizzati. Nel report personalizzato, scegli:

      1. Somma del traffico come metrica e

      2. Proxy, Response Status Code (Codice di stato della risposta), Proxy Client IP (IP client proxy) e X-Forwarded-For (For) sia impostato come dimensioni.

      Questo dovrebbe aiutarti a determinare l'IP del client o gli indirizzi IP passati che hanno portato all'errore.

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

    Nell'esempio mostrato sopra, il valore impostato nella variabile di riferimento proxy.client.ip (come mostrato nello screenshot della traccia precedente) 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 il criterio di controllo dell'accesso ha lo scopo di negare l'accesso alle richieste API provenienti da indirizzi IP specifici elencati in faultstring, è previsto il messaggio di errore. In questo caso, non sono richieste ulteriori azioni.

Tuttavia, se stabilisci che è possibile concedere a determinati indirizzi IP l'accesso alle richieste API per lo specifico proxy API, modifica il criterio di controllo dell'accesso per consentire l'accesso a quegli indirizzi IP. In alternativa, puoi rimuovere il criterio di controllo dell'accesso dal proxy API se non vuoi negare l'accesso a uno o più 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 agli altri:

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