¿Cómo puedo solucionar los errores HTTP 403 desde API Gateway?

11 minutos de lectura
0

Cuando llamo a la API de Amazon API Gateway, aparece un error 403.

Breve descripción

Un código de respuesta HTTP 403 significa que un cliente tiene prohibido acceder a una URL válida. El servidor entiende la solicitud, pero no puede cumplirla debido a problemas en el lado del cliente.

Las API de API Gateway pueden devolver respuestas 403 por cualquiera de los siguientes motivos:

ProblemaEncabezado de respuestaMensaje de errorCausa raíz
Acceso denegado«x-amzn-errortype» = «AccessDeniedException»«User is not authorized to access this resource with an explicit deny»El usuario que llama no está autorizado a acceder a una API que utiliza un autorizador Lambda de API Gateway.
Acceso denegado«x-amzn-errortype» = «AccessDeniedException»«User: <user-arn> is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny»El usuario que llama no está autorizado a acceder a una API que utiliza la autorización de AWS Identity and Access Management (IAM). También puede ocurrir que la API tenga una política de recursos asociada que niegue explícitamente el acceso al usuario que llama.<br><br>Para obtener más información, consulte Autenticación de IAM y política de recursos.
Acceso denegado«x-amzn-errortype» = «AccessDeniedException»«User: anonymous is not authorized to perform: execute-api:Invoke on resource:<api-resource-arn>»El usuario que llama no está autorizado a acceder a una API que utiliza la autorización de IAM. También puede ocurrir que la API tenga una política de recursos asociada que no permita invocar la API a la persona que llama explícitamente.<br><br>Para obtener más información, consulte Autenticación de IAM y política de recursos.
Acceso denegado«x-amzn-errortype» = «AccessDeniedException»«The security token included in the request is invalid.»El usuario que llama ha usado claves de IAM que no son válidas para acceder a una API que utiliza la autorización de IAM.
Falta el token de autenticación«x-amzn-errortype» = «MissingAuthenticationTokenException»«Falta el token de autenticación»No se ha encontrado ningún token de autenticación en la solicitud.
El token de autenticación ha vencido«x-amzn-errortype» = «InvalidSignatureException»«Signature expired»El token de autenticación en la solicitud ha caducado.
La clave de API no es válida«x-amzn-errortype» = «ForbiddenException»«Invalid API Key identifier specified»La persona que llama ha usado una clave de API que no es válida para un método que requiere una clave de API.
La firma no es válida«x-amzn-errortype» = «InvalidSignatureException»«The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method.»La firma en la solicitud no coincide con la del servidor cuando se accede a una API que utiliza la autorización de IAM.
Se ha filtrado AWS WAF«x-amzn-errortype» = «ForbiddenException»«Prohibido»El firewall de aplicaciones web filtra y bloquea la solicitud cuando AWS WAF está activado en la API.
La ruta del recurso no existe«x-amzn-errortype» = «MissingAuthenticationTokenException»«Falta el token de autenticación»Se ha enviado una solicitud sin un encabezado «Autorización» a una ruta de recursos de API que no existe.<br><br>Para obtener más información, consulte ¿Cómo puedo solucionar los errores 403 «Missing Authentication Token» en el punto de enlace de la API de REST de API Gateway?
La ruta del recurso no existe«x-amzn-errortype» = «IncompleteSignatureException»«Authorization header requires "Credential" parameter. Authorization header requires "Signature" parameter. Authorization header requires "SignedHeaders" parameter. Authorization header requires existence of either a "X-Amz-Date" or a "Date" header. Authorization=allow»Se ha enviado una solicitud con un encabezado «Autorización» a una ruta de recursos de API que no existe.
Se ha invocado una API privada con nombres de DNS públicos de forma incorrecta«x-amzn-errortype» = «ForbiddenException»«Prohibido»Se ha invocado una API privada desde una Amazon Virtual Private Cloud (Amazon VPC) con nombres de DNS públicos de forma incorrecta. Por ejemplo: falta el encabezado «Host» o «x-apigw-api-id» en la solicitud.<br><br>Para obtener más información, consulte Invocación de su API privada mediante nombres de host de DNS públicos específicos de punto de enlace.
Se ha invocado una API de REST que tiene un nombre de dominio personalizado mediante el punto de enlace ejecute-api predeterminado«x-amzn-errortype» = «ForbiddenException»«Prohibido»El usuario que llama usa el punto de enlace predeterminado de execute-api para invocar una API REST después de desactivar el punto de enlace predeterminado.<br><br>Para obtener más información, consulte Desactivación del punto de enlace predeterminado para una API de REST
Se ha invocado un nombre de dominio personalizado de API Gateway que requiere seguridad de la capa de transporte (TLS) mutua mediante un certificado de cliente que no es válido.«x-amzn-errortype» = «ForbiddenException»«Prohibido»El certificado de cliente presentado en la solicitud de API no lo ha emitido el truststore del nombre de dominio personalizado o no es válido.<br><br>Para obtener más información, consulte ¿Cómo soluciono los errores HTTP 403 Forbidden de un nombre de dominio personalizado de API Gateway que requiere una TLS mutua?
Se ha invocado un nombre de dominio personalizado sin una asignación de rutas base«x-amzn-errortype» = «ForbiddenException»«Prohibido»El usuario que llama ha invocado un dominio personalizado sin que se haya asignado una ruta base a una API.<br><br>Para obtener más información, consulte Configuración de nombres de dominio personalizados para API de REST.
Se ha invocado una API con el dominio personalizado habilitado cuando la URL del dominio incluye la etapa«x-amzn-errortype» = «MissingAuthenticationTokenException»«Falta el token de autenticación»Una asignación de API especifica una API, una etapa y, opcionalmente, una ruta que se utilizará para la asignación. Por lo tanto, cuando la etapa de una API se asigna a un dominio personalizado, ya no es necesario incluir la etapa en la URL.<br><br>Para obtener más información, consulte Trabajar con mapeos de la API para las API REST.
La URL de la etapa de la solicitud no es válida«x-amzn-errortype» = «ForbiddenException»«Prohibido»La URL de la solicitud del usuario que llama incluye una etapa que no existe. Compruebe si la etapa existe y si la URL de la solicitud se ha escrito correctamente.<br><br>Para obtener más información, consulte Invocación de una API REST en Amazon API Gateway.

