Salta al contenuto

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

7 minuti di lettura
0

Desidero risolvere i problemi che riscontro 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 all'endpoint di un'API privata 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 Gateway API nei miei log di CloudWatch?

Nota: una policy delle risorse di Gateway API configurata in modo non corretto o un nome DNS errato nell'URL di invocazione dell'endpoint dell'API privata 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 log, 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 le seguenti policy:

  • La policy delle risorse di Gateway API per l'API privata deve consentire il traffico dall'endpoint VPC di interfaccia o dal VPC di origine all'endpoint dell'API.
  • La policy degli endpoint VPC deve consentire al client l'accesso all'endpoint dell'API privata. Questa è la policy delle risorse del 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, Gateway API 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 un nome di dominio personalizzato privato.
    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 del 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 Gateway API 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 Gateway API.

  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 testare la connettività utilizzando traceroute, 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 di Amazon VPC.
    Per testare i gruppi di sicurezza di Amazon VPC, esegui questo comando dal client che effettua le richieste all'endpoint dell'API privata:

    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 di 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 di 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 Come posso limitare il traffico da e verso le risorse in 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 dell'API privata 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 dell'API privata:
    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 l'endpoint della tua API privata.
  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 di 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 di 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 Gateway API dell'endpoint dell'API privata.
  • Formatta correttamente l'URL di invocazione dell'API privata per accedere all'endpoint dell'API privata.
    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 l'errore HTTP "403 Forbidden" quando provo a connettermi alle mie API pubbliche 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 Gateway API?