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

Última actualización: 21/11/2022

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” “User is not authorized to access this resource with an explicit deny” (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 de API Gateway.
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" "User: anonymous is not authorized to perform: execute-api:Invoke on resource:<api-resource-arn>" (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 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.

Para obtener más información, consulte ¿Cómo soluciono errores 403 “Missing Authentication Token”(Falta el token de autenticación) de un punto de conexión de API de REST de API Gateway?

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 de 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 de REST.

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

Invocar un nombre de dominio personalizado sin una asignación de ruta base

“x-amzn-errortype” = “ForbiddenException”

“Prohibido”

La persona que llama invoca un dominio personalizado sin asignar una ruta base a una API.

 

Para obtener más información, consulte Configuración de nombres de dominio personalizados para API de REST.

Invocar una API con un dominio personalizado habilitado cuando la URL del dominio incluye la etapa

“x-amzn-errortype” = “MissingAuthenticationTokenException”

“Missing Authentication Token” (Token de autenticación faltante)

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.

Para más información, consulte Trabajar con mapeos de la API para las API REST.

La etapa en la URL de la solicitud no es válida
"x-amzn-errortype" = "ForbiddenException"
"Forbidden" (Prohibido)

La URL de la solicitud de la persona que llama incluye una etapa que no existe. Verifique que la etapa existe y la ortografía de la URL de la solicitud.

Para más información, consulte Invocación de una API REST en Amazon API Gateway.

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 se producen errores al poner en marcha comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de que utiliza la versión más reciente de la 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 de manera similar a la que se indica a continuación:

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.

Comprobar que la configuración de DNS en cualquier punto de conexión de Amazon 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:

  • Para invocar una API regional desde una Amazon VPC, los nombres de DNS privados deben desactivarse en el punto de conexión de la interfaz. A continuación, un DNS público puede resolver el nombre de host del punto de conexión. 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 activarse en el punto de conexión de la interfaz. A continuación, el nombre de host del punto de conexión de la interfaz puede resolverse en los recursos de la subred local de Amazon VPC. Para obtener más información, consulte Cómo invocar una API privada.
    Nota: No es necesario configurar un DNS privado si invoca la API privada mediante una de las siguientes opciones:
    El nombre de DNS público de la API privada.
    -o bien-
    Un alias de Amazon Route 53.

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).