Solución de problemas de errores de entorno de ejecución de la política AccessControl

Estás viendo la documentación de Apigee Edge.
Ve a la documentación de Apigee X.
info

IPDeniedAccess

Código de error

accesscontrol.IPDeniedAccess

Cuerpo de la respuesta del error

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

Ejemplo de mensaje de error

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

Causa

Este error se produce si la dirección IP del cliente o cualquier dirección IP pasada como parte de la solicitud de la API coincide con cualquier dirección IP especificada en el elemento <SourceAddress> dentro del elemento <MatchRule> de la Política de control de acceso. El atributo action del elemento <MatchRule> se establece en DENY.

Por ejemplo, supongamos que se define <SourceAddress> de la siguiente manera:

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

Si la dirección IP anterior coincide con la dirección IP del sistema cliente (indicado por la variable proxy.client.ip) o en cualquiera de las direcciones IP pasadas como parte de la solicitud a la API, se producirá el error.

Diagnóstico

  1. Identifica las direcciones IP de acceso denegado a una solicitud a la API específica. Puedes encontrar esta información en el elemento faultstring de la respuesta de error.

    Por ejemplo, en el siguiente campo faultstring, la dirección IP es 104.132.196.83:

    "faultstring": "Access Denied for client ip : 104.132.196.83"
    
  2. Examina todas las políticas de control de acceso del proxy de API con errores y determina la política específica en la que las direcciones IP especificadas en el elemento <SourceAddress> coinciden con las direcciones IP identificadas en faultstring (paso 1 anterior).

    Por ejemplo, la siguiente política define la IP <SourceAddress> como 104.132.196.83, que coincide con lo que se encuentra en la 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 las direcciones IP desde las que se realizó la solicitud a la API. Esto se puede hacer de varias maneras:

    1. Usa el seguimiento de la IU

      1. Captura el seguimiento de la solicitud a la API con errores.
      2. Selecciona la política de control de acceso específica que falló en el panel derecho.
      3. Verifica el valor de la variable proxy.client.ip como se muestra en la siguiente captura de pantalla de un seguimiento de muestra.

      4. Si proxy.client.ip no está en la lista, verifica el valor de los encabezados de mensajes X-Forwarded-For o True-Client-IP.

    2. Usa informes personalizados

      Puede crear informes personalizados para determinar si se emitió un código de estado 403 durante la ejecución de la política de Control de acceso en el proxy de API y, además, determinar la dirección IP del cliente. Esto es particularmente útil si el problema ocurrió en el pasado o si el problema es intermitente y no puedes capturar el seguimiento en la IU.

      Consulta Crea y administra informes personalizados a fin de obtener información para crear informes personalizados. En el informe personalizado, selecciona lo siguiente:

      1. Suma de tráfico como métrica, y

      2. Proxy, Código de estado de respuesta, IP de cliente de proxy y X-Forwarded-For como dimensiones.

      Esto debería ayudarte a determinar la dirección IP de cliente o las direcciones IP que generaron el error.

  4. Si la dirección IP del cliente (indicada por la variable proxy.client.ip ), o cualquier dirección IP que se pasa como parte de la solicitud a la API, coincide con las direcciones IP especificadas en el <SourceAddress> dentro del elemento <MatchRule> de la política de control de acceso, en la cual el atributo action se establece en DENY, significa que esa es la causa del error.

    En el ejemplo anterior, el valor establecido en la variable de referencia proxy.client.ip (como se ve en la captura de pantalla anterior) coincide con la dirección IP definida en el elemento <SourceAddress> de la política de control de acceso, lo que activa la respuesta de error:

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

Solución

Si la política de control de acceso está destinada a denegar el acceso a las solicitudes a la API provenientes de las direcciones IP específicas enumeradas en faultstring, se esperará el mensaje de error. En este caso, no es necesario que realices ninguna acción adicional.

Sin embargo, si determinas que las direcciones IP específicas pueden recibir acceso a las solicitudes a la API para el proxy de API específico, modifica la política de control de acceso a fin de permitir el acceso a esas direcciones IP. Como alternativa, puede quitar la política de control de acceso del proxy de API si no deseas denegar el acceso a ninguna dirección IP.

A continuación, puedes ver un ejemplo de cómo permitir el acceso solo a una dirección IP específica 104.132.196.83 y denegar el acceso para el resto:

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