Como uso um endpoint da VPC de interface para acessar uma API REST privada do API Gateway em outra conta?

8 minuto de leitura
0

Quero usar um endpoint da nuvem privada virtual (VPC) de interface para acessar uma API REST privada do Amazon API Gateway que está em outra conta da AWS.

Breve descrição

Para usar um endpoint da VPC de interface para acessar uma API REST privada do API Gateway que está em outra conta da AWS, realize as seguintes etapas:

  1. Crie um endpoint de interface em uma Amazon Virtual Private Cloud (Amazon VPC) em uma conta (conta A).
  2. Crie uma API REST privada do API Gateway em uma segunda conta (conta B).
  3. Configure uma política de recursos para a API REST privada que permita que o endpoint da interface invoque a API.
  4. Configure um método para a API REST privada.
  5. Implante a API REST privada.
  6. Chame a API REST privada da conta A para testar a configuração.

Observação: a API REST privada do API Gateway e o endpoint da VPC devem estar na mesma região da AWS.

Resolução

Criar um endpoint de interface em uma Amazon VPC em uma conta (conta A)

Criar um novo endpoint da VPC de interface

Na conta A, siga as instruções em Criar um endpoint da VPC para API Gateway na VPC.

Importante: em Política, escolha Acesso total. É uma prática recomendada usar uma política de endpoint da VPC para restringir o acesso ao endpoint por ID de API. Também é uma prática recomendada usar a política de recursos do API Gateway para restringir o acesso ao endpoint por entidade principal. Para obter mais informações, consulte Aplicar permissões de privilégio mínimo.

Ao criar o endpoint de interface, considere realizar as seguintes ações:

Recuperar o ID do endpoint da VPC de interface

Depois de criar o endpoint da interface, o ID do endpoint da VPC é exibido. Copie o ID do endpoint da VPC do seu novo endpoint de interface, por exemplo: vpce-1a2b3c456d7e89012.

Observação: use esse ID de endpoint da VPC ao criar e configurar sua API REST privada.

Recuperar o nome DNS público do endpoint de interface

A página Endpoints é exibida no console da Amazon VPC. Na guia Detalhes da página Endpoints, na coluna Nomes de DNS, copie o nome do DNS público do seu endpoint de interface. Por exemplo: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com.

Crie uma API REST privada do API Gateway em uma segunda conta (conta B)

  1. Na conta B, abra o console do API Gateway.
  2. Escolha Criar API.
  3. Em Escolha um tipo de API, em API REST privada, escolha Criar.
  4. Em Detalhes da API, insira as seguintes informações:
    Em Nome da API, insira um nome.
    (Opcional) Em Descrição, insira uma descrição.
    Defina Tipo de endpoint como Privado.
    Em IDs de endpoint da VPC, insira o ID de endpoint da interface. Em seguida, selecione Adicionar.
    Observação: quando você associa seu endpoint de interface à sua API REST privada, o API Gateway gera um novo registro de alias do Amazon Route 53. É possível usar o alias do Route53 para acessar sua API privada.
  5. Escolha Criar API.

Para obter mais informações, consulte Criar uma API privada.

Configure uma política de recursos para a API REST privada que permita que o endpoint da interface invoque a API

  1. No painel de navegação do console do API Gateway, em sua API, escolha Política de recursos.
  2. Na página Política de recursos, insira o seguinte exemplo de política de recursos na caixa de texto:
    {  "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Deny",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*",
          "Condition": {
            "StringNotEquals": {
              "aws:sourceVpce": "vpce-1a2b3c456d7e89012"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": "*",
          "Action": "execute-api:Invoke",
          "Resource": "execute-api:/*/*/*"
        }
      ]
    }
    Observação: substitua vpce-1a2b3c456d7e89012 pelo ID do endpoint de interface.

Para mais informações, consulte Configurar uma política de recursos para uma API privada.

