Come posso risolvere i problemi che riscontro quando mi connetto a un endpoint API privato di API Gateway?

7 minuti di lettura
0

Desidero risolvere i problemi quando mi connetto al mio endpoint API privato di Gateway Amazon API che si trova in Amazon Virtual Private Cloud (Amazon VPC).

Breve descrizione

Le risorse AWS in Amazon VPC potrebbero non riuscire a connettersi a un endpoint API privato per i seguenti motivi:

Per determinare la causa, puoi attivare Amazon CloudWatch Logs per l'API ed esaminare i log.

Se la richiesta API non produce log dopo l'attivazione di CloudWatch Logs, la richiesta non ha raggiunto l'endpoint. Se le richieste API non raggiungono l'endpoint, verifica di aver configurato correttamente l'URL di invocazione dell'API privata.
Per ulteriori informazioni, consulta Come faccio a trovare gli errori di REST API in API Gateway nei miei log di CloudWatch?

Nota: una policy delle risorse di API Gateway configurata in modo non corretto o un nome DNS errato nell'URL di invocazione dell'endpoint API privato potrebbero causare problemi di connessione.

Risoluzione

Verifica la causa dell'errore

Completa i seguenti passaggi:

  1. Attiva CloudWatch Logs per la REST API privata.
  2. Per Livello, scegli INFO, quindi scegli Registra tutti i dati delle richieste/risposte.
  3. Visualizza i log di esecuzione della REST API in CloudWatch per identificare la causa del problema.

Se le richieste API raggiungono l'endpoint, viene visualizzato un messaggio di errore simile a uno dei seguenti esempi:

  • "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:"

Per risolvere il problema, configura i seguenti criteri:

  • La policy delle risorse di API Gateway dell'API privata deve consentire il traffico dall'endpoint VPC dell'interfaccia o dal VPC di origine all'endpoint API.
  • La policy degli endpoint VPC deve consentire al client l'accesso all'endpoint API privato. Questa è la policy delle risorse per il servizio execute-api.
  • La policy delle risorse del nome di dominio personalizzato deve consentire l'accesso agli endpoint VPC affinché il nome di dominio personalizzato privato possa essere invocato. Per impostazione predefinita, API Gateway fornisce un nome di dominio personalizzato con un rifiuto esplicito nella policy delle risorse del nome di dominio personalizzato. Per ulteriori informazioni, consulta Tutorial: creare e invocare un nome di dominio personalizzato per API private.
    Importante: se modifichi la policy delle risorse dell'API, distribuisci l'API alla fase per salvare le modifiche.

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

Per risolvere il problema, controlla se hai creato associazioni di accesso al nome di dominio personalizzato privato per l'endpoint VPC privato per il servizio execute-api.

"Connection timed out"

Per risolvere i problemi di timeout della connessione, completa i seguenti passaggi:

  1. Verifica che esista un endpoint VPC per execute-api di API Gateway nel VPC in cui ospiti il client. Quindi assicurati che l'endpoint si trovi nella stessa Regione AWS dell'API privata. Se l'endpoint non esiste, crea un endpoint VPC di interfaccia per execute-api di API Gateway.

  2. Utilizza traceroute per verificare che il client che invoca l'API privata esista nello stesso VPC o possa accedere al VPC con l'endpoint VPC.

    Per installare traceroute, esegui questi comandi:

    Amazon Linux:

    sudo yum install traceroute

    Ubuntu:

    sudo apt-get install traceroute

    Per utilizzare traceroute per testare la connettività, esegui questo comando:

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

    Nota: l'argomento -T -p 443 -n esegue una traccia basata su TCP sulla porta 443. Sostituisci VPC-endpoint IP-address con l'indirizzo IP del tuo endpoint VPC.

  3. Verifica di aver configurato correttamente le regole per i gruppi di sicurezza Amazon VPC.
    Per testare i gruppi di sicurezza Amazon VPC, esegui questo comando dal client che effettua le richieste all'endpoint API privato:

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

    Nota: sostituisci public-dns-hostname con i nomi host DNS pubblici che contengono l'ID dell'endpoint VPC per la tua API. Inoltre, sostituisci region con la Regione in cui si trova l'endpoint VPC dell'interfaccia.

    Oppure esegui questo comando dal client che effettua richieste al nome di dominio personalizzato dell'API privata:

    telnet custom-domain-name 443

    Nota: sostituisci custom-domain-name con il nome del tuo dominio personalizzato dell'API privata.

