Ir para o conteúdo

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

8 minuto de leitura
0

Quero solucionar problemas ao me conectar ao meu endpoint privado de API do Amazon API Gateway que está na Amazon Virtual Private Cloud (Amazon VPC).

Breve descrição

Recursos da AWS na Amazon VPC podem falhar ao se conectar a um endpoint privado de API pelos seguintes motivos:

Para identificar a causa, é possível ativar o Amazon CloudWatch Logs para sua API e analisar os logs.

Se a solicitação da API não gerar logs após você ativar o CloudWatch Logs, significa que a solicitação não chegou ao endpoint. Se suas solicitações de API não chegarem ao endpoint, verifique se você configurou corretamente a URL de invocação da API privada.
Para obter mais informações, consulte Como encontro erros da API REST do API Gateway em meus logs do CloudWatch?

Observação: uma política de recursos do API Gateway configurada incorretamente ou um nome DNS incorreto na URL de invocação do endpoint privado de API podem causar problemas de conexão.

Resolução

Confirme a causa do problema

Conclua as etapas a seguir:

  1. Ative o CloudWatch Logs na sua API REST privada.
  2. Em Nível do log, selecione INFO e, em seguida, clique em Registrar em log dados completos de solicitações/respostas.
  3. Visualize os logs de execução da sua API REST no CloudWatch para identificar a causa do problema.

Se as solicitações da API chegarem ao endpoint, uma mensagem de erro semelhante a uma das seguintes aparecerá:

  • "User: anonymous is not authorized to perform: execute-api:Invoke on resource:"
  • "SSL: no alternative certificate subject name matches target host name custom-domain.com/resource"
  • "Connection timed out"
  • "Could not resolve host: https://example.com/resource"

"User: anonymous is not authorized to perform: execute-api:Invoke on resource:"

Para resolver esse problema, configure as seguintes políticas:

  • A política de recursos do API Gateway da API privada deve permitir o tráfego do endpoint da VPC de interface ou da VPC de origem para o endpoint da API.
  • A política de endpoint da VPC deve permitir que o cliente acesse o endpoint privado de API. Essa é a política de recursos para o serviço execute-api.
  • A política de recursos do nome de domínio personalizado deve permitir o acesso aos seus endpoints da VPC para invocar o seu nome de domínio personalizado privado. Normalmente, o API Gateway provisiona um nome de domínio personalizado com uma negação explícita na política de recursos do nome de domínio personalizado. Para obter mais informações, consulte Tutorial: como criar e invocar um nome de domínio personalizado para APIs privadas.
    Importante: se você modificar a política de recursos da sua API, implante sua API no estágio para salvar as alterações.

"SSL: no alternative certificate subject name matches target host name custom-domain.com/resource"

Para resolver este problema, verifique se você criou associações de acesso ao nome de domínio personalizado privado do seu endpoint da VPC privado para o serviço execute-api.

"Connection timed out"

Para resolver problemas de tempo limite de conexão, conclua as seguintes etapas:

  1. Verifique se um endpoint da VPC execute-api do API Gateway existe na VPC onde você hospeda seu cliente. Em seguida, certifique-se de que o endpoint esteja na mesma região da AWS que a API privada. Se o endpoint não existir, então crie um endpoint da VPC de interface para o API Gateway execute-api.

  2. Use o traceroute para verificar se o cliente que invoca a API privada está na mesma VPC ou pode acessar a VPC com o endpoint da VPC.

    Para instalar o traceroute, execute os seguintes comandos:

    Amazon Linux:

    sudo yum install traceroute

    Ubuntu:

    sudo apt-get install traceroute

    Para usar o traceroute para testar a conectividade, execute o seguinte comando:

    sudo traceroute -n -T -p 443 VPC-endpoint IP-address

    Observação: o argumento -T -p 443 -n executa um rastreamento baseado em TCP na porta 443. Substitua VPC-endpoint IP-address pelo endereço IP do seu endpoint da VPC.

  3. Verifique se você configurou corretamente as regras para os seus grupos de segurança da Amazon VPC.
    Para testar seus grupos de segurança da Amazon VPC, execute o seguinte comando do cliente que faz solicitações para o endpoint privado de API:

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

    Observação: substitua public-dns-hostname pelos nomes de host DNS públicos que contêm o ID do endpoint da VPC da sua API. Além disso, substitua region pela Região em que seu endpoint da VPC de interface está localizado.

    Ou execute o seguinte comando do cliente que faz solicitações para o nome de domínio personalizado da API privada:

    telnet custom-domain-name 443

    Observação: substitua custom-domain-name pelo nome de domínio personalizado da sua API privada.

