Azure API Management: Problemas de limitación de solicitudes y HTTP 403 - Problemas prohibidos

Síntomas

Resources API captura los detalles personales del usuario, las publicaciones de redes sociales, los comentarios y las fotos y usa la respuesta devuelta para un proyecto de aprendizaje automático. Extrañamente después de unos días de usarlo, la operación GetPosts comenzó a generar HTTP 403: error prohibido , mientras que las otras operaciones funcionan correctamente según lo previsto.

{
"statusCode": 403,
"message": "Forbidden"
}

Aparte de lo anterior, también encontramos el error HTTP 429 - Demasiadas solicitudes al invocar la operación GetComments para cada segunda solicitud. El problema se resuelve automáticamente después de 10 segundos, pero se vuelve a producir una vez que se vuelve a realizar la primera llamada a la API. El comportamiento no se observa para las otras operaciones.

{
"statusCode": 429,
"message": "Se ha superado el límite de velocidad. Inténtelo de nuevo en 5 segundos".
}

Pasos para la solución de problemas

  • HTTP 403: se puede producir un error prohibido cuando hay alguna directiva de restricción de acceso implementada.

  • Compruebe el seguimiento del inspector de APIM y debe observar la existencia de una directiva de "filtro ip" que filtra (permite o deniega) las llamadas desde direcciones IP específicas o intervalos de direcciones.

  • Para comprobar el ámbito de la directiva "ip-filter", seleccione el botón Calcular directiva efectiva . Si no ve ninguna directiva de restricción de acceso implementada en ningún ámbito, el siguiente paso de validación debe realizarse en el nivel de producto; para ello, vaya al producto asociado y haga clic en la opción Directivas.

    <inbound>
    <base />
    <choose>
    <when condition="@(context.Operation.Name.Equals("GetPosts"))">
    <ip-filter action="forbid">
    <address-range from="0.0.0.0" to="255.255.255.255" />
    </ip-filter>
    </when>
    </choose>
    </inbound>
  • Para el segundo problema (HTTP 429 - Demasiadas solicitudes), seguiremos el mismo procedimiento comprobando el seguimiento del inspector de APIM y comprobando si hay alguna directiva de "límite de velocidad" o "límite de velocidad por clave" implementada en cualquier ámbito.

  • Si calcula la directiva efectiva, debe observar una directiva de restricción de acceso (rate-limit-by-key) implementada en el ámbito global, es decir, en "Procesamiento de entrada" en la opción "Todas las API".

    <inbound>
    <choose>
    <when condition="@(context.Operation.Name.Equals("GetComments"))">
    <rate-limit-by-key calls="1" renewal-period="10" increment-condition="@(context.Response.StatusCode == 200)" counter-key="@(context.Request.IpAddress)" />
    </when>
    </choose>
    </inbound>

Obtenga más información sobre las directivas ip-filter y rate-limit-by-key en APIM.