Se la connessione si interrompe, significa che non hai configurato correttamente le regole per i gruppi di sicurezza Amazon VPC.

La risorsa richiedente deve avere una regola del gruppo di sicurezza che consenta il traffico in uscita dalla porta TCP 443 verso l'intervallo di indirizzi IP o il gruppo di sicurezza dell'endpoint VPC. Inoltre, l'endpoint VPC deve avere una regola del gruppo di sicurezza che consenta il traffico in entrata verso la porta TCP 443 dall'intervallo di indirizzi IP o dal gruppo di sicurezza della risorsa richiedente.

Per ulteriori informazioni, consulta How do I restrict traffic to and from Amazon VPC resources? (Come posso limitare il traffico da e verso risorse Amazon VPC?)

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

Per risolvere l’errore, intraprendi le seguenti azioni:

Verifica che il dominio dell'endpoint API privato si risolva correttamente nell'indirizzo IP dell'endpoint VPC

Nota: assicurati che il client si trovi all'interno del VPC in cui esiste l'endpoint VPC per execute-api.

Completa i seguenti passaggi:

  1. Esegui questo comando nslookup dal client che effettua richieste all'endpoint API privato:
    nslookup restapi-id.execute-api.region.amazonaws.com
    Nota: sostituisci restapi-id con l'ID della tua API privata e region con la Regione in cui si trova il tuo endpoint API privato.
  2. Esegui questo comando nslookup dal client che effettua richieste al nome di dominio personalizzato dell'API privata:
    nslookup custom-domain-name
    Nota: sostituisci custom-domain-name con il nome di dominio personalizzato della tua API privata. Un output corretto mostra gli indirizzi IP privati dell'endpoint VPC.
  3. Esegui questo comando nslookup:
    nslookup public-dns-hostname.execute-api.region.vpce.amazonaws.com
    Nota: sostituisci public-dns-hostname con i nomi host DNS pubblici che contengono l'ID dell'endpoint VPC per la tua API. Sostituisci region con la Regione in cui si trova l'endpoint VPC dell'interfaccia. Un output corretto mostra gli indirizzi IP privati dell'endpoint VPC.
  4. Confronta gli indirizzi IP nell'output di ogni comando. Se gli indirizzi IP nell'output di ogni comando corrispondono, la configurazione funziona come dovrebbe.

Per attivare il DNS privato per l'endpoint VPC, completa i seguenti passaggi.

  1. Apri la console Amazon VPC.
  2. Nel pannello endpoint, seleziona l'endpoint VPC dell'interfaccia.
  3. Scegli Operazioni.
  4. Scegli Modifica nomi DNS privati.
  5. Seleziona Abilita nome DNS privato, quindi scegli Salva modifiche.

La richiesta API non produce log in CloudWatch dopo l'attivazione di CloudWatch Logs

Per risolvere l’errore, intraprendi le seguenti azioni:

  • Configura correttamente la policy delle risorse di API Gateway dell'endpoint API privato.
  • Formatta correttamente l'URL di invocazione dell'API privata per accedere all'endpoint API privato.
    Nota: se hai attivato un DNS privato, devi utilizzare nomi host DNS pubblici specifici per gli endpoint. Se non hai attivato un DNS privato, utilizza nomi DNS privati.
  • Associa il nome di dominio personalizzato dell'API privata alla fase API corretta.

Informazioni correlate

Come posso utilizzare un endpoint VPC di interfaccia per accedere a una REST API privata del Gateway API in un altro account?

Perché ricevo un errore HTTP 403 Forbidden quando mi connetto alle mie API di Gateway API da un VPC?

How do I monitor traffic in my VPC with flow logs? (Come posso monitorare il traffico nel mio VPC con i log di flusso?)

Come posso attivare CloudWatch Logs per risolvere i problemi della mia REST API o API WebSocket di API Gateway?