Criar uma API privada no Amazon API Gateway - Amazon API Gateway

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criar uma API privada no Amazon API Gateway

Usando o Amazon API Gateway, é possível criar APIs REST privadas que só podem ser acessadas de sua virtual private cloud na Amazon VPC usando um VPC endpoint de interface. Essa é uma interface de rede de endpoint que você cria em sua VPC.

Usando políticas de recursos, você pode permitir ou negar acesso à sua API a partir de VPCs e VPC endpoints selecionados, inclusive entre contas. AWS Cada endpoint pode ser usado para acessar várias APIs privadas. Você também pode usar AWS Direct Connect para estabelecer uma conexão de uma rede local com a Amazon VPC e acessar sua API privada por meio dessa conexão.

Importante

Para restringir o acesso à API privada a VPCs ou endpoints da VPC específicos, adicione as condições aws:SourceVpc e aws:SourceVpce à política de recursos da API. Para obter exemplos de políticas do, consulte Exemplo: permitir tráfego da API privada com base na VPC ou no VPC endpoint de origem.

O tráfego para a API privada sempre usa conexões seguras e não deixa a rede da Amazon; ele é isolado da Internet pública.

É possível acessar suas APIs privadas por meio dos VPC endpoints de interface do API Gateway conforme mostrado no diagrama a seguir. Se o DNS privado está habilitado, você pode usar Nomes de DNS público ou privado para acessar as APIs. Se o DNS privado está desabilitado, você só pode usar Nomes de DNS públicos.

nota

As APIs privadas do API Gateway são compatíveis apenas com TLS 1.2. Versões anteriores do TLS não são compatíveis.


            Acessar a API privada com o DNS privado habilitado

De maneira detalhada, as etapas para a criação de uma API privada são:

  1. Primeiro, crie um VPC endpoint de interface para o serviço de componente do API Gateway a fim de executar a API. Esse serviço também é conhecido como execute-api na sua VPC.

  2. Crie e teste sua API privada.

    1. Use um dos procedimentos a seguir para criar a API:

    2. Para conceder acesso ao VPC endpoint, crie uma política de recursos e a anexe à API.

    3. Teste sua API.

nota

Os procedimentos a seguir pressupõem que você já tenha uma VPC totalmente configurada. Para obter mais informações e para começar a criar uma VPC, consulte Conceitos básicos do Amazon VPC no Guia do usuário da Amazon VPC.

Considerações sobre desenvolvimento da API privada

  • Você pode converter uma API pública existente (regional ou otimizada para bordas) em uma API privada, bem como converter uma API privada em uma API regional. Não é possível converter uma API privada para uma API otimizada para fronteiras. Para obter mais informações, consulte Alterar um tipo de endpoint de API pública ou privada no API Gateway.

  • Para conceder acesso às VPCs e aos VPC endpoints à sua API privada, é necessário criar uma política de recursos e anexá-la à API recém-criada (ou convertida). Até que esse procedimento seja realizado, todas as chamadas para a API falharão. Para obter mais informações, consulte Configurar uma política de recursos para uma API privada.

  • Os nomes de domínio personalizados não são compatíveis com APIs privadas.

  • Você pode usar um único VPC endpoint para acessar várias APIs privadas.

  • É possível associar ou desassociar um VPC endpoint de uma API REST, o que fornece um registro DNS de alias do Route 53 e simplifica a invocação da API privada. Para obter mais informações, consulte Associar ou desassociar um VPC endpoint de uma API REST privada.

nota

Os VPC endpoints para APIs privadas estão sujeitos às mesmas limitações dos outros VPC endpoints de interface. Para obter mais informações, consulte Limitações e propriedades do endpoint de interface no Guia do AWS PrivateLink . Para obter mais informações sobre como usar o API Gateway com VPCs e sub-redes compartilhadas, consulte Sub-redes compartilhadas no Guia do AWS PrivateLink .

Criar um VPC endpoint de interface do API Gateway execute-api

O serviço de componente do API Gateway para a execução dessa API é chamado de execute-api. Para acessar sua API privada após a implantação, crie um VPC endpoint de interface para ela na VPC.

Depois de criar o VPC endpoint, você poderá usá-lo para acessar várias APIs privadas.

