¿Cómo soluciono los errores HTTP 403 de mi API Gateway?

Última actualización: 16/12/2021

Cuando llamo a mi API de Amazon API Gateway, aparece un error 403. ¿Cómo soluciono los errores 403 de API Gateway?

Descripción corta

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

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

Problema Encabezado de la respuesta Mensaje de error Causa raíz
Acceso denegado “x-amzn-errortype” = “AccessDeniedException” “El usuario no está autorizado a acceder a este recurso con una denegación explícita”. La persona que llama no tiene autorización para acceder a una API que utilice un autorizador de Lambda.
Acceso denegado “x-amzn-errortype” = “AccessDeniedException” “El usuario: <user-arn> no está autorizado a realizar: execute-api:Invoke en el recurso: <api-resource-arn> con una denegación explícita”.

La persona que llama no tiene autorización para acceder a una API que utilice la autorización de AWS Identity and Access Management (IAM). O bien, la API tiene una política de recursos adjunta que niega explícitamente el acceso a la persona que llama.

Para obtener más información, consulte Autenticación de IAM y política de recursos.

Acceso denegado “x-amzn-errortype” = “AccessDeniedException” “El usuario: anónimo no está autorizado para realizar: execute-api:Invoke en el recurso:<api-resource-arn>”.

La persona que llama no tiene autorización para acceder a una API que utilice la autorización de IAM. O bien, la API tiene una política de recursos adjunta que no permite explícitamente que la persona que llama invoque la API.

Para obtener más información, consulte Autenticación de IAM y política de recursos.

Acceso denegado “x-amzn-errortype” = “AccessDeniedException” “El token de seguridad incluido en la solicitud no es válido”. La persona que llama empleó claves de IAM que no son válidas para acceder a una API que utilice la autorización de IAM.
Token de autenticación faltante “x-amzn-errortype” = “MissingAuthenticationTokenException” “Token de autenticación faltante” No se encontró un token de autenticación en la solicitud.
Token de autenticación vencido “x-amzn-errortype” = “InvalidSignatureException” “Firma vencida” El token de autenticación de la solicitud está vencido.
La clave de API no es válida “x-amzn-errortype” = “ForbiddenException” “Identificador de clave de API especificado no válido” La persona que llama utilizó 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” “La firma de la solicitud que calculamos no coincide con la firma que proporcionó. Compruebe la clave de acceso secreta de AWS y el método de firma”. La firma de la solicitud no coincide con la del servidor cuando se accede a una API que utiliza la autorización de IAM.
Filtrado por AWS WAF “x-amzn-errortype” = “ForbiddenException” “Prohibido” La solicitud se bloquea mediante el filtrado del firewall de aplicaciones web (WAF) cuando se activa AWS WAF en la API.
La ruta del recurso no existe “x-amzn-errortype” = “MissingAuthenticationTokenException” “Token de autenticación faltante” Una solicitud sin encabezado “Authorization” se envía a una ruta de recursos de la API que no existe.
La ruta del recurso no existe “x-amzn-errortype” = “IncompleteSignatureException” El encabezado de autorización requiere el parámetro 'Credential'. El encabezado de autorización requiere el parámetro 'Signature'. El encabezado de autorización requiere el parámetro “SignedHeaders”. El encabezado de autorización requiere la existencia de un encabezado 'X-Amz-Date' o 'Date'. “Authorization=allow” Una solicitud con encabezado “Authorization” se envía a una ruta de recursos de la API que no existe.
Invocación de una API privada con nombres de DNS públicos de forma incorrecta “x-amzn-errortype” = “ForbiddenException” “Prohibido”

Se invoca 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.

Para obtener más información, consulte Invocación de la API privada mediante nombres de host de DNS públicos específicos del punto de conexión.

Invocación de una API REST que tiene un nombre de dominio personalizado mediante el punto de conexión execute-api predeterminado

“x-amzn-errortype” = “ForbiddenException” “Prohibido”

La persona que llama utiliza el punto de conexión execute-api predeterminado para invocar una API REST después de desactivar el punto de conexión predeterminado.

Para obtener más información, consulte Desactivación del punto de conexión predeterminado para una API REST.

Se invoca un nombre de dominio personalizado de API Gateway que requiere seguridad de la Transport Layer Security (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 emite el almacén de confianza del nombre de dominio personalizado o no es válido.

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?

Resolución

Tome en cuenta el origen del error

Si el error 403 se informó desde otros recursos, podría haber otra causa del error. Por ejemplo:

  • Si el error se informó en un navegador web, es posible que se deba a una configuración incorrecta del proxy. 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.

Identifique qué causa el 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 su 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 errores 403 devueltos por un nombre de dominio personalizado que requiere TLS mutua e invoca una API HTTP, debe hacer lo siguiente:

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

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

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

Confirme que el recurso solicitado exista en la definición de la API

Nota: Si recibe errores al ejecutar comandos de AWS Command Line Interface (AWS CLI), asegúrese de que utiliza la versión más reciente de AWS CLI.

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

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

Utilice curl para obtener los detalles de la solicitud y la respuesta

Si el error se puede reproducir, utilice el comando curl -v para obtener más detalles entre el cliente y la API.

Ejemplo de comando curl -v

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

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

Compruebe que el encabezado de la solicitud sea correcto

Si el error es el resultado de una clave de API que no es válida, verifique que el encabezado “x-api-key” se haya enviado en la solicitud.

Compruebe que la configuración de DNS en cualquier punto de conexión de VPC de la interfaz esté configurada correctamente

Nota: Confirme lo siguiente para las API invocadas desde una Amazon VPC que solo tenga un punto de conexión de VPC de la interfaz.

Compruebe que la configuración de DNS del punto de conexión de la interfaz esté configurada correctamente en función del tipo de API que utiliza.

Tenga en cuenta lo siguiente:

Revise la política de recursos de la API

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

Revise los mensajes de solicitud y respuesta HTTP

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

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