Tutorial: Creación de una API de REST privada - Amazon API Gateway

Tutorial: Creación de una API de REST privada

En este tutorial, creará una API REST privada. Los clientes solo pueden acceder a la API desde su Amazon VPC La API está aislada de la Internet pública, que es un requisito de seguridad común.

Este tutorial tarda aproximadamente 30 minutos en completarse. En primer lugar, utilice una plantilla de AWS CloudFormation para crear una nube de Amazon VPC, un punto de enlace de la VPC, una función de AWS Lambda y lanzar una instancia de Amazon EC2 que utilizará para probar la API. A continuación, utilice la AWS Management Console para crear una API privada y adjuntar una política de recursos que permita el acceso solo desde el punto de enlace de la VPC. Por último, se prueba la API.

Información general de la API privada creada en este tutorial.

Para completar este tutorial, necesita una cuenta de AWS y un usuario de AWS Identity and Access Management con acceso a la consola. Para obtener más información, consulte Configuración para usar API Gateway.

En este tutorial, se utiliza la AWS Management Console. Para obtener una plantilla de AWS CloudFormation que cree esta API y todos los recursos relacionados, consulte template.yaml.

Paso 1: crear dependencias

Descargue y descomprima esta plantilla de AWS CloudFormation. Utilice la plantilla para crear todas las dependencias de su API privada, incluidas una VPC de Amazon, un punto de enlace de la VPC y una función Lambda que sirve como backend de la API. Creará la API privada más tarde.

Para crear una pila de AWS CloudFormation
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione Create stack (Crear pila) y, a continuación, seleccione With new resources (standard) (Con nuevos recursos [estándar]).

  3. En Specify template (Especificar plantilla), elija Upload a template file (Cargar un archivo de plantilla).

  4. Seleccione la plantilla que ha descargado.

  5. Elija Next (Siguiente).

  6. En Stack name (Nombre de pila), escriba private-api-tutorial y, a continuación, elija Next (Siguiente).

  7. En Configure stack options (Configurar opciones de pila), elija Next (Siguiente).

  8. Para Capabilities (Capacidades), sepa que AWS CloudFormation puede crear recursos de IAM en su cuenta.

  9. Seleccione Submit (Enviar).

AWS CloudFormation aprovisiona las dependencias para su API. Puede tardar unos minutos. Cuando el estado de la pila de AWS CloudFormation sea CREATE_COMPLETE, elija Outputs (Salidas). Anote el ID del punto de enlace de la VPC. Los va a necesitar en pasos más adelante de este tutorial.

Paso 2: crear una API privada

Cree una API privada para permitir que solo los clientes de su VPC accedan a ella.

Creación de una API privada
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Seleccione Create API (Crear API)y, a continuación, para API REST, seleccione Build (Construir).

  3. En API name (Nombre de la API), escribaprivate-api-tutorial.

  4. En Tipo de punto de conexión de la API, seleccione Privado.

  5. Para ID del punto de conexión de la VPC, introduzca el ID de punto de conexión de la VPC en las Salidas de la pila de AWS CloudFormation.

  6. Seleccione Crear API.

Paso 3: crear un método e integración

Usted crea un método y la integración de Lambda GET para manejar solicitudes de GET a su API. Cuando un cliente invoca su API, API Gateway envía la solicitud a la función Lambda que creó en el paso 1 y, a continuación, devuelve una respuesta al cliente.

Para crear un método e integración
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija la API.

  3. Elija Crear método.

  4. En Tipo de método, seleccione GET.

  5. En Tipo de integración, seleccione Función de Lambda.

  6. Active Integración de proxy de Lambda. Con una integración de proxy de Lambda, API Gateway envía un evento a Lambda con una estructura definida y transforma la respuesta de su función Lambda a una respuesta HTTP.

  7. En la Lambda function (Función de Lambda), elija la función que creó con la plantilla de AWS CloudFormation en el paso 1. El nombre de la función comienza con private-api-tutorial.

  8. Elija Crear método.

Paso 4: adjuntar una política de recursos

