Como invoco uma API privada da API Gateway usando um Application ou Network Load Balancer?

6 minuto de leitura
0

Quero configurar minha API privada do Amazon API Gateway como destino de um balanceador de carga. Depois, quero usar uma conta da AWS para acessar a API privada a partir de um Application ou Network Load Balancer.

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 da API Gateway em outra conta da AWS usando um endpoint de interface da VPC.

A resolução a seguir usa um endereço IP de uma interface de rede elástica de um endpoint da Amazon Virtual Private Cloud (Amazon VPC). Com esse endereço IP, você pode adicionar sua API privada como destino do balanceador de carga.

Importante: a APIs Gateway não é compatível com nomes de domínio personalizados nas APIs privadas. Como alternativa, você pode invocar e anexar o domínio a um balanceador de carga. Em seguida, use a configuração a seguir para invocar a API privada.

Resolução

Crie um endpoint do Amazon VPC

1.    Abra o console do Amazon VPC.

2.    Escolha Endpoints e, em seguida, escolha Criar endpoint.
Observação: se você já tiver algum endpoint do Amazon VPC configurado com o execute-api na sua VPC, desative o DNS privado.

3.    Em Serviços, escolha com.amazonaws.com.your-region.execute-api.

4.    Em VPC, selecione sua Amazon VPC.

5.    Em Sub-redes, selecione duas sub‑redes em diferentes zonas de disponibilidade (IDs de AZ). Depois, escolha Criar endpoint.

6.    Selecione seu endpoint, escolha sub‑redes e copie o endereço IP.

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

Crie uma API REST privada e conceda permissão ao endpoint do Amazon VPC

1.    Abra o console da API Gateway e escolha Criar API.

2.    Em API REST, escolha Compilar.

3.    Em Configurações, insira as informações a seguir: 
Em Nome da API, insira um nome para a API.
Em Tipo de endpoint, escolha Privado.
Em IDs de endpoint, insira o ID do endpoint que você criou.

4.    Escolha Criar API.

5.    Escolha Política de recurso no painel de navegação.

6.    No editor de política de recurso, cole a política a seguir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*",
      "Condition": {
        "StringNotEquals": {
          "aws:SourceVpce": "vpce-081234d1ad408e"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID/*/*/*"
    }
  ]
}

Observação: substitua vpce-081234d1ad408e pelo ID do seu endpoint da VPC. Substitua arn:aws:execute-api:us-east-1:ACCOUNT_ID:API_ID pelo ARN da sua API.

7.    Escolha Salvar.

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

Crie ou importe um certificado público do AWS Certificate Manager

Solicite um certificado público ou importe um certificado.

Crie um Application Load Balancer ou um Network Load Balancer

Crie um Application Load Balancer ou um Network Load Balancer.

Crie o grupo de destino

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

2.    Em Balanceamento de carga no painel de navegação, escolha Balanceadores de carga. Depois, escolha Grupos de destino.

3.    Escolha Criar grupo de destino.

4.    Em tipo de destino, escolha Endereços IP.

5.    Em Nome do grupo de destino, insira um nome.

Application Load Balancer

Em Protocolo, escolha HTTPS.
Em Porta, escolha 443.
Em VPC, selecione sua VPC.
Em Caminho da verificação de integridade, insira 200,403 para que o endpoint da VPC apareça como Íntegro no grupo de destino.

Network Load Balancer

Em Protocolo, escolha TLS.
Em Porta, escolha 443.
Em VPC, selecione sua VPC.

6.    Escolha Avançar.

7.    Em Especificar IPs, insira o endereço IP que você copiou na seção Crie um endpoint do Amazon VPC e escolha Adicionar endereço IPv4.

8.    Escolha Criar grupo de destino.

Configure o balanceador de carga

1.    Abra o console do EC2.

2.    No painel de navegação, escolha Balanceadores de Carga, e em seguida, escolha Criar balanceador de carga.

Application Load Balancer

Para Esquema, escolha Voltado para a Internet ou Interno, dependendo da sua configuração.
Em Protocolo, escolha HTTPS.
Em VPC e sub‑redes, selecione sua VPC e sub‑redes.

Network Load Balancer

Em Esquema, escolha Voltado para a Internet ou Interno, dependendo da sua configuração.
Em Protocolo, escolha TLS.
Em VPC e sub‑redes, selecione sua VPC e sub‑redes.
Em Política de segurança, selecione a política padrão ELBSecurityPolicy-TLS (recomendado).
Em Certificado SSL/TLS padrão, escolha Do ACM.
Escolha o menu suspenso Selecionar um certificado e, em seguida, selecione o certificado.

3.    Selecione Criar um balanceador de carga.

Observação: os destinos do balanceador de carga estão nos endereços IP da interface de rede elástica que o endpoint da VPC criou. Para encontrar as interfaces de rede elástica, selecione seu endpoint da VPC e, em seguida, abra a guia Sub‑redes.

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

Crie uma zona hospedada pública ou crie uma zona hospedada privada.

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

Como testar

Para testar um balanceador de carga público, você pode fazer uma solicitação curl em sua máquina local.

No caso de balanceadores de carga privados, execute uma nova instância do EC2 em uma das sub‑redes do balanceador de carga. Em seguida, faça uma solicitação usando o curl semelhante a esta:

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 Proibido ou um erro de resolução de DNS. Se encontrar problemas, consulte Solução de problemas dos balanceadores de carga.

Informações relacionadas

Como me conecto a uma API privada da API Gateway por meio de uma conexão do Direct Connect?

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

Monitorar a execução da API REST com métricas do Amazon CloudWatch

Configurar o registro em log do CloudWatch para uma API REST na API Gateway