

# Tutorial: Creación de una API de REST privada
<a name="private-api-tutorial"></a>

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 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 Consola de administración de AWS 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.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/private-api-tutorial-diagram.png)


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](setting-up.md).

En este tutorial, se utiliza la Consola de administración de AWS. Para obtener una plantilla de CloudFormation que cree esta API y todos los recursos relacionados, consulte [template.yaml](samples/private-api-full-template.zip).

**Topics**
+ [Paso 1: crear dependencias](#private-api-tutorial-create-dependencies)
+ [Paso 2: crear una API privada](#private-api-tutorial-create-api)
+ [Paso 3: crear un método e integración](#private-api-tutorial-create-method)
+ [Paso 4: adjuntar una política de recursos](#private-api-tutorial-attach-resource-policy)
+ [Paso 5: implemente su API](#private-api-tutorial-deploy-api)
+ [Paso 6: compruebe que su API no sea accesible públicamente](#private-api-tutorial-test-private-api)
+ [Paso 7: conéctese a una instancia de su VPC e invoque su API](#private-api-tutorial-connect-to-instance)
+ [Paso 8: Eliminar](#private-api-tutorial-cleanup)
+ [Próximos pasos: automatice con CloudFormation](#private-api-tutorial-next-steps)

## Paso 1: crear dependencias
<a name="private-api-tutorial-create-dependencies"></a>

Descargue y descomprima [esta plantilla de CloudFormation](samples/private-api-starter-template.zip). 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 CloudFormation**

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

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

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

1. Seleccione la plantilla que ha descargado.

1. Elija **Next (Siguiente)**. 

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

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

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

1. Elija **Siguiente** y, a continuación, elija **Enviar**.

CloudFormation aprovisiona las dependencias para su API. Puede tardar unos minutos. Cuando el estado de la pila de CloudFormation sea **CREATE\$1COMPLETE**, 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
<a name="private-api-tutorial-create-api"></a>

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](https://console.aws.amazon.com/apigateway).

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

1. En **API name (Nombre de la API)**, escriba**private-api-tutorial**.

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

1. 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 CloudFormation.

1. Para **Tipo de dirección IP**, elija **Dualstack**.

1. Seleccione **Crear API**.

## Paso 3: crear un método e integración
<a name="private-api-tutorial-create-method"></a>

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](https://console.aws.amazon.com/apigateway).

1. Elija la API.

1. Elija **Crear método**.

1. En **Tipo de método**, seleccione `GET`.

1. En **Tipo de integración**, seleccione **Función de Lambda**.

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

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

1. Elija **Crear método**.

## Paso 4: adjuntar una política de recursos
<a name="private-api-tutorial-attach-resource-policy"></a>

Adjuntar una [política de recursos](apigateway-resource-policies.md) 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](apigateway-vpc-endpoint-policies.md) 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](https://console.aws.amazon.com/apigateway).

1. Elija la API.

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

1. 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 CloudFormation.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": "execute-api:/*",
               "Condition": {
                   "StringNotEquals": {
                       "aws:sourceVpce": "vpce-abcd1234"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Principal": "*",
               "Action": "execute-api:Invoke",
               "Resource": "execute-api:/*"
           }
       ]
   }
   ```

------

1. Seleccione **Save changes (Guardar cambios)**.

## Paso 5: implemente su API
<a name="private-api-tutorial-deploy-api"></a>

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](https://console.aws.amazon.com/apigateway).

1. Elija la API.

1. Elija **Implementar API**.

1. En **Etapa**, seleccione **Nueva etapa**.

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

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

1. Elija **Deploy (Implementar)**.

Ya está listo para probar su API.

## Paso 6: compruebe que su API no sea accesible públicamente
<a name="private-api-tutorial-test-private-api"></a>

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](https://console.aws.amazon.com/apigateway).

1. Elija la API.

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

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

1. 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 name="private-api-tutorial-connect-to-instance"></a>

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/](https://console.aws.amazon.com/ec2/).

1. Elija **Instances**.

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

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

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

1. 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.\]](http://docs.aws.amazon.com/es_es/apigateway/latest/developerguide/images/private-api-tutorial-invoke.png)


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
<a name="private-api-tutorial-cleanup"></a>

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

**Para eliminar una API REST**

1. Inicie sesión en la consola de API Gateway en [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. 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 CloudFormation**

1. Abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Seleccione su pila de CloudFormation.

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

## Próximos pasos: automatice con CloudFormation
<a name="private-api-tutorial-next-steps"></a>

Puede automatizar la creación y la limpieza de todos los recursos de AWS involucrados en este tutorial. Para obtener una plantilla de CloudFormation de ejemplo completa, consulte [template.yaml](samples/private-api-full-template.zip).