Como criar um VPC endpoint de interface para API Gateway execute-api
  1. Faça login AWS Management Console e abra o console da Amazon VPC em https://console.aws.amazon.com/vpc/.

  2. No painel de navegação, escolha Endpoints, Create Endpoint (Criar endpoint).

  3. Em Service category (Categoria de serviços), certifique-se de que a opção serviços AWS esteja selecionada.

  4. Em Nome do serviço, escolha o endpoint do serviço API Gateway, incluindo a AWS região à qual você deseja se conectar. O formato é com.amazonaws.region.execute-api, por exemplo, com.amazonaws.us-east-1.execute-api.

    Para Type, verifique se indica Interface.

  5. Preencha as informações a seguir:

    • Para VPC, escolha a VPC na qual você deseja criar o endpoint.

    • Em Subnets (Sub-redes), selecione as sub-redes (zonas de disponibilidade) nas quais você deseja criar as interfaces de rede do endpoint. Para melhorar a disponibilidade da sua API, escolha várias sub-redes.

      nota

      Pode não haver suporte para todas as zonas de disponibilidade de todos os serviços da AWS .

    • Em Enable Private DNS Name (Habilitar nome DNS privado), deixe a caixa de seleção marcada. O DNS privado é habilitado por padrão.

      Quando o DNS privado está habilitado, você pode acessar a API por meio do DNS público ou privado. (Essa configuração não afeta quais usuários podem acessar a API, apenas os endereços DNS que eles podem usar.) No entanto, não é possível acessar APIs públicas de uma VPC usando um VPC endpoint do API Gateway com o DNS privado habilitado. Observe que essas configurações de DNS não afetam a capacidade de chamar essas APIs públicas da VPC se você estiver usando um nome de domínio personalizado otimizado para bordas para acessar a API pública. Usar um nome de domínio personalizado otimizado para fronteiras para acessar a API pública (ao usar DNS privado para acessar a API privada) é uma maneira de acessar as APIs públicas e privadas de uma VPC em que o endpoint foi criado com o DNS privado habilitado.

      nota

      Deixar o DNS privado habilitado é a opção recomendada. Se você optar por não habilitar o DNS privado, só poderá acessar a API por meio do DNS público. Para saber mais, consulte Como invocar uma API privada.

      Para usar a opção de DNS privado, os atributos enableDnsSupport e enableDnsHostnames da sua VPC deverão ser definidos como true. Para obter mais informações, consulte Suporte a DNS na sua VPC e a Atualizar o suporte a DNS da sua VPC no Guia do usuário da Amazon VPC.

    • Em Security group (Grupo de segurança), selecione os grupos de segurança a serem associados às interfaces de rede do VPC endpoint.

      O security group que você escolher deve ser definido para permitir o tráfego de entrada de HTTPS na porta TCP 443 a partir de um intervalo de IP na sua VPC ou de outro security group na sua VPC.

  6. Escolha Create endpoint (Criar endpoint).

Criar uma API privada usando o console do API Gateway

Como criar uma API privada usando o console do API Gateway
  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  2. Selecione Create API (Criar API).

  3. Em REST API, escolha Build (Criar).

  4. Em Nome, insira um nome.

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

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

  7. Selecione Create API (Criar API).

A partir de agora, você pode configurar métodos de API e suas integrações associadas conforme descrito nas etapas de 1 a 6 da sessão Criar uma API com integração personalizada HTTP.

nota

Até que sua API tenha uma política de recursos que conceda acesso à VPC ou ao VPC endpoint, todas as chamadas de API falharão. Antes de testar e implantar sua API, crie uma política de recursos e anexe-a à API, conforme descrito em Configurar uma política de recursos para uma API privada.

Crie uma API privada usando o AWS CLI

Para criar uma API privada usando o AWS CLI, chame o create-rest-api comando:

aws apigateway create-rest-api \ --name 'Simple PetStore (AWS CLI, Private)' \ --description 'Simple private PetStore API' \ --region us-west-2 \ --endpoint-configuration '{ "types": ["PRIVATE"] }'

Uma chamada bem-sucedida retorna uma saída semelhante ao seguinte:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Simple private PetStore API", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (AWS CLI, Private)" }

A partir de agora, você pode seguir as mesmas instruções fornecidas em Configurar uma API otimizada para bordas usando comandos da AWS CLI para configurar métodos e integrações para essa API.

Assim que você estiver pronto para testar sua API, crie uma política de recursos e a anexe à API conforme descrito em Configurar uma política de recursos para uma API privada.

Crie uma API privada usando o AWS SDK para JavaScript

Para criar uma API privada usando o AWS SDK para JavaScript:

apig.createRestApi({ name: "Simple PetStore (node.js SDK, private)", endpointConfiguration: { types: ['PRIVATE'] }, description: "Demo private API created using the AWS SDK for node.js", version: "0.00.001" }, function(err, data){ if (!err) { console.log('Create API succeeded:\n', data); restApiId = data.id; } else { console.log('Create API failed:\n', err); } });

Uma chamada bem-sucedida retorna uma saída semelhante ao seguinte:

{ "createdDate": "2017-10-13T18:41:39Z", "description": "Demo private API created using the AWS SDK for node.js", "endpointConfiguration": { "types": "PRIVATE" }, "id": "0qzs2sy7bh", "name": "Simple PetStore (node.js SDK, private)" }

Depois que concluir as etapas anteriores, você poderá seguir as mesmas instruções em Configurar uma API otimizada para bordas usando o AWS SDK para Node.js para configurar métodos e integrações para essa API.

Assim que você estiver pronto para testar sua API, crie uma política de recursos e a anexe à API conforme descrito em Configurar uma política de recursos para uma API privada.

Configurar uma política de recursos para uma API privada

Para que sua API privada possa ser acessada, é necessário criar uma política de recursos e associá-la à API. Isso concede acesso à API de suas VPCs e VPC endpoints ou de VPCs e VPC endpoints em AWS outras contas às quais você concede acesso explícito.

