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

8 minuto de leitura
0

Estou com problemas para me conectar ao meu endpoint de API privada do Amazon API Gateway que está na Amazon Virtual Private Cloud (Amazon VPC). Como soluciono o problema?

Breve descrição

Os recursos da AWS na Amazon VPC podem falhar ao se conectar a um endpoint da API privada por qualquer um dos seguintes motivos:

Quando o log do Amazon CloudWatch é ativado para sua API, uma mensagem de erro que indica a causa do erro aparece nos seus logs de execução.

Se a solicitação da API não produzir nenhum log do CloudWatch após a ativação do log, a solicitação não chegou ao endpoint. Se suas solicitações de API não estiverem chegando ao endpoint, certifique-se de que o URL de invocação da API privada esteja formatado corretamente.

Observação: os problemas de conexão podem ser causados por uma política de recursos do API Gateway configurada incorretamente ou por nomes de DNS incorretos no URL de invocação do endpoint da API privada.

Resolução

Confirmar a causa do erro

1.    Se você ainda não fez isso, ative o log do CloudWatch para sua API REST privada. Certifique-se de configurar o log de execução.

Dica: ao definir as configurações de log, em Nível do log, escolha INFO. Em seguida, escolha Registrar dados completos de solicitações/respostas.

2.    Identifique o que está causando os erros visualizando os logs de execução da sua API REST no CloudWatch. Se as solicitações de API estiverem chegando ao endpoint, uma mensagem de erro semelhante a um dos exemplos a seguir será exibida:

  • “Usuário: anônimo não está autorizado a realizar: execute-api:Invoke no recurso:”
  • “Tempo limite da conexão”

Se a solicitação da API não produzir nenhum log do CloudWatch após a ativação do log, certifique-se de que o URL de invocação da sua API privada esteja formatado corretamente. Para obter instruções, consulte a seção Se a solicitação de API não produzir nenhum log do CloudWatch após a ativação do log deste artigo.

Para obter mais informações, consulte Como faço para encontrar erros de API REST do API Gateway em meus logs do CloudWatch?

Resolver erros “Usuário: anônimo não está autorizado a realizar: execute-api:Invoke no recurso:”

1.    Verifique se a política de recursos do API Gateway do endpoint da API privada permite o tráfego do endpoint da VPC da interface ou da VPC de origem para o endpoint da API. Para ver um exemplo de política de recursos, consulte Exemplo: permitir tráfego da API privada com base na VPC de origem ou no endpoint da VPC.

2.    Verifique se a política de endpoint da VPC permite que o cliente acesse o endpoint da API privada. Para exemplos de políticas de endpoint da VPC, consulte Exemplos de políticas de endpoint da VPC.

Para obter instruções sobre como testar as políticas de recursos do API Gateway, consulte a seção Testar a política de recursos de Como eu permito que somente endereços IP específicos acessem minha API REST do API Gateway?

Importante: se você modificar a política de recursos da sua API, deverá implantá-la para confirmar as alterações.

Resolver erros de “Tempo limite da conexão”

1.    Verifique se existe um endpoint da VPC execute-api do API Gateway na VPC. Verifique também se o endpoint está na mesma região da AWS que a API privada. Se ele não existir, crie um endpoint da VPC de interface para a API execute-api do API Gateway.

2.    Verifique se o cliente que está invocando o endpoint da API privada existe na mesma VPC ou tem acesso à VPC com o endpoint da VPC. Você pode testar isso usando a ferramenta traceroute.

Observação: as APIs privadas podem ser acessadas por clientes dentro da VPC ou por clientes que têm conectividade de rede com a VPC.

Para instalar o traceroute, execute os seguintes comandos:

Amazon Linux:

$ sudo yum install traceroute

Ubuntu:

$ sudo apt-get install traceroute

Para testar a conectividade usando o traceroute:

$ sudo traceroute -n -T -p 443 <VPC-endpoint IP-address>

