

# Tutorial: Crie uma API REST privada
<a name="private-api-tutorial"></a>

Neste tutorial, você cria uma API REST privada. Os clientes podem acessar a API somente de dentro de sua Amazon VPC. A API é isolada da internet pública, que é um requisito de segurança comum.

Este tutorial leva aproximadamente 30 minutos para ser concluído. Primeiro, você usa um modelo do CloudFormation para criar uma Amazon VPC, um endpoint da VPC, uma função do AWS Lambda e executar uma instância do Amazon EC2 que você usará para testar sua API. Em seguida, use o Console de gerenciamento da AWS para criar uma API privada e anexar uma política de recursos que permita o acesso somente a partir do endpoint da VPC. Por fim, você testa a sua API. 

![\[Visão geral da API privada que você cria neste tutorial.\]](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/private-api-tutorial-diagram.png)


Para concluir esse tutorial, você precisa de uma conta da AWS e de um usuário do AWS Identity and Access Management com acesso ao console. Para obter mais informações, consulte [Configurar para usar o API Gateway](setting-up.md).

Neste tutorial, você usará o Console de gerenciamento da AWS. Para obter um modelo do CloudFormation que cria essa API e todos os recursos relacionados, consulte [template.yaml](samples/private-api-full-template.zip).

**Topics**
+ [Etapa 1: Criar dependências](#private-api-tutorial-create-dependencies)
+ [Etapa 2: Crie uma API privada](#private-api-tutorial-create-api)
+ [Etapa 3: Crie um método e integração](#private-api-tutorial-create-method)
+ [Etapa 4: Anexe uma política de recursos](#private-api-tutorial-attach-resource-policy)
+ [Etapa 5: Implante sua API](#private-api-tutorial-deploy-api)
+ [Etapa 6: Verifique se sua API não está acessível publicamente](#private-api-tutorial-test-private-api)
+ [Etapa 7: Conecte-se a uma instância em sua VPC e invoque sua API](#private-api-tutorial-connect-to-instance)
+ [Etapa 8: Limpar](#private-api-tutorial-cleanup)
+ [Próximas etapas: Automatize com CloudFormation](#private-api-tutorial-next-steps)

## Etapa 1: Criar dependências
<a name="private-api-tutorial-create-dependencies"></a>

Baixe e descompacte [este modelo do CloudFormation](samples/private-api-starter-template.zip). Você usa o modelo para criar todas as dependências para sua API privada, incluindo uma Amazon VPC, um endpoint da VPC e uma função do Lambda que serve como backend de sua API. Você cria a API privada mais tarde.

**Como criar uma pilha do CloudFormation**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Selecione **Create stack (Criar pilha)** e **With new resources (standard) (Com novos recursos (padrão))**.

1. Em **Specify template (Especificar modelo)**, escolha **Upload a template file (Fazer upload de um arquivo de modelo)**.

1. Selecione o modelo que você baixou.

1. Escolha **Next (Próximo)**. 

1. Em **Nome da pilha**, insira **private-api-tutorial** e escolha **Avançar**.

1. Para **Configurar opções de pilha**, escolha **Avançar**.

1. Para **Capabilities** (Recursos), reconheça que CloudFormation pode criar recursos do IAM em sua conta.

1. Escolha **Próximo** e, depois, **Enviar**.

CloudFormationO provisiona as dependências da sua API, o que pode levar alguns minutos. Quando o status da sua pilha do CloudFormation for **CREATE\$1COMPLETE**, escolha **Outputs** (Saídas). Observe o ID de endpoint da VPC. Você precisa dele para as etapas posteriores neste tutorial. 

## Etapa 2: Crie uma API privada
<a name="private-api-tutorial-create-api"></a>

Crie uma API privada para permitir que somente clientes dentro de sua VPC a acessem.

**Para criar uma API privada**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Escolha **Criar API**e, em seguida, para **API REST**, escolha **Criar**.

1. Em **API name (Nome da API)**, insira **private-api-tutorial**.

1. Em **Tipo de endpoint de API**, escolha **Privado**.

1. Em **IDs de endpoint da VPC**, insira o ID de endpoint da VPC em **Saídas** da pilha do CloudFormation.

1. Em **Tipo de endereço IP**, escolha **Dualstack**.

1. Selecione **Criar API**.

## Etapa 3: Crie um método e integração
<a name="private-api-tutorial-create-method"></a>

Crie um método `GET` e uma integração do Lambda para lidar com solicitações `GET` para sua API. Quando um cliente invoca sua API, o API Gateway envia a solicitação para a função do Lambda criada na Etapa 1 e, em seguida, retorna uma resposta ao cliente.

**Para criar um método e integração**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione a API.

1. Escolha **Criar método**.

1. Em **Tipo de método**, selecione `GET`.

1. Em **Tipo de integração**, selecione **Função do Lambda**.

1. Ative **Integração de proxy do Lambda**. Com uma integração de proxy do Lambda, o API Gateway envia um evento para o Lambda com uma estrutura definida e transforma a resposta da função do Lambda em uma resposta HTTP.

1. Para **Lambda function** (Função do Lambda), escolha a função que criou com o modelo do CloudFormation na Etapa 1. O nome da função começa com **private-api-tutorial**.

1. Escolha **Criar método**.

## Etapa 4: Anexe uma política de recursos
<a name="private-api-tutorial-attach-resource-policy"></a>

Anexe uma [política de recursos](apigateway-resource-policies.md) à sua API, que permite que os clientes invoquem sua API somente por meio do endpoint da VPC. Para restringir ainda mais o acesso à sua API, você também pode configurar uma [ política de endpoint da VPC](apigateway-vpc-endpoint-policies.md) para o endpoint da VPC, mas isso não é necessário para este tutorial.

**Para anexar uma política de recursos**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione a API.

1. Selecione **Política de recursos** e **Criar política**.

1. Insira a seguinte política. Substitua o *vpceID* pelo seu ID de endpoint da VPC em **Outputs** (Saídas) da sua pilha do 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. Escolha **Salvar alterações**.

## Etapa 5: Implante sua API
<a name="private-api-tutorial-deploy-api"></a>

Em seguida, implante sua API para torná-la disponível para clientes em sua Amazon VPC.

**Para implantar uma API**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione a API.

1. Escolha **Implantar API**.

1. Em **Estágio**, selecione **Novo estágio**.

1. Em **Stage name (Nome do estágio)**, insira **test**.

1. (Opcional) Em **Description (Descrição)**, insira uma descrição.

1. Escolha **Deploy** (Implantar).

Agora você está pronto para testar sua API.

## Etapa 6: Verifique se sua API não está acessível publicamente
<a name="private-api-tutorial-test-private-api"></a>

Use `curl` para verificar se você não pode invocar sua API fora da Amazon VPC.

**Para testar sua API**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Selecione a API.

1. No painel de navegação principal, selecione **Estágios** e escolha o estágio **testar**.

1. Em **Detalhes do estágio**, escolha o ícone de cópia para copiar o URL de invocação da API. O URL se parece com `https://abcdef123.execute-api.us-west-2.amazonaws.com/test`. O endpoint da VPC que foi criado na Etapa 1 tem o DNS privado ativado, portanto, você pode usar o URL fornecido para chamar sua API.

1. Use curl para tentar invocar sua API fora da VPC.

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

   O curl indica que o endpoint da sua API não pode ser resolvido. Se você receber uma resposta diferente, volte para a Etapa 2 e certifique-se de escolher **Privado** para o tipo de endpoint da API.

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

Em seguida, conecte-se a uma instância do Amazon EC2 em sua VPC para chamar sua API.

## Etapa 7: Conecte-se a uma instância em sua VPC e invoque sua API
<a name="private-api-tutorial-connect-to-instance"></a>

Em seguida, teste sua API de dentro da Amazon VPC. Para acessar sua API privada, conexte-se a uma instância do Amazon EC2 em sua VPC e, em seguida, use curl para chamar sua API. Use o Gerenciador de sessões do Systems Manager para se conectar à instância no navegador.

**Para testar sua API**

1. Abra o console do Amazon EC2 em [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

1. Selecione **Instances (Instâncias)**.

1. Escolha a instância chamada **private-api-tutorial** que você criou com o modelo do CloudFormation na Etapa 1.

1. Escolha **Conectar** e escolha **Session Manager**.

1. Escolha **Conectar** para executar uma sessão baseada em navegador na instância.

1. Na sessão do Session Manager, use curl para invocar sua API. Invoque sua API porque está usando uma instância na sua Amazon VPC.

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

   Verifique se você obtém a resposta `Hello from Lambda!`.

![\[Você usa o Session Manager para invocar sua API de dentro da Amazon VPC.\]](http://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/images/private-api-tutorial-invoke.png)


Você criou com sucesso uma API que é acessível apenas a partir de sua Amazon VPC e, em seguida, verificou se ela funciona.

## Etapa 8: Limpar
<a name="private-api-tutorial-cleanup"></a>

Para evitar custos desnecessários, exclua os recursos que você criou como parte desse tutorial. As etapas a seguir excluem sua API REST e sua pilha do CloudFormation.

**Para excluir uma API REST**

1. Inicie uma sessão no console do API Gateway em [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway).

1. Na página **APIs** , selecione uma API. Selecione **Ações da API**, **Excluir API** e, depois, confirme a escolha.

**Para excluir uma pilha do CloudFormation**

1. Abra o console do CloudFormation em [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. Selecione sua pilha do CloudFormation.

1. Escolha **Excluir** e, em seguida, confirme sua escolha.

## Próximas etapas: Automatize com CloudFormation
<a name="private-api-tutorial-next-steps"></a>

Você pode automatizar a criação e a limpeza de todos os recursos da AWS envolvidos neste tutorial. Para obter um modelo do CloudFormation de exemplo completo, consulte [template.yaml](samples/private-api-full-template.zip).