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 Amazon 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 VPC endpoint de interface do API Gateway execute-api.

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 VPC Endpoint é exibido. Copie o ID do endpoint da VPC do seu novo endpoint de interface, por exemplo: vpce-1a2b3c456d7e89012. Em seguida, escolha Fechar.

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

Recuperar o nome DNS público do endpoint de interface

Depois que você escolhe Fechar, a página Endpoints é aberta no console da Amazon VPC. Na guia Detalhes da página Endpoints, na coluna Nomes de DNS, copie o nome de DNS público do seu endpoint de interface, por exemplo: vpce-1a2b3c456d7e89012-f3ghijkl.execute-api.region.vpce.amazonaws.com.

Criar 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. Na página Criar, mantenha Escolha o protocolo definido como REST.
  5. Em Criar nova API, escolha Nova API.
  6. Em Configurações, insira as seguintes informações:
    Em Nome da API, insira um nome.
    (Opcional) Em Descrição, insira uma descrição.
    Mantenha Tipo de endpoint definido como Privado.
    Em IDs de endpoint da VPC, insira sua ID de endpoint de interface. Em seguida, escolha 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. Você pode usar o alias do Route53 para acessar sua API privada.
  7. Escolha Criar API.

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

Configurar uma política de recursos para a API REST privada que permita que o endpoint de 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 obter mais informações, consulte Configurar uma política de recursos para uma API privada.

Configurar 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, escolha Criar método.
  3. Na lista suspensa abaixo do nó / resource, escolha ANY e, em seguida, escolha 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 obter mais informações, consulte Configurar métodos da API REST no API Gateway.

Implantar 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 de estágio, encontre a mensagem: Se o DNS privado estiver ativado, use este URL:. Copie o URL de invocação da sua 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 usando o console do API Gateway.

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

  1. Na conta A, inicie uma instância do Amazon Elastic Compute Cloud (Amazon EC2) na mesma Amazon VPC do seu 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 Amazon 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 cobranças recorrentes.
  3. Na linha de comando da sua instância do Amazon EC2, use qualquer um dos seguintes comandos curl para chamar a API REST privada na conta B.
    Observação: para obter mais informações, consulte Invocar a API privada usando nomes de host DNS públicos específicos de endpoint. Para obter mais informações sobre curl, consulte o site do projeto curl.

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 obter mais informações, consulte Invocar a API privada usando os nomes de DNS privados.

Para um alias do Route 53 

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 região pela região da sua API. Substitua stage-name pelo nome do estágio em que sua API privada está implantada. Para obter mais informações, consulte Acessar sua API privada usando um alias do Route53.

Para um nome de 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 do 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 do 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.    Revise a saída do comando. O API Gateway retornará uma resposta 200 OK se a conexão for bem-sucedida.

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