Saltar al contenido

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

10 minutos de lectura
0

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

Descripción breve

Cuando un cliente no puede acceder a una URL válida, recibe un código de respuesta HTTP 403. 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 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 de 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). O bien, la API tiene una política de recursos asociada que niega explícitamente el acceso a la persona que llama. Para obtener más información, consulta 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. O bien, la API tiene una política de recursos asociada que no permite explícitamente que la persona que llama invoque la API. Para obtener más información, consulta 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»“Forbidden”El usuario que llama ha usado una clave de API en un método que requiere una clave de API, pero la clave de API no es correcta. O bien, la clave de API no está asociada a un plan de uso que esté asociado a la etapa. O bien, la clave de API está desactivada o no existe.
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 de la solicitud no coincide con la del servidor cuando el usuario que llama accede a una API que usa la autorización de IAM.
Se ha filtrado AWS WAF«x-amzn-errortype» = «ForbiddenException»“Forbidden”El filtrado del firewall de aplicaciones web bloquea la solicitud cuando AWS WAF está activado en la API.
La ruta del recurso no existe«x-amzn-errortype» = «MissingAuthenticationTokenException»“Missing Authentication Token”Se ha enviado una solicitud con un encabezado “Authorization” a una ruta de recursos de API que no existe. Para obtener más información, consulta ¿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 “Authorization” a una ruta de recursos de API que no existe.
Utiliza incorrectamente nombres de DNS públicos para invocar una API privada“x-amzn-errortype” = “ForbiddenException”“Forbidden”Has utilizado nombres de DNS públicos de forma incorrecta para invocar una API privada desde una Amazon Virtual Private Cloud (Amazon VPC). Por ejemplo: faltan los encabezados “Host” o “x-apigw-api-id” en la solicitud. Para obtener más información, consulta Invocación de una API privada mediante nombres de host de DNS públicos específicos de punto de enlace.
Se usa el punto de enlace execute-api predeterminado para invocar una API de REST que tiene un nombre de dominio personalizado“x-amzn-errortype” = “ForbiddenException”“Forbidden”El usuario que llama usa el punto de enlace execute-api predeterminado para invocar una API de REST después de desactivar el punto de enlace predeterminado. Para obtener más información, consulta Deshabilitación del punto de enlace predeterminado para las API de REST.
Se usa un certificado de cliente que no es válido para invocar un nombre de dominio personalizado de API Gateway que requiere TLS mutua“x-amzn-errortype” = “ForbiddenException”“Forbidden”El almacén de confianza del nombre de dominio personalizado no emite el certificado de cliente que figura en la solicitud de la API o el certificado no es válido. Para obtener más información, consulta ¿Cómo soluciono los errores prohibidos de HTTP 403 de un nombre de dominio personalizado de API Gateway que requiere TLS mutua?
Se ha invocado un nombre de dominio personalizado sin una asignación de rutas base«x-amzn-errortype» = «ForbiddenException»“Forbidden”El usuario que llama invoca un dominio personalizado y no asigna una ruta base a una API. Para obtener más información, consulta Nombre de dominio personalizado para las API de REST en API Gateway.
Se ha invocado una API con el dominio personalizado activado cuando la URL del dominio incluye la etapa“x-amzn-errortype” = “MissingAuthenticationTokenException”“Missing Authentication Token”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 obtener más información, consulta Asignación de etapas de API a un nombre de dominio personalizado para las API de REST.
La etapa de la URL 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. Para obtener más información, consulta Invocación de las API de REST en API Gateway.

Resolución

Identificación de la causa del error

Si el error 403 proviene de otros recursos, como en los ejemplos siguientes, es posible que el error se deba a otra causa:

  • Si el error se notifica en un navegador web, es posible que la configuración del proxy sea incorrecta y no permita el acceso HTTP.
  • Si hay otro servicio de AWS delante de la API, como Amazon CloudFront, el servicio puede rechazar la solicitud.

Para identificar la causa del error, configura el registro de acceso de Amazon CloudWatch para la API. A continuación, consulta los eventos de registro 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, sigue estos pasos:

  1. Crea una nueva asignación de API para probar la invocación de la API de REST para el nombre de dominio personalizado.
  2. Para identificar la causa de los errores, consulta los eventos de registro de la API de REST en CloudWatch.
  3. Después de identificar y resolver el error, redirige la asignación de API a la API HTTP.

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

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

Utiliza la consola de API Gateway o la AWS CLI para verificar las siguientes configuraciones:

  • Has desplegado la API 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 puedes reproducir el error, usa el comando curl -v para obtener más detalles entre el cliente y la API:

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

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, verifica que se haya enviado el encabezado “x-api-key” en la solicitud. Si el encabezado de la solicitud no está incluido o no es correcto, actualízalo.

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

Nota: Las siguientes tareas se aplican a las API que invocas desde una Amazon VPC que solo tenga un punto de enlace de VPC de la interfaz.

Comprueba que la configuración de DNS del punto de enlace de la interfaz sea correcta en función del tipo de API que utilices.

Para invocar una API regional desde una Amazon VPC, desactiva los nombres de DNS privados en el punto de enlace de la interfaz. A continuación, un DNS público puede resolver el nombre de host del punto de enlace. Para obtener más información, consulta Creación de una API privada.

Para usar el nombre de DNS privado de la API para invocar una API privada desde una Amazon VPC, activa los nombres de DNS privados en el punto de enlace. Entonces, los recursos de subred local de Amazon VPC pueden resolver el nombre de host del punto de enlace de la interfaz.

Nota: Si utilizas alguna de las siguientes opciones para invocar la API privada, no tienes que configurar el nombre de DNS público de la API privada ni un alias de Amazon Route 53.

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

Revisa la política de recursos de la API para comprobar las siguientes configuraciones:

Revisión de los mensajes de solicitud y respuesta HTTP

Reproduce el error en un navegador web. Utiliza 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, guarda los mensajes en un archivo HTTP Archive (HAR).

Información relacionada

Common errors (Errores comunes)

¿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 puedo activar los registros de CloudWatch para solucionar problemas con mi API de REST o API de WebSocket de API Gateway?

Proyecto Curl en el sitio web de curl