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.

Breve descrizione

Quando un client non riesce ad accedere a un URL valido, ricevi un codice di risposta HTTP 403. Il server comprende la richiesta, ma non può soddisfarla a causa di problemi sul lato client.
Le API di API Gateway possono restituire risposte 403 per i motivi seguenti:

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 Lambda Authorizer di API Gateway.
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 (AWS IAM). Oppure all'API è collegata una policy delle risorse che rifiuta esplicitamente l'accesso al chiamante. Per ulteriori informazioni, consulta Autenticazione IAM e policy delle risorse.
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 all'API è collegata una policy delle risorse che non consente esplicitamente al chiamante di invocare l'API. Per ulteriori informazioni, consulta Autenticazione IAM e policy delle risorse.
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""Non consentito"Il chiamante ha utilizzato una chiave API per un metodo che richiede una chiave API, ma la chiave fornita non è corretta. Oppure la chiave API non è associata a un piano di utilizzo associato alla fase. Oppure la chiave API è disattivata o non esiste.
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 alla firma sul server quando il chiamante accede a un'API che utilizza l'autorizzazione IAM.
Filtrato da AWS WAF"x-amzn-errortype" = "ForbiddenException""Non consentito"Il filtro del Web Application Firewall blocca la richiesta quando AWS WAF è attivato nell'API.
Il percorso della risorsa non esiste"x-amzn-errortype" = "MissingAuthenticationTokenException""Token di autenticazione mancante"Una richiesta senza intestazione "Authorization" viene inviata a un percorso di una risorsa API inesistente. Per ulteriori informazioni, consulta Come posso risolvere gli errori 403 "Token di autenticazione mancante" dell'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 inesistente.
Utilizza erroneamente nomi DNS pubblici per invocare un'API privata"x-amzn-errortype" = "ForbiddenException""Non consentito"Hai utilizzato erroneamente nomi DNS pubblici per invocare un'API privata da un Amazon Virtual Private Cloud (Amazon VPC). Ad esempio: l'intestazione "Host" o "x-apigw-api-id" non è presente nella richiesta. Per ulteriori informazioni, consulta Invoca un'API privata utilizzando nomi di host del DNS pubblico specifici dell'endpoint.
Utilizza l'endpoint execute-api predefinito per invocare una REST API con un nome di dominio personalizzato"x-amzn-errortype" = "ForbiddenException""Non consentito"Il chiamante utilizza l'endpoint execute-api predefinito per invocare una REST API dopo che hai disattivato l'endpoint predefinito. Per ulteriori informazioni, consulta Disabilita l'endpoint predefinito per le REST API
Utilizza un certificato client non valido per invocare un nome di dominio personalizzato di API Gateway che richiede l'autenticazione TLS reciproca"x-amzn-errortype" = "ForbiddenException""Non consentito"Il truststore del nome di dominio personalizzato non emette il certificato client contenuto nella richiesta API o il certificato non è valido. Per ulteriori informazioni, consulta Come posso risolvere gli errori HTTP 403 Forbidden relativi a un nome di dominio personalizzato di API Gateway che richiede l'autenticazione TLS reciproca?
Invocazione di un nome di dominio personalizzato senza una mappatura del percorso di base"x-amzn-errortype" = "ForbiddenException""Non consentito"Il chiamante invoca un dominio personalizzato e non mappa un percorso di base a un'API. Per ulteriori informazioni, consulta Custom domain name for REST APIs in API Gateway.
Invocazione di un'API con dominio personalizzato attivato 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 un percorso opzionale da utilizzare per la mappatura. Pertanto, quando la fase di un'API viene mappata a un dominio personalizzato, non è più necessario includere la fase nell'URL. Per ulteriori informazioni, consulta Mappa le fasi dell'API su un nome di dominio personalizzato per le REST API.
La fase nell'URL nella richiesta non è valida"x-amzn-errortype" = "ForbiddenException""Non consentito"L'URL della richiesta del chiamante include una fase inesistente. Per ulteriori informazioni, consulta Invoca le API REST in API Gateway.

Risoluzione

Identifica la causa dell'errore

Se l'errore 403 viene segnalato da altre risorse, come negli esempi seguenti, la causa potrebbe essere un'altra:

  • Se l'errore viene segnalato in un browser web, potrebbe esserci un'impostazione proxy errata che non consente l'accesso HTTP.
  • Se davanti all'API c'è un altro servizio AWS, come Amazon CloudFront, il servizio può rifiutare la richiesta.

Per individuare la causa dell'errore, configura la registrazione degli accessi all'API in Amazon CloudWatch. Quindi visualizza gli eventi del log della tua API in CloudWatch per capire se le richieste arrivano all'API.

Nota: le API HTTP non supportano la registrazione dell'esecuzione.

Per risolvere gli errori 403 restituiti da un nome di dominio personalizzato che richiede l'autenticazione TLS reciproca e invoca un'API HTTP, procedi come segue:

  1. Crea una nuova mappatura API per testare l'invocazione della REST API per il tuo nome di dominio personalizzato.
  2. Per identificare la causa degli errori, visualizza gli eventi del log della REST API in CloudWatch.
  3. Dopo aver identificato e risolto l'errore, reindirizza la mappatura dell'API alla tua API HTTP.

Verifica che la risorsa richiesta esista nella definizione dell'API

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Assicurati inoltre di utilizzare la versione più recente di AWS CLI.

Utilizza la console API Gateway o AWS CLI per verificare le configurazioni seguenti:

  • Hai distribuito l'API 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 riesci a riprodurre l'errore, usa il comando curl -v per ottenere maggiori dettagli tra il client e l'API:

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

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. Se l'intestazione non è inclusa o non è corretta, aggiorna l'intestazione della richiesta.

Verifica che l'impostazione DNS sugli endpoint Amazon VPC di interfaccia sia corretta

**Nota:**le attività seguenti si applicano alle API invocate da un Amazon VPC che ha solo un endpoint VPC di interfaccia.

Verifica che il DNS dell'endpoint di interfaccia sia impostato correttamente in base al tipo di API che utilizzi.

Per invocare un'API regionale dall'interno di un Amazon VPC, disattiva i nomi DNS privati sull'endpoint di interfaccia. Un DNS pubblico potrà così risolvere il nome host dell'endpoint. Per ulteriori informazioni, consulta Crea un'API privata.

Per utilizzare il nome DNS privato dell'API per invocare un'API privata dall'interno di un Amazon VPC, attiva i nomi DNS privati sull'endpoint. Le risorse della sottorete locale di Amazon VPC potranno così risolvere il nome host dell'endpoint di interfaccia.

Nota: se utilizzi una delle opzioni seguenti per invocare l'API privata, non è necessario configurare il nome DNS pubblico dell'API privata o un alias Amazon Route 53.

Rivedi la policy delle risorse dell'API

Rivedi la policy delle risorse della tua API per verificare le configurazioni seguenti:

Rivedi i messaggi di richiesta e risposta HTTP

Riproduci l'errore in un browser web. Utilizza gli strumenti di rete del browser per acquisire i messaggi di richiesta e risposta HTTP e analizzali per trovare dove si è verificato l'errore.

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

Informazioni correlate

Errori comuni

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

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

Come faccio ad attivare i log di CloudWatch per la risoluzione dei problemi relativi alla mia REST API di API Gateway o alla mia API WebSocket?

Progetto Curl sul sito web di curl