Tutorial: Criar uma API REST privada - Amazon API Gateway

Tutorial: Criar uma API REST privada

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 AWS 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 AWS Management Console 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.

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 Pré-requisitos para começar a usar o API Gateway.

Neste tutorial, você usará o AWS Management Console. Para obter um modelo do AWS CloudFormation que cria essa API e todos os recursos relacionados, consulte template.yaml.

Etapa 1: Criar dependências

Baixe e descompacte este modelo do AWS CloudFormation. 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 AWS CloudFormation
  1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

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

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

  4. Selecione o modelo que você baixou.

  5. Escolha Next (Próximo).

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

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

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

  9. Selecione Enviar.

AWS CloudFormationO provisiona as dependências da sua API, o que pode levar alguns minutos. Quando o status da sua pilha do AWS CloudFormation for CREATE_COMPLETE, 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

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.

  2. Escolha Criar APIe, em seguida, para API REST, escolha Criar.

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

  4. Em Tipo de endpoint de API, escolha Privado.

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

  6. Selecione Criar API.

Etapa 3: Crie um método e integração

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.

  2. Selecione a API.

  3. Selecione o recurso / e Criar método.

  4. Em Tipo de método, selecione GET.

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

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

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

  8. Escolha Criar método.

Etapa 4: Anexe uma política de recursos

Anexe uma política de recursos à 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 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.

  2. Selecione a API.

  3. Selecione Política de recursos e Criar política.

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

Etapa 5: Implante sua API

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.

  2. Selecione a API.

  3. Escolha Implantar API.

  4. Em Estágio, selecione Novo estágio.

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

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

  7. Escolha Deploy (Implantar).

Agora você está pronto para testar sua API.

Etapa 6: Verifique se sua API não está acessível publicamente

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.

  2. Selecione a API.

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

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

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

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

  2. Selecione Instances (Instâncias).

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

  4. Escolha Conectar e escolha Session Manager.

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

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

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

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

Para excluir uma API REST
  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

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

Para excluir uma pilha do AWS CloudFormation
  1. Abra o console do AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Selecione sua pilha do AWS CloudFormation.

  3. Escolha Excluir e, em seguida, confirme sua escolha.

Próximas etapas: Automatize com AWS CloudFormation

Você pode automatizar a criação e a limpeza de todos os recursos da AWS envolvidos neste tutorial. Para obter um modelo do AWS CloudFormation de exemplo completo, consulte template.yaml.