Solución

Planteamiento de la fuente del error

Si el error 403 se ha notificado desde otros recursos, es posible que se deba a otra causa. Por ejemplo:

  • Si el error se ha notificado en un navegador web, es posible que se deba a una configuración de proxy incorrecta. El servidor proxy devuelve un error 403 si no se permite el acceso HTTP.
  • Si hay otro servicio de AWS delante de la API, ese servicio puede rechazar la solicitud con un error 403 en la respuesta. Por ejemplo: Amazon CloudFront.

Identificación de la causa del error

Si aún no lo ha hecho, configure el registro de acceso de Amazon CloudWatch para su API. A continuación, consulte los registros de ejecución de la API en CloudWatch para determinar si las solicitudes llegan a la API.

Nota: Las API HTTP no admiten el registro de ejecución. Para solucionar los errores 403 devueltos por un nombre de dominio personalizado que requiere TLS mutua e invoca una API HTTP, siga estos pasos:

1.    Cree una nueva asignación de API para su nombre de dominio personalizado que invoque una API de REST solo para realizar pruebas.

2.    Visualice los registros de ejecución de la API de REST en CloudWatch para identificar la causa de los errores.

3.    Una vez identificado y resuelto el error, redirija la asignación de API para su nombre de dominio personalizado a su API HTTP.

Confirmación de si el recurso solicitado existe en la definición de la API

Nota: Si se muestran errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de la AWS CLI.

Compruebe lo siguiente mediante la consola de API Gateway o la AWS CLI:

  • La API se ha desplegado con la definición de API más reciente.
  • El recurso solicitado existe en la definición de la API.

Utilización de curl para obtener los detalles de la solicitud y la respuesta

Si se puede reproducir el error, use el comando curl -v para obtener más detalles entre el cliente y la API, de forma similar a la siguiente:

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

Nota: Para obtener más información, consulte el sitio web del proyecto curl.

Verificación de si el encabezado de la solicitud es correcto

Si el error se debe a una clave de API que no es válida, verifique que se haya enviado el encabezado «x-api-key» en la solicitud.

Comprobación de si la configuración de DNS de los puntos de enlace de Amazon VPC de la interfaz es correcta

Nota: Confirme lo siguiente en el caso de las API invocadas desde Amazon VPC que solo tengan un punto de enlace de interfaz de VPC.

Compruebe si la configuración de DNS del punto de enlace de la interfaz es correcta en función del tipo de API que esté utilizando.

Tenga en cuenta lo siguiente:

  • Para invocar una API regional desde una Amazon VPC, los nombres de DNS privados deben estar desactivados en el punto de enlace de la interfaz. Entonces, el nombre de host del punto de enlace se puede resolver mediante un DNS público. Para obtener más información, consulte Creación de una API privada en Amazon API Gateway.
  • Para invocar una API privada desde una Amazon VPC con el nombre de DNS privado de la API, los nombres de DNS privados deben estar activados en el punto de enlace de la interfaz. A continuación, el nombre de host del punto de enlace de la interfaz se puede resolver en los recursos de subred local de la Amazon VPC. Para obtener más información, consulte Cómo invocar una API privada.
    Nota: No necesita configurar un DNS privado si está invocando la API privada mediante una de las siguientes opciones:
    El nombre DNS público de la API privada.
    Alternativa:
    Un alias de Amazon Route 53.

Revisión de la política de recursos de la API

Revise la política de recursos de la API para comprobar lo siguiente:

Revisión de los mensajes de solicitud y respuesta HTTP

Si es posible, reproduzca el error en un navegador web. A continuación, utilice las herramientas de red del navegador para capturar los mensajes de solicitud y respuesta HTTP y analizarlos con el fin de determinar dónde se produjo el error.

Nota: Para el análisis sin conexión, guarde los mensajes en un archivo HTTP Archive (HAR).

Información relacionada

Common errors - Amazon API Gateway

¿Cómo permito que solo direcciones IP específicas accedan a mi API de REST de API Gateway?

¿Cómo soluciono los errores al conectarme a un punto de enlace de la API privada de API Gateway?

¿Cómo activo los registros de CloudWatch para solucionar problemas relacionados con la API de REST o API de WebSocket de API Gateway?