Saltar al contenido

¿Por qué aparece un error HTTP «403 Forbidden» al conectarme a mis API públicas de API Gateway desde una VPC?

5 minutos de lectura
1

Aparece el error HTTP «403 Forbidden» cuando llamo a mi API pública de Amazon API Gateway desde la instancia de Amazon Virtual Private Cloud (Amazon VPC).

Descripción corta

Dado que los puntos de enlace de la interfaz de Amazon VPC dirigen el tráfico solo a las API privadas, es posible que aparezca el error HTTP «403 Forbidden» al intentar acceder a las API públicas de API Gateway.

El error HTTP «403 Forbidden» se produce cuando intentas acceder a una API pública de API Gateway desde una VPC que tiene activados los nombres de DNS privados. Si activas los nombres DNS privados, todas las solicitudes de Amazon VPC a las API de API Gateway se resolverán en el punto de enlace de VPC de la interfaz.

Sin embargo, no puedes usar un punto de enlace de VPC de interfaz para conectarte a las API públicas, porque el nombre de DNS privado del punto de enlace tiene el formato***.execute-api.{region}.amazonaws.com**. El carácter***** es un marcador de posición para el ID de API. Este formato coincide con la URL de invocación predeterminada de API Gateway para las API públicas y privadas.

Al activar los nombres DNS privados, las llamadas a las URL de las API de API Gateway que tienen el formato***.execute-api.{region}.amazonaws.com** se corresponden con las direcciones IP privadas del punto de enlace de VPC de la interfaz. Esta configuración dirige todo el tráfico a API Gateway a través del punto de enlace de VPC de la interfaz para las API públicas y privadas.

También aparece el error «403 Forbidden» cuando utilizas AWS Direct Connect para invocar la URL ejecute-api predeterminada para conectarte a las API privadas desde una red local.

Resolución

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

Comprobación para saber si Amazon VPC usa una configuración de DNS privada

Para resolver el error HTTP «403 Forbidden», primero debes determinar si Amazon VPC utiliza una configuración de DNS pública o privada. Puede AWS CLI o la consola de Amazon VPC.

AWS CLI

Ejecuta el siguiente comando describe-vpc-endpoints:

export VPC_ID=YOUR_VPC_ID  
export REGION=YOUR_REGION  
aws ec2 describe-vpc-endpoints \  
  --filters "Name=vpc-id,Values=${VPC_ID}" \  
            "Name=service-name,Values=com.amazonaws.${REGION}.execute-api" \  
  --query 'Amazon VPC endpointndpoints[].{Name:Tags[?Key==`Name`].Value|[0],Amazon VPC endpointndpointId:Amazon VPC endpointndpointId,PrivateDnsEnabled:PrivateDnsEnabled}' \  
  --output table

Nota: Sustituye YOUR_VPC_ID por tu ID de VPC y YOUR_REGION por tu región de AWS.

Consola de Amazon VPC

Comprueba si has activado el nombre DNS privado en la configuración de punto de enlace de VPC de la interfaz. Además, comprueba si hay un punto de enlace de VPC de la interfaz para acceder a una API de REST privada en tu VPC. Si hay un punto de enlace de VPC de la interfaz, comprueba si has activado los atributos de DNS

Conexión a API públicas con los nombres de DNS privados activados

Si has activado el DNS privado, configura nombres de dominio personalizados optimizados para entornos periféricos o nombres de dominio personalizados regionales para conectarte a tus API públicas. A continuación, puedes invocar la API pública de API Gateway con el nombre de dominio personalizado, como api.example.com. La conectividad con tus API de REST privadas seguirá funcionando a través del punto de enlace de la API de REST privada.

Si los clientes se conectan desde una red local, configura un punto de enlace entrante de Amazon Route 53 Resolver. Para usar la URL de invocación execute-api, reenvía todas las consultas DNS privadas de tu red local al punto de enlace de entrada.

Nota: Los recursos de VPC deben tener conectividad a Internet para conectarse a las API públicas.

Conexión a API públicas con los nombres de DNS privados desactivados

Para permitir el tráfico saliente a tus API públicas, usa grupos de seguridad para tu VPC. Además, puedes modificar la política de recursos adjunta a tu API para permitir el acceso desde la VPC.

Si tu VPC tiene permiso para acceder a tus API de REST públicas, usa el comando execute-api predeterminado para conectarte a tus API de REST públicas. También puedes usar el nombre de dominio personalizado para conectarte a tu API de REST pública. Para más información, consulta Control y administración del acceso a las API de REST en API Gateway.

Si desactivas los nombres DNS privados del punto de enlace de VPC de la interfaz, la URL de invocación ejecute-api predeterminada dejará de conectarse a las API de REST privadas.

Para invocar a las API de REST privadas, realiza una de las siguientes acciones:

  • Usa los encabezados de host con tu punto de enlace de Amazon VPC como DNS, como se indica en el siguiente ejemplo:

    curl -H "Host: {your-api-id}.execute-api.{region}.amazonaws.com" \  
         https://Amazon VPC endpoint-xxxxx-xxxxx.execute-api.{region}.Amazon VPC endpoint.amazonaws.com/stage/path
  • Crea una zona alojada privada para execute-api.{region}.amazonaws.com. En la zona alojada privada, agrega un registro A para tu identificador de API. Dirige el registro A a las direcciones IP del punto de enlace de VPC de la interfaz para poder usar la URL de invocación execute-api predeterminada de la API de REST privada.

Cambio de los atributos de DNS privados para un punto de enlace de VPC de la interfaz

Puedes cambiar los atributos DNS privados de un punto de enlace de la interfaz. Recuerda que los cambios afectarán a la forma en que la URL de una etapa de API se resuelve en la dirección IP privada del punto de enlace de VPC de la interfaz. Además, los cambios afectarán a la forma en que puedes conectarte a las API privadas y públicas desde una VPC. Para más información, consulta Atributos DNS para la VPC.

Información relacionada

Acceso a un servicio de AWS mediante un punto de enlace de VPC de interfaz