Configure um método para a API REST privada

  1. No painel de navegação do console do API Gateway, em sua API, escolha Recursos.
  2. No painel Recursos, escolha Ações e, em seguida, Criar método.
  3. Na lista suspensa abaixo do nó / resource, escolha ANY e, em seguida, o ícone de marca de verificação.
  4. No painel / - ANY - Setup, em Tipo de integração, escolha Simulação.
    Observação: uma integração simulada responde a qualquer solicitação recebida.
  5. Escolha Salvar.

Para mais informações, consulte Métodos para APIs REST no API Gateway.

Implante a API REST privada

  1. No painel Recursos do console do API Gateway, escolha Ações e, em seguida, Implantar API.
  2. Na caixa de diálogo Implantar API, insira as seguintes informações:
    Em Estágio de implantação, escolha [New Stage].
    Em Nome do estágio, insira um nome. Por exemplo, dev ou test.
  3. Escolha Implantar.
  4. No painel Editor do estágio, localize a mensagem Se o DNS privado estiver ativado, use este URL:. Copie o URL de invocação da API REST privada.
    Observação: use o URL de invocação da API REST privada para testar a configuração.

Para obter mais informações, consulte Implantar uma API privada.

Chame a API REST privada da conta A para testar a configuração

  1. Na conta A, execute uma instância do Amazon Elastic Compute Cloud (Amazon EC2) na mesma VPC do endpoint de interface.
    Importante: escolha o grupo de segurança que você associou ao seu endpoint de interface.
  2. Conecte-se à instância do Amazon EC2.
    Observação: uma instância do EC2 pode incorrer em cobranças em sua conta da AWS. Se você criar uma instância para testar, encerre-a quando terminar para evitar outras cobranças.
  3. Na linha de comando da sua instância do EC2, use qualquer um dos seguintes comandos curl para chamar a API REST privada na conta B.
    Observação: para mais informações, consulte Invocar a API privada usando nomes de host DNS públicos específicos de endpoint.
    Para um nome de DNS privado
    Execute o seguinte comando:
    curl -i https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name
    
    Observação: substitua https://a1bc234d5e.execute-api.region.amazonaws.com/stage-name pelo URL de invocação da sua API privada. Esse comando funciona somente se você tiver ativado o DNS privado para seu endpoint de interface. Para mais informações, consulte Invocar a API privada usando os nomes DNS privados.
    Para um alias Route53
    Execute o seguinte comando:
    curl -i https://a1bc234d5e-vpce-1a2b3c456d7e89012.execute-api.region.amazonaws.com/stage-name
    
    Observação: substitua a1bc234d5e pelo ID da sua API, vpce-1a2b3c456d7e89012 pelo ID do endpoint da interface e region pela região da sua API. Substitua stage-name pelo nome do estágio em que sua API privada está implantada. Para mais informações, consulte Invocar uma API privada usando um alias Route53.
    Para um nome DNS público com um cabeçalho de host
    Execute o seguinte comando:
    curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "Host: a1bc234d5e.execute-api.region.amazonaws.com"
    
    Observação: substitua vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com pelo nome de DNS público do seu endpoint de interface e stage-name pelo nome do estágio em que você implantou sua API privada. Substitua a1bc234d5e.execute-api.region.amazonaws.com pelo URL de invocação da sua API privada.
    Para um nome DNS público com o cabeçalho x-apigw-api-id
    Execute o seguinte comando:
    curl -i https://vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com/stage-name -H "x-apigw-api-id:a1bc234d5e"
    
    Observação: substitua vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com pelo nome de DNS público do seu endpoint de interface e stage-name pelo nome do estágio em que você implantou sua API privada. Substitua a1bc234d5e pelo ID da sua API.
  4. Examine a saída do comando. Caso a conexão funcione corretamente, o API Gateway retornará uma resposta 200 OK.

Informações relacionadas

Como soluciono problemas ao me conectar a um endpoint de API privada do API Gateway?

Acessar um AWS service (Serviço da AWS) usando um endpoint da VPC de interface

Multi-Region private API gateway