Come posso risolvere gli errori HTTP 403 di API Gateway?

9 minuti di lettura
0

Quando chiamo la mia API di Gateway Amazon API, visualizzo un errore 403.

Descrizione breve

Un codice di risposta HTTP 403 significa che a un client è vietato accedere a un URL valido. Il server comprende la richiesta, ma non può soddisfarla a causa di problemi sul lato client.

Le API Gateway possono mostrare risposte 403 per uno dei seguenti motivi:

ProblemaIntestazione di rispostaMessaggio di erroreCausa principale
Accesso negato"x-amzn-errortype" = "AccessDeniedException""L'utente non è autorizzato ad accedere a questa risorsa con un rifiuto esplicito"Il chiamante non è autorizzato ad accedere a un'API che utilizza un autorizzatore API Gateway Lambda.
Accesso negato"x-amzn-errortype" = "AccessDeniedException""L'utente: <user-arn> non è autorizzato a eseguire: execute-api:Invoke sulla risorsa: <api-resource-arn> con un rifiuto esplicito"Il chiamante non è autorizzato ad accedere a un'API che utilizza l'autorizzazione AWS Identity and Access Management (IAM). Oppure, l'API ha una policy sulle risorse allegata che nega esplicitamente l'accesso al chiamante.<br><br>Per ulteriori informazioni, consulta la policy di autenticazione e risorse IAM.
Accesso negato"x-amzn-errortype" = "AccessDeniedException""L'utente: anonymous non è autorizzato a eseguire: execute-api:Invoke sulla risorsa:<api-resource-arn>"Il chiamante non è autorizzato ad accedere a un'API che utilizza l'autorizzazione IAM. Oppure, l'API ha una policy sulle risorse allegata che nega esplicitamente al chiamante di invocare l'API.<br><br>Per ulteriori informazioni, consulta la policy di autenticazione e risorse IAM.
Accesso negato"x-amzn-errortype" = "AccessDeniedException""Il token di sicurezza incluso nella richiesta non è valido".Il chiamante ha utilizzato chiavi IAM non valide per accedere a un'API che utilizza l'autorizzazione IAM.
Token di autenticazione mancante"x-amzn-errortype" = "MissingAuthenticationTokenException""Token di autenticazione mancante"Nella richiesta non è stato trovato un token di autenticazione.
Token di autenticazione scaduto"x-amzn-errortype" = "InvalidSignatureException""Firma scaduta"Il token di autenticazione nella richiesta è scaduto.
La chiave API non è valida"x-amzn-errortype" = "ForbiddenException""È stato specificato un identificatore chiave API non valido"Il chiamante ha utilizzato una chiave API non valida per un metodo che richiede una chiave API.
La firma non è valida"x-amzn-errortype" = "InvalidSignatureException""La firma della richiesta che abbiamo calcolato non corrisponde alla firma fornita. Controlla la tua chiave di accesso segreta AWS e il metodo di firma".La firma nella richiesta non corrisponde a quella sul server quando si accede a un'API che utilizza l'autorizzazione IAM.
Filtrato AWS WAF"x-amzn-errortype" = "ForbiddenException""Non consentito"La richiesta viene bloccata dal filtro del firewall delle applicazioni web quando AWS WAF è attivato nell'API.
Il percorso della risorsa non esiste"x-amzn-errortype" = "MissingAuthenticationTokenException""Token di autenticazione mancante"Una richiesta senza intestazione "Autorizzazione" viene inviata a un percorso di risorsa API che non esiste.<br><br>Per ulteriori informazioni, consulta Come faccio a risolvere gli errori 403 "Token di autenticazione mancante" da un endpoint REST API di API Gateway?
Il percorso della risorsa non esiste"x-amzn-errortype" = "IncompleteSignatureException""L'intestazione di autorizzazione richiede il parametro 'Credenziale'. L'intestazione di autorizzazione richiede il parametro 'Firma'. L'intestazione di autorizzazione richiede il parametro 'SignedHeaders'. L'intestazione di autorizzazione richiede l'esistenza di un'intestazione 'X-Amz-Date' o 'Date'. Authorization=allow"Una richiesta con un'intestazione "Authorization" viene inviata a un percorso di risorsa API che non esiste.
Richiamare un'API privata utilizzando nomi DNS pubblici in modo errato"x-amzn-errortype" = "ForbiddenException""Non consentito"Richiamare un'API privata da un Amazon Virtual Private Cloud (Amazon VPC) utilizzando nomi DNS pubblici in modo errato. Ad esempio: l'intestazione "Host" o "x-apigw-api-id" non è presente nella richiesta.<br><br>Per ulteriori informazioni, consulta Richiamare la tua API privata utilizzando nomi host DNS pubblici specifici per gli endpoint.
Richiamare una REST API con un nome di dominio personalizzato utilizzando l'endpoint execute-api predefinito"x-amzn-errortype" = "ForbiddenException""Non consentito"Il chiamante utilizza l'endpoint execute-api predefinito per richiamare una REST API dopo aver disattivato l'endpoint predefinito.<br><br>Per ulteriori informazioni, consulta Disabilitare l'endpoint predefinito per una REST API
Richiamare un nome di dominio personalizzato API Gateway che richiede Transport Layer Security (TLS) reciproca utilizzando un certificato client non valido."x-amzn-errortype" = "ForbiddenException""Non consentito"Il certificato client presentato nella richiesta API non viene emesso dal truststore del nome di dominio personalizzato o non è valido.<br><br>Per ulteriori informazioni, consulta Come faccio a risolvere gli errori HTTP 403 Non consentito da un nome di dominio personalizzato API Gateway che richiede il protocollo TLS reciproco?
Richiamare un nome di dominio personalizzato senza una mappatura del percorso di base"x-amzn-errortype" = "ForbiddenException""Non consentito"Il chiamante richiama un dominio personalizzato senza che un percorso di base sia mappato a un'API.<br><br>Per ulteriori informazioni, consulta Configurare i nomi di dominio personalizzati per le REST API.
Richiamare un'API con dominio personalizzato abilitato quando l'URL del dominio include la fase"x-amzn-errortype" = "MissingAuthenticationTokenException""Token di autenticazione mancante"Una mappatura API specifica un'API, una fase e, facoltativamente, un percorso da utilizzare per la mappatura. Pertanto, quando la fase di un'API è mappata su un dominio personalizzato, non è più necessario includere la fase nell'URL.<br><br>Per ulteriori informazioni, consulta Utilizzare le mappature delle API per le REST API.
L'URL della fase nella richiesta non è valido"x-amzn-errortype" = "ForbiddenException""Non consentito"L'URL della richiesta del chiamante include una fase che non esiste. Verifica che la fase esista e l'ortografia dell'URL della richiesta.<br><br>Per ulteriori informazioni, consulta Richiamare una REST API in Amazon API Gateway.

