Como invocar uma API privada do API Gateway usando um Application Load Balancer ou um Network Load Balancer?

Data da última atualização: 03/11/2022

Quero configurar minha API privada do API Gateway como um destino por detrás de um balanceador de carga. Em seguida, quero acessar minha API privada a partir de uma aplicação ou um Network Load Balancer usando minha conta ou outra conta da AWS. Como configuro isso?

Breve descrição

Para acessar sua API privada usando o AWS Direct Connect ou o Amazon Route 53, consulte Como invocar uma API privada. Você também pode acessar uma API REST privada do API Gateway em outra conta da AWS utilizando um endpoint da VPC de interface.

Na configuração a seguir, a API privada é adicionada como destino ao balanceador de carga. Isso é feito usando o endereço IP da interface de rede elástica do endpoint da Amazon Virtual Private Cloud (Amazon VPC).

Importante: nomes de domínio personalizados não são compatíveis com APIs privadas. Como solução alternativa, você pode invocar e anexar o domínio a um balanceador de carga. Em seguida, invoque a API privada usando a configuração descrita neste artigo.

Resolução

Crie um endpoint da Amazon VPC

1.    Abra o console da Amazon VPC, escolha Endpoints e, em seguida, Create endpoint (Criar endpoint).
Observação: se você já tiver algum endpoint da Amazon VPC configurado na sua VPC usando a API execute-api, certifique-se de que o DNS privado esteja desabilitado.

2.    Para Services (Serviços), escolha com.amazonaws.com.your-region.execute-api.

3.    Para VPC, escolha sua Amazon VPC.

4.    Para Subnets (Sub-redes), escolha duas sub-redes em diferentes zonas de disponibilidade (IDs de AZ) e, em seguida, escolha Create endpoint (Criar endpoint).

5.    Escolha seu endpoint, escolha sub-redes e copie o endereço IP. Você usará esse endereço IP em outra etapa.

Para obter mais informações, consulte Criar um endpoint de VPC de interface para a execute-api do API Gateway .

Criar uma API REST privada e conceder permissão ao endpoint da Amazon VPC

1.    Abra o console do API Gateway e escolha Create API (Criar API).

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

3.    Em Settings (Configurações), digite o seguinte:
Para API name (Nome da API), insira um nome para a API.
Para Endpoint Type (Tipo de endpoint), escolha Private (Privado).
Para IDs de endpoint, insira e o ID do endpoint que você criou anteriormente.

4.    Escolha Create API (Criar API).

5.    No painel de navegação, escolha Resource Policy (Política de recursos).

6.    No editor de política de recursos, cole a seguinte política:
Observação:
substitua vpce-<id> pelo ID do seu endpoint de VPC.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account :<api-id>/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<region>:<account-id>:<api-id>/*/*/*"
    }
  ]
}

7.    Escolha Save (Salvar).

Para obter mais informações, consulte Criar uma API privada usando o console do API Gateway.

Criar ou importar um certificado público do AWS Certificate Manager

Se você ainda não tiver feito isso, faça o seguinte:

Solicite um certificado público.

-ou-

Importe um certificado

Criar um Application Load Balancer ou um Network Load Balancer

Se você ainda não tiver feito isso, faça o seguinte:

Criar um Application Load Balancer

-ou-

Criar um Network Load Balancer

Criar o grupo de destino

1.    Abra o console do Amazon Elastic Compute Cloud (Amazon EC2).

2.    No painel de navegação, em Load Balancing (Balanceamento de carga), escolha Load Balancers (Balanceadores de carga), Target Groups (Grupos de destino) e depois Create target group (Criar grupo de destino).

3.    Para target type (tipo de destino), escolha IP addresses (endereços IP).

4. Para Target group name (Nome do grupo de destino), insira um nome.

Application Load Balancer

Para Protocol (Protocolo), escolha HTTPS.
Para Port (Porta), escolha 443.
Para VPC, escolha sua VPC.
Em Health check path (Caminho de verificação de integridade), insira 200.403. (Isso garante que o endpoint de VPC seja exibido como Healthy (Íntegro) no grupo de destino)

Network Load Balancer

Para Protocol (Protocolo), escolha TLS.
Para Port (Porta), escolha 443.
Para VPC, escolha sua VPC.

5.    Escolha Next (Avançar).

6.    Em Specify IPs (Especificar IPs), insira o endereço IP que você copiou na seção Criar um endpoint da Amazon VPC de interface e escolha Add IPv4 address (Adicionar endereço IPv4).

7.    Escolha Create target group (Criar grupo de destino).

Configurar o balanceador de carga

1.    Abra o console do EC2.

2.    No painel de navegação, escolha Load Balancers (Balanceadores de carga) e, em seguida, escolha Create Load Balancer (Criar balanceador de carga).

Application Load Balancer

Para Scheme (Esquema), escolha Internet-facing (Voltado para a Internet) ou Internal (Interno), dependendo da sua configuração.
Para Protocol (Protocolo), escolha HTTPS.
Para VPC e subnets (sub-redes), escolha sua VPC e sub-redes.

Network Load Balancer Para Scheme (Esquema), escolha Internet-facing (Voltado para a Internet) ou Internal (Interno), dependendo da sua configuração.
Para Protocol (Protocolo), escolha TLS.
Para VPC e subnets (sub-redes), escolha sua VPC e sub-redes.
Para Security policy (Política de segurança), escolha a política padrão ELBSecurityPolicy-TLS (recommended).
Para Default SSL/TLS certificate (Certificado SSL/TLS padrão), escolha From ACM (Do ACM).
Escolha o menu suspenso Select a certificate (Selecionar um certificado) e, em seguida, escolha seu certificado.

3.    Selecione Create load balancer (Criar balanceador de carga).

Observação: os destinos do balanceador de carga devem ser os endereços IP da interface de rede elástica criada pelo endpoint de VPC. Isso foi feito na etapa 1. Você pode encontrar essas interfaces de rede elásticas selecionando seu endpoint de VPC e abrindo a guia Subnets (Sub-redes).

Criar um registro em uma zona hospedada pública ou privada do Amazon Route 53

Se você ainda não tiver feito isso, faça o seguinte:

Crie uma zona hospedada pública

-ou-

Crie uma zona hospedada privada

Em seguida, crie um registro CNAME e associe-o ao seu Application Load Balancer ou Network Load Balancer.

Testes

Para balanceadores de carga públicos, você pode fazer uma solicitação curl na sua máquina local.

Para balanceadores de carga privados, inicie uma nova instância do EC2 em uma das sub-redes do seu balanceador de carga. Em seguida, faça uma solicitação curl semelhante à seguinte:

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'Host: <api-id>.execute-api.<region>.amazonaws.com'

-ou-

curl -v https://{custom-domain-name}/<stage-name>/<resource-path> -H 'x-apigw-api-id:{api-id}'

Uma solicitação bem-sucedida retorna um código de resposta 200 OK. Uma solicitação malsucedida retorna um código de resposta 403 Forbidden ou um erro de resolução de DNS. Se você encontrar algum problema, consulte Solucionar problemas com seus balanceadores de carga.