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

Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza 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 del client o qualsiasi indirizzo IP passato nell'ambito della richiesta dell'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 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 degli indirizzi IP trasmessi nell'ambito della richiesta API, si verifica l'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 all'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 <SourceAddress> come 104.132.196.83,, che corrisponde a quanto indicato 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 della richiesta API non riuscita.
      2. Seleziona il criterio di controllo dell'accesso specifico che ha avuto esito negativo 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 Dettagli fase che mostra l&#39;indirizzo IP da cui è stata effettuata la richiesta API.

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

    2. Utilizzare i 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 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, Codice di stato della risposta, IP client proxy e X-Forwarded-For-IP 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 riportato 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 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 nessun indirizzo 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>