Risoluzione

Valuta la causa dell'errore

Se l'errore 403 è stato segnalato da altre risorse, potrebbe esserci un'altra causa dell'errore. Ad esempio:

  • Se l'errore è stato segnalato in un browser web, l'errore potrebbe essere causato da un'impostazione proxy errata. Il server proxy restituisce un errore 403 se l'accesso HTTP non è consentito.
  • Se c'è un altro servizio AWS davanti all'API, quel servizio può rifiutare la richiesta con un errore 403 nella risposta. Ad esempio: Amazon CloudFront.

Identifica la causa dell'errore

Se non l'hai già fatto, configura la registrazione degli accessi di Amazon CloudWatch per la tua API. Quindi, visualizza i log di esecuzione della tua API in CloudWatch per determinare se le richieste raggiungono l'API.

Nota: le API HTTP non supportano la registrazione delle esecuzioni. Per risolvere gli errori 403 restituiti da un nome di dominio personalizzato che richiede TLS reciproco e richiama un'API HTTP, devi fare quanto segue:

1.    Crea una nuova mappatura API per il tuo nome di dominio personalizzato che richiami una REST API solo per i test.

2.    Identifica la causa degli errori visualizzando i log di esecuzione della tua REST API in CloudWatch.

3.    Una volta identificato e risolto l'errore, reindirizza la mappatura API per il tuo nome di dominio personalizzato alla tua API HTTP.

Conferma che la risorsa richiesta esiste nella definizione dell'API

Nota: se visualizzi errori durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Verifica quanto segue utilizzando la console API Gateway o AWS CLI:

  • L'API viene distribuita con la definizione API più recente.
  • La risorsa richiesta esiste nella definizione dell'API.

Usa curl per ottenere i dettagli di richiesta e risposta

Se l'errore può essere riprodotto, usa il comando curl-v per ottenere maggiori dettagli tra il client e l'API simili ai seguenti:

curl -X HTTP_VERB -v https://{api_id}.execute-api.{region}.amazonaws.com/{stage_name}/{resource_name}

Nota: per ulteriori informazioni, consulta il sito web del progetto curl.

Verifica che l'intestazione della richiesta sia corretta

Se l'errore è il risultato di una chiave API non valida, verifica che l'intestazione "x-api-key" sia stata inviata nella richiesta.

Verifica che l'impostazione DNS su qualsiasi interfaccia (endpoint Amazon VPC) sia impostata correttamente

Nota: conferma quanto segue per le API richiamate da un Amazon VPC che ha solo un endpoint VPC di interfaccia.

Verifica che l'impostazione DNS dell'endpoint dell'interfaccia sia impostata correttamente in base al tipo di API che stai utilizzando.

Tieni presente quanto segue:

  • Per richiamare un'API regionale dall'interno di un Amazon VPC, i nomi DNS privati devono essere disattivati sull'endpoint dell'interfaccia. Quindi, il nome host dell'endpoint può essere risolto da un DNS pubblico. Per ulteriori informazioni, consulta Creare un'API privata in Amazon API Gateway.
  • Per richiamare un'API privata dall'interno di un Amazon VPC utilizzando il nome DNS privato dell'API, i nomi DNS privati devono essere attivati sull'endpoint dell'interfaccia. Quindi, il nome host dell'endpoint di interfaccia può essere risolto nelle risorse di sottorete locali di Amazon VPC. Per ulteriori informazioni, consulta Come richiamare un'API privata.
    Nota: non è necessario configurare un DNS privato se stai richiamando l'API privata utilizzando uno dei seguenti:
    Il nome DNS pubblico dell'API privata.
    -oppure-
    Un alias Amazon Route 53.

Rivedi la policy sulle risorse dell'API

Rivedi la policy delle risorse della tua API per verificare quanto segue:

Rivedi i messaggi di richiesta e risposta HTTP

Riproduci l'errore in un browser web, se possibile. Quindi, utilizza gli strumenti di rete del browser per acquisire i messaggi di richiesta e risposta HTTP e analizzarli per determinare dove si è verificato l'errore.

Nota: per l'analisi offline, salva i messaggi in un file HTTP Archive (HAR).

Informazioni correlate

Errori comuni: Amazon API Gateway

Come faccio a consentire solo a indirizzi IP specifici di accedere alla mia REST API di API Gateway?

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

Come faccio ad attivare i file di log Amazon CloudWatch per risolvere i problemi della REST API del mio API Gateway o API WebSocket?