Adjuntar una política de recursos a la API que permite a los clientes invocar la API sólo a través del punto de enlace de la VPC. Para restringir aún más el acceso a la API, también puede configurar una política de punto de enlace de la VPC para el punto de enlace de su VPC, pero esto no es necesario para este tutorial.

Para adjuntar una política de recursos
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija la API.

  3. Elija Política de recursos y, a continuación, elija Crear política.

  4. Escriba la siguiente política. Reemplace vpceID por su ID de punto de enlace de la VPC desde las Outputs (Salidas) de su pila de AWS CloudFormation.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpceID" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*" } ] }
  5. Elija Guardar cambios.

Paso 5: implemente su API

A continuación, implemente su API para ponerla a disposición de los clientes de su Amazon VPC

Para implementar una API
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija la API.

  3. Elija Deploy API (Implementar API).

  4. En Etapa, seleccione Nueva etapa.

  5. En Stage name (Nombre de etapa), escriba test.

  6. (Opcional) En Description (Descripción), introduzca una descripción.

  7. Elija Deploy (Implementar).

Ya está listo para probar su API.

Paso 6: compruebe que su API no sea accesible públicamente

Use curl para verificar que no puede invocar la API desde fuera de su Amazon VPC

Para probar la API
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. Elija la API.

  3. En el panel de navegación principal, elija Etapas y, a continuación, elija la etapa test.

  4. En Detalles de la etapa, elija el icono de copia para copiar la URL de invocación de la API. La URL se ve así https://abcdef123.execute-api.us-west-2.amazonaws.com/test. El punto de enlace de la VPC que creó en el paso 1 tiene el DNS privado habilitado, por lo que puede utilizar la URL proporcionada para invocar la API.

  5. Utilice curl para intentar invocar la API desde fuera de su VPC.

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    Curl indica que el punto de enlace de su API no se puede resolver. Si obtiene una respuesta diferente, vuelva al paso 2 y asegúrese de elegir Private (Privado) para el tipo de punto de enlace de su API.

    curl: (6) Could not resolve host: abcdef123.execute-api.us-west-2.amazonaws.com/test

A continuación, se conecta a una instancia de Amazon EC2 en la VPC para invocar su API.

Paso 7: conéctese a una instancia de su VPC e invoque su API

A continuación, pruebe la API desde su Amazon VPC Para acceder a su API privada, se conecta a una instancia de Amazon EC2 en su VPC y, a continuación, utilice curl para invocar su API. Utilice el Administrador de sesiones de Systems Manager para conectarse a la instancia en el navegador.

Para probar la API
  1. Abra la consola de Amazon EC2 en https://console.aws.amazon.com/ec2/.

  2. Elija Instances.

  3. Elija la instancia denominada private-api-tutorial que creó con la plantilla de AWS CloudFormation en el paso 1.

  4. Elija Connect (Conectar) y, a continuación, elija Session Manager (Administrador de sesiones).

  5. Elija Connect (Conectar) para iniciar una sesión basada en explorador en la instancia.

  6. En su sesión de Session Manager, use curl para invocar su API. Puede invocar la API porque está utilizando una instancia en su Amazon VPC

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    Verifique que obtiene la respuesta Hello from Lambda!.

Utilice el Session Manager para invocar la API desde su VPC de Amazon VPC.

Ha creado correctamente una API a la que solo se puede acceder desde su VPC de Amazon y, a continuación, verificó que funciona.

Paso 8: Eliminar

Para evitar costos innecesarios, elimine los recursos creados como parte de este tutorial Los siguientes pasos eliminan su API REST y su pila de AWS CloudFormation.

Para eliminar una API REST
  1. Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway.

  2. En la página API, seleccione una API. Elija Acciones de API, elija Eliminar API y confirme su elección.

Para eliminar una pila de AWS CloudFormation
  1. Abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione su pila de AWS CloudFormation.

  3. Elija Delete (Eliminar) y, a continuación, confirme su elección.

Próximos pasos: automatice con AWS CloudFormation

Puede automatizar la creación y la limpieza de todos los recursos de AWS involucrados en este tutorial. Para obtener una plantilla de AWS CloudFormation de ejemplo completa, consulte template.yaml.