O argumento -T -p 443 -n executa um rastreamento baseado em TCP na porta 443.

3.    Verifique se as regras para seus grupos de segurança da Amazon VPC estão configuradas corretamente.

Para testar seus grupos de segurança da Amazon VPC:

Execute o comando a seguir no cliente que está fazendo solicitações para o endpoint da API privada. Certifique-se de substituir {public-dns-hostname} pelos nomes de host DNS públicos que contêm a ID do endpoint da VPC para sua API. Substitua {region} pela região da AWS em que seu endpoint da VPC de interface está.

$ telnet {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com 443

Se a conexão se esgotar, as regras para seus grupos de segurança da Amazon VPC não estão configuradas corretamente.

Verifique o seguinte:

  • O recurso solicitante tem uma regra de grupo de segurança que permite tráfego de saída da porta TCP 443 para o intervalo de endereços IP ou o grupo de segurança do endpoint da VPC.
  • O endpoint da VPC tem uma regra de grupo de segurança que permite o tráfego de entrada da porta TCP 443 do intervalo de endereços IP ou do grupo de segurança do recurso solicitante.

Para obter mais informações, consulte Controlar o tráfego para recursos usando grupos de segurança.

Se a solicitação da API não produzir nenhum log do CloudWatch após a ativação do log

1.    Verifique se a política de recursos do API Gateway do endpoint da API privada está configurada corretamente.

Para obter mais informações, consulte a seção a seguir deste artigo: Resolver erros “Usuário: anônimo não está autorizado a realizar: execute-api:Invoke no recurso:”.

2.    Verifique se o URL de invocação da sua API privada está formatado corretamente.

O formato correto depende da ativação de um DNS privado para o endpoint da VPC. Se o DNS privado não estiver ativado, você deverá usar nomes de host DNS públicos específicos do endpoint para acessar o endpoint da API privada. Se o DNS privado estiver ativado, você deverá usar nomes de DNS privados para acessar o endpoint da API privada.

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

Testar se o domínio do endpoint da API privada é resolvido corretamente para o endereço IP do endpoint da VPC

1.    Execute o seguinte comando nslookup do cliente que está fazendo solicitações ao endpoint da API privada. Certifique-se de que o cliente esteja dentro da VPC em que o endpoint da VPC existe. Substitua {restapi-id} pela ID da sua API privada. Substitua {region} pela região da AWS em que seu endpoint da API privada está.

$ nslookup {restapi-id}.execute-api.{region}.amazonaws.com

Uma saída bem-sucedida mostra os endereços IP privados do endpoint da VPC.

2.    Execute o seguinte comando nslookup. Certifique-se de substituir {public-dns-hostname} pelos nomes de host DNS públicos que contêm a ID do endpoint da VPC para sua API. Substitua {region} pela região da AWS em que seu endpoint da VPC de interface está.

$ nslookup {public-dns-hostname}.execute-api.{region}.vpce.amazonaws.com

Uma saída bem-sucedida mostra os endereços IP privados do endpoint da VPC.

3.    Compare os endereços IP nas saídas de cada comando. Se os endereços IP de cada saída de comando correspondem, a configuração está funcionando conforme o esperado.

Observação: você pode ativar o DNS privado para seu endpoint da VPC a qualquer momento no console da Amazon VPC fazendo o seguinte:
No painel Endpoints, selecione seu endpoint da VPC de interface.
Escolha Ações.
Escolha Modificar nomes de DNS privado.
Marque a caixa de seleção Ativar nomes de DNS privado. Então, escolha Salvar alterações.
Escolha Modificar nomes de DNS privado.


Informações relacionadas

Como posso acessar uma API REST privada do API Gateway em outra conta da AWS usando um endpoint da VPC de interface?

Por que recebo um erro HTTP 403 Forbidden ao me conectar às minhas APIs do API Gateway a partir de uma VPC?

Acessar um serviço da AWS usando um endpoint da VPC de interface

Privacidade do tráfego entre redes na Amazon VPC

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