¿Cómo soluciono los errores HTTP 403 Forbidden (Prohibido) de API Gateway?

Última actualización: 19-05-2021

Cuando llamo a mi Amazon API Gateway, recibo un error 403 Forbidden (Prohibido). ¿Cómo lo soluciono?

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 satisfacerla debido a problemas del lado del cliente.

Las API de API Gateway pueden devolver respuestas 403 Forbidden (Prohibido) por cualquiera de los siguientes motivos:

Problema Encabezado de la respuesta Mensaje de error Detalles
Acceso denegado "x-amzn-ErrorType" = "AccessDeniedException" "El usuario no tiene autorización para acceder a este recurso con una denegación explícita" La persona que llama no tiene autorización para acceder a una API que utiliza un autorizador Lambda.
Acceso denegado "x-amzn-ErrorType" = "AccessDeniedException" "El usuario <user-arn> no tiene autorización para ejecutar 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 utiliza una autorización de AWS Identity and Access Management (IAM). O bien, la API tiene una política de recursos adjunta que deniega explícitamente el acceso a la persona que llama.

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

Acceso denegado "x-amzn-ErrorType" = "AccessDeniedException" "El usuario anónimo no tiene autorización para ejecutar execute-api:Invoke en el recurso <api-resource-arn>"

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

Para obtener más información, consulte la 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 utilizó claves de IAM no válidas para acceder a una API que utiliza una autorización de IAM.
Falta el token de autenticación "x-amzn-ErrorType" = "MissingAuthenticationTokenException" "Falta el token de autenticación" No se encontró ningún token de autenticación en la solicitud.
El token de autenticación venció "x-amzn-ErrorType" = "InvalidSignatureException" "La firma venció" El token de autenticación de la solicitud venció.
La clave de API no es válida "x-amzn-ErrorType" = "ForbiddenException" "Se especificó un identificador de clave de API no válido" La persona que llama utilizó una clave de API no válida en 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 proporcionada. Verifique su 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 una autorización de IAM.
AWS WAF filtrado "x-amzn-ErrorType" = "ForbiddenException" "Prohibido" El filtro del firewall de aplicaciones web (WAF) bloquea la solicitud cuando AWS WAF está activo en la API.
La ruta del recurso no existe "x-amzn-ErrorType" = "MissingAuthenticationTokenException" "Falta el token de autenticación" Una solicitud sin encabezado de "Autorización" se envía a una ruta de recursos de la API que no existe.
La ruta de recursos no existe "x-amzn-ErrorType" = "IncompleteSignatureException" "El encabezado de la autorización requiere el parámetro “Credential” (Credencial). 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 un encabezado de "autorización" se envía a una ruta de recursos de API que no existe.
Invocación de una API privada mediante nombres de DNS públicos de forma incorrecta "x-amzn-ErrorType" = "ForbiddenException" "Prohibido"

Al invocar una API privada desde Amazon Virtual Private Cloud (Amazon VPC) mediante nombres de DNS públicos, el encabezado "Host" o "x-apigw-api-id" falta en la solicitud.

Para obtener más información, consulte Invocación de su API privada mediante nombres de anfitrión de DNS públicos específicos de punto de enlace.

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

"x-amzn-ErrorType" = "ForbiddenException" "Prohibido"

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

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

Resolución

Siga estos pasos de solución de problemas para ayudar a determinar la causa del error.

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 el acceso HTTP no se permite.
  • Si hay otro servicio de AWS delante de la API (por ejemplo, Amazon CloudFront), dicho servicio puede rechazar la solicitud con un error 403 en la respuesta.

Configure el registro de acceso a la API para investigarlo.

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

Verifique el recurso solicitado en la API mediante la consola de API Gateway o AWS Command Line Interface (AWS CLI).

Nota: La API tiene que implementarse con la última definición de la API.

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

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

Ejemplo de comando curl -v

curl -X GET -v https://apiId.execute-api.region.amazonaws.com/stageName/resourceName

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

Verifique el encabezado

Si el error es sobre una clave de API, verifique que el encabezado “x-api-key” se envió en la solicitud.

Verifique la configuración de DNS en un punto de enlace de VPC

Si la API se invoca desde una Amazon VPC que tenga un punto de enlace de la interfaz de VPC, verifique que la configuración de DNS del punto de enlace de la interfaz esté configurada correctamente en función del tipo de API.

Tenga en cuenta lo siguiente:

Verifique la política de recursos

Verifique lo siguiente:

  • Si la API se invoca desde Amazon VPC con un punto de enlace de la interfaz de VPC, la política de recursos de la API debe conceder a Amazon VPC o al punto de enlace de la interfaz acceso a la API.
  • Las especificaciones y el formato de los recursos de la política de recursos son correctos. (No hay validación de la especificación de recursos cuando se guarda una política de recursos). Para obtener ejemplos, consulte Ejemplos de políticas de recursos de API Gateway.

Analice los registros de acceso de la API

Configure y analice los registros de acceso de la API para determinar si las solicitudes están llegando a la API.

Analice los mensajes de solicitud y respuesta HTTP

Si puede hacerlo, reproduzca el error en un navegador web y, a continuación, utilice las herramientas de red del navegador para capturar los mensajes de solicitud y respuesta HTTP para analizarlos. Para el análisis sin conexión, guarde estos mensajes en un archivo HTTP (HAR).

Nota: Para obtener instrucciones sobre la creación de un archivo HAR, consulte ¿Cómo puedo crear un archivo HAR desde mi navegador para un caso de AWS Support?

A continuación, analice las solicitudes y respuestas entre el cliente y la API para determinar dónde se produjo el error.