Para isso, siga as instruções em Criar e anexar uma política de recursos do API Gateway a uma API. Na etapa 5, escolha o exemplo de VPC de origem. Substitua {{vpceID}} (incluindo os colchetes) pelo ID do VPC endpoint e clique em Salvar para salvar sua política de recursos.

Considere também anexar uma política de endpoint ao VPC endpoint para especificar o acesso que está sendo concedido. Para obter mais informações, consulte Usar políticas de VPC endpoint para APIs privadas no API Gateway.

Implantar uma API privada usando o console do API Gateway

Para implantar sua API privada, siga estas instruções no console do API Gateway:

  1. Selecione a API.

  2. Escolha Deploy API (Implantar API).

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

  4. Em Nome do estágio, insira o nome de um estágio.

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

  6. Escolha Implantar.

Associar ou desassociar um VPC endpoint com uma API REST privada

Quando você associa um VPC endpoint à sua API privada, o API Gateway gera um registro DNS de ALIAS do Route 53. Você pode usar esse registro para invocar suas APIs privadas da mesma forma como o faz para suas APIs regionais ou otimizadas para bordas sem substituir um cabeçalho Host ou passar um cabeçalho x-apigw-api-id.

O URL base gerado está no seguinte formato:

https://{rest-api-id}-{vpce-id}.execute-api.{region}.amazonaws.com/{stage}

Associar ou desassociar um VPC endpoint a uma API REST privada exige que você atualize a configuração da API. Você pode realizar essa alteração usando o console do API Gateway, a AWS CLI ou um AWS SDK para o API Gateway. A operação de atualização pode levar alguns minutos para ser concluída devido à propagação do DNS. Durante esse período, sua API está disponível, mas a propagação de DNS para os URLs do DNS recém-gerados ainda poderá estar em andamento. É possível tentar criar uma nova implantação para sua API, se seus novos URLs não estiverem resolvendo no DNS mesmo depois de alguns minutos.

Usar o console do API Gateway para associar um endpoint da VPC a uma API REST privada

Como associar um endpoint da VPC adicional a uma API privada
  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  2. Selecione a API privada.

  3. No painel de navegação principal, escolha Política de recursos.

  4. Edite a política de recursos para permitir chamadas do endpoint da VPC adicional.

  5. No painel de navegação principal, selecione Configurações da API.

  6. Na seção Detalhes da API, escolha Editar.

  7. Em IDs de endpoint da VPC, selecione IDs de endpoint da VPC adicionais.

  8. Escolha Salvar.

  9. Implante a API novamente para que as alterações entrem em vigor.

Use a AWS CLI para associar um VPC endpoint a uma API REST privada

Para associar VPC endpoints no momento da criação da API, use o seguinte comando:

aws apigateway create-rest-api \ --name Petstore \ --endpoint-configuration '{ "types": ["PRIVATE"], "vpcEndpointIds" : ["vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee"] }' \ --region us-west-2

A saída será exibida da seguinte forma:

{ "apiKeySource": "HEADER", "endpointConfiguration": { "types": [ "PRIVATE" ], "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee" ] }, "id": "u67n3ov968", "createdDate": 1565718256, "name": "Petstore" }

Para associar VPC endpoints a uma API privada já criada, use o seguinte comando da CLI:

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='add',path='/endpointConfiguration/vpcEndpointIds',value='vpce-01d622316a7df47f9'" \ --region us-west-2

A saída será exibida da seguinte forma:

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-0393a628149c867ee", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }

Usar o console do API Gateway para dissociar um endpoint da VPC de uma API REST privada

Como dissociar um endpoint da VPC de uma API REST privada
  1. Inicie uma sessão no console do API Gateway em https://console.aws.amazon.com/apigateway.

  2. Selecione a API privada.

  3. No painel de navegação principal, escolha Política de recursos.

  4. Edite a política de recursos para remover as menções ao endpoint da VPC que você deseja dissociar da API privada.

  5. No painel de navegação principal, selecione Configurações da API.

  6. Na seção Detalhes da API, escolha Editar.

  7. Em IDs de endpoint da VPC, clique no X para dissociar o endpoint da VPC.

  8. Escolha Salvar.

  9. Implante a API novamente para que as alterações entrem em vigor.

Usar a CLI da AWS para dissociar um endpoint da VPC de uma API REST privada

Para desassociar um VPC endpoint de uma API privada, use o seguinte comando da CLI:

aws apigateway update-rest-api \ --rest-api-id u67n3ov968 \ --patch-operations "op='remove',path='/endpointConfiguration/vpcEndpointIds',value='vpce-0393a628149c867ee'" \ --region us-west-2

A saída será exibida da seguinte forma:

{ "name": "Petstore", "apiKeySource": "1565718256", "tags": {}, "createdDate": 1565718256, "endpointConfiguration": { "vpcEndpointIds": [ "vpce-0212a4ababd5b8c3e", "vpce-01d622316a7df47f9" ], "types": [ "PRIVATE" ] }, "id": "u67n3ov968" }