Come posso risolvere i problemi durante la connessione a un endpoint API privato di API Gateway?

7 minuti di lettura
0

Sto riscontrando problemi di connessione al mio endpoint API privato di Amazon API Gateway che si trova in Amazon Virtual Private Cloud (Amazon VPC). Come faccio a risolvere il problema?

Breve descrizione

Le risorse AWS in Amazon VPC possono non riuscire a connettersi a un endpoint API privato per uno dei seguenti motivi:

Quando la registrazione di Amazon CloudWatch è attivata per la tua API, nei log di esecuzione viene visualizzato un messaggio di errore che indica la causa dell'errore.

Se la richiesta API non produce alcun log di CloudWatch dopo l'attivazione della registrazione, la richiesta non ha raggiunto l'endpoint. Se le tue richieste API non raggiungono l'endpoint, assicurati che l'URL di richiamo dell'API privato sia formattato correttamente.

Nota: i problemi di connessione potrebbero essere causati da una policy delle risorse di API Gateway non configurata correttamente o da nomi DNS errati nell'URL di richiamo dell'endpoint API privato.

Risoluzione

Conferma la causa dell'errore

1.    Se non l'hai già fatto, attiva la registrazione di CloudWatch per la tua REST API privata. Assicurati di configurare laregistrazione delle esecuzioni.

Suggerimento: durante la configurazione delle impostazioni di registrazione, per Livello di log, scegli INFO. Quindi, scegli Registra i dati completi delle richieste/risposte.

2.    Identifica la causa degli errori visualizzando i log di esecuzione della tua REST API in CloudWatch. 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:"
  • "Connection timed out"

Se la richiesta API non produce alcun log di CloudWatch dopo l'attivazione della registrazione, assicurati che l'URL di richiamo della tua API privata sia formattato correttamente. Per istruzioni, consulta la sezione Se la richiesta API non produce alcun log di CloudWatch dopo l'attivazione della registrazione di questo articolo.

Per ulteriori informazioni, consulta Come faccio a trovare gli errori di REST API in API Gateway nei miei log di CloudWatch?

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

1.    Verifica che la policy delle risorse API Gateway dell'endpoint API privato consenta il traffico dall'endpoint VPC di interfaccia o dal VPC di origine all'endpoint API. Per un esempio di policy delle risorse, consulta Esempio: Consenti il traffico API privato basato sul VPC o sull'endpoint VPC di origine.

2.    Verifica che la policy degli endpoint VPC consenta al client di accedere all'endpoint API privato. Per esempi di policy degli endpoint VPC, consulta Esempi di policy degli endpoint VPC.

Per istruzioni su come testare le policy delle risorse di API Gateway, consulta la sezione Verifica la policy delle risorse di Come posso consentire solo a indirizzi IP specifici di accedere alla mia REST API di API Gateway?

**Importante:**Se modifichi la policy delle risorse della tua API, devi implementare la tua API per confermare le modifiche.

Risoluzione degli errori "Connection timed out"

1.    Verifica che nel VPC esista un endpoint API Gateway execute-api VPC. Verifica anche se l'endpoint si trova nella stessa regione AWS dell'API privata. Se non esiste, crea un endpoint VPC di interfaccia per API Gateway execute-api.

2.    Verifica che il client che richiama l'endpoint API privato esista nello stesso VPC o abbia accesso al VPC con l'endpoint VPC. Puoi eseguire il relativo test usando lo strumento traceroute.

Nota: le API private sono accessibili dai client all'interno del VPC o dai client che dispongono di connettività di rete al VPC.

Per installare traceroute, esegui i seguenti comandi:

Amazon Linux:

$ sudo yum install traceroute

Ubuntu:

$ sudo apt-get install traceroute

Per testare la connettività utilizzando traceroute:

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

L'argomento -T -p 443 -n esegue una traccia basata su TCP sulla porta 443.

3.    Verifica che le regole per i tuoi gruppi di sicurezza Amazon VPC siano configurate correttamente.

Per testare i gruppi di sicurezza Amazon VPC:

esegui il seguente comando dal client che effettua richieste all'endpoint API privato. Assicurati di sostituire {public-dns-hostname} con i nomi host DNS pubblici contenenti l'ID endpoint VPC per la tua API. Sostituisci {region} con la regione AWS in cui si trova l'endpoint VPC di interfaccia.

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

Se la connessione si interrompe, le regole per i tuoi gruppi di sicurezza Amazon VPC non sono configurate correttamente.

Verifica quanto segue:

  • La risorsa richiedente dispone di una regola del gruppo di sicurezza che consente il traffico in uscita dalla porta TCP 443 verso l'intervallo di indirizzi IP o il gruppo di sicurezza dell'endpoint VPC.
  • L'endpoint VPC dispone di una regola del gruppo di sicurezza che consente il traffico in entrata sulla porta TCP 443 dall'intervallo di indirizzi IP o dal gruppo di sicurezza della risorsa richiedente.

Per ulteriori informazioni, consulta Controlla il traffico verso le tue risorse utilizzando gruppi di sicurezza.

Se la richiesta API non produce alcun log di CloudWatch dopo l'attivazione della registrazione

1.    Verifica che la policy delle risorse API Gateway dell'endpoint API privato sia configurata correttamente.

Per ulteriori informazioni, consulta la seguente sezione di questo articolo: Risoluzione degli errori "User: anonymous is not authorized to perform: execute-api:Invoke on resource:".

2.    Verifica che l'URL di richiamo della tua API privata sia formattato correttamente.

Il formato corretto dipende dall'attivazione di un DNS privato attivato per l'endpoint VPC. Se il DNS privato non è attivato, devi utilizzare nomi host DNS pubblici specifici dell'endpoint per accedere all'endpoint API privato. Se il DNS privato è attivato, è necessario utilizzare nomi DNS privati per accedere all'endpoint API privato.

Per ulteriori informazioni, consulta Come invocare un'API privata.

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

1.    Esegui il seguente comando nslookup dal client che effettua richieste all'endpoint API privato. Assicurati che il client si trovi all'interno del VPC in cui esiste l'endpoint VPC. Sostituisci {restapi-id} con l'ID della tua API privata. Sostituisci {region} con la regione AWS in cui si trova il tuo endpoint API privato.

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

Un output corretto mostra gli indirizzi IP privati dell'endpoint VPC.

2.    Esegui il seguente comando nslookup. Assicurati di sostituire {public-dns-hostname} con i nomi host DNS pubblici contenenti l'ID endpoint VPC per la tua API. Sostituisci {region} con la regione AWS in cui si trova l'endpoint VPC di interfaccia.

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

Un output corretto mostra gli indirizzi IP privati dell'endpoint VPC.

3.    Confronta gli indirizzi IP negli output di ogni comando. Se gli indirizzi IP di ogni output del comando corrispondono, l'installazione funziona come previsto.

Nota: puoi attivare il DNS privato per il tuo endpoint VPC in qualsiasi momento nella console Amazon VPC effettuando le seguenti operazioni:
Nel riquadro endpoint, seleziona l'endpoint VPC dell'interfaccia.
Scegli Azioni.
Scegli Modifica nomi DNS privati.
Seleziona la casella di controllo Abilita nome DNS privato. Quindi scegli Salva modifiche.
Scegli Modifica nomi DNS privati.


Informazioni correlate

How can I access an API Gateway private REST API in another AWS account using an interface VPC endpoint?

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

Access an AWS service using an interface VPC endpoint

Riservatezza del traffico Internet in Amazon VPC

Monitoraggio dell'esecuzione delle REST API con i parametri di Amazon CloudWatch