Se a conexão ultrapassar o tempo limite, significa que você não configurou corretamente as regras para os seus grupos de segurança da Amazon VPC.

O recurso solicitante deve ter uma regra de grupo de segurança que permita o tráfego de saída na porta TCP 443 para o intervalo de endereços IP ou grupo de segurança do endpoint da VPC. Além disso, o endpoint da VPC deve ter uma regra de grupo de segurança que permita o tráfego de entrada na porta TCP 443 a partir do intervalo de endereços IP ou do grupo de segurança do recurso que está fazendo a solicitação.

Para obter mais informações, consulte Como faço para restringir o tráfego de e para os recursos da Amazon VPC?

"Could not resolve host:https://www.example.com/resource"

Para resolver esse problema, execute as seguintes ações:

Teste se o domínio do endpoint privado de API é resolvido corretamente para o endereço IP do endpoint da VPC

Observação: certifique-se de que o cliente esteja dentro da VPC onde o endpoint da VPC execute-api existe.

Conclua as etapas a seguir:

  1. Execute o seguinte comando nslookup a partir do cliente que faz solicitações ao endpoint privado de API:
    nslookup restapi-id.execute-api.region.amazonaws.com
    Observação: substitua restapi-id pelo ID da sua API privada e region pela Região em que seu endpoint privado de API está localizado.
  2. Execute o seguinte comando nslookup a partir do cliente que faz solicitações para o nome de domínio personalizado da API privada. :
    nslookup custom-domain-name
    Observação: substitua custom-domain-name pelo nome de domínio personalizado da sua API privada. Uma saída bem-sucedida mostra os endereços IP privados do endpoint da VPC.
  3. Execute o seguinte comando nslookup:
    nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com
    Observação: substitua public-dns-hostname pelos nomes de host DNS públicos que contêm o ID do endpoint da VPC da sua API. Substitua region pela Região em que seu endpoint da VPC de interface está localizado. Uma saída bem-sucedida mostra os endereços IP privados do endpoint da VPC.
  4. Compare os endereços IP nas saídas de cada comando. Se os endereços IP de cada saída de comando corresponderem, a configuração está funcionando conforme o esperado.

Para ativar o DNS privado no seu endpoint da VPC, conclua as etapas a seguir.

  1. Abra o console da Amazon VPC.
  2. No painel Endpoints, selecione seu endpoint da VPC de interface.
  3. Clique em Ações.
  4. Selecione Modificar nomes DNS privados.
  5. Clique em Habilitar nome de DNS privado e, em seguida, selecione Salvar alterações.

A solicitação da API não produz nenhum CloudWatch Log depois que você ativa o CloudWatch Logs

Para resolver esse problema, execute as seguintes ações:

  • Configure corretamente a política de recursos do API Gateway do endpoint privado de API.
  • Formate corretamente o URL de invocação da sua API privada para acessar o endpoint privado de API.
    Observação: se você ativou um DNS privado, você deve usar nomes de host DNS públicos específicos do endpoint. Se você não ativou um DNS privado, use nomes de DNS privados.
  • Mapeie o nome de domínio personalizado da API privada para o estágio correto da API.

Informações relacionadas

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

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

How do I monitor traffic in my VPC with flow logs? (Como monitorar o tráfego na minha VPC com logs de fluxo?)

Como faço para ativar o CloudWatch Logs para solucionar problemas com minha API REST do API Gateway ou API de WebSocket?