Come posso risolvere gli errori "HTTP 403 Forbidden" quando utilizzo un Sistema di autorizzazione Lambda con una REST API di Gateway API?
Dopo aver creato un Sistema di autorizzazione AWS Lambda per la mia REST API di Gateway Amazon API, ricevo errori "403 Forbidden" per le chiamate API.
Breve descrizione
Nota: questa soluzione risolve gli errori 403 correlati ai Sistemi di autorizzazione Lambda configurati solo per una REST API. Per informazioni sulla risoluzione di altri tipi di errori 403, consulta Come posso risolvere gli errori HTTP 403 di API Gateway?
Gli errori "403 Forbidden" possono verificarsi per i seguenti motivi:
- Il documento di policy AWS Identity and Access Management (AWS IAM) restituito dalla funzione del Sistema di autorizzazione Lambda nega esplicitamente l'accesso al chiamante.
- Il documento di policy IAM restituito dalla funzione del Sistema di autorizzazione Lambda non consente o nega implicitamente l'accesso al chiamante. La policy delle risorse collegata all'API inoltre non consente o nega implicitamente l'accesso al chiamante.
- All’API è collegata una policy delle risorse che nega esplicitamente l'accesso al chiamante.
Se la chiamata API ha un token o un'di identità mancante, nulla o non convalidata, ricevi un errore "401 Unauthorized". Per ulteriori informazioni, consulta Perché ricevo errori 401 di autorizzazione negata di Gateway API dopo aver creato un Sistema di autorizzazione Lambda?
Risoluzione
Verifica la causa dell'errore
Se non l'hai già fatto, attiva Amazon CloudWatch Logs per la REST API di Gateway API. Se modifichi la configurazione del Sistema di autorizzazione, ridistribuisci l'API.
Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Analizza il messaggio di log degli errori
Nella risposta di Gateway API, cerca un messaggio di log degli errori simile agli esempi seguenti.
Esempio di messaggio di log degli errori per funzioni del Sistema di autorizzazione Lambda che restituiscono un documento di policy IAM con un diniego esplicito:
{ "message": "User is not authorized to access this resource with an explicit deny"}
Esempio di messaggio di log degli errori per REST API con una policy delle risorse collegata che nega implicitamente l'accesso al chiamante:
{ "message": "User is not authorized to access this resource"}
Esempio di messaggio di log degli errori per REST API con una policy delle risorse collegata che nega esplicitamente l'accesso al chiamante:
{ "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny"}
Nota: per ulteriori informazioni sulle API di Gateway API controllate da una policy IAM, consulta Tabelle dei risultati della valutazione delle policy.
Visualizza i log di Gateway API
Per esaminare il flusso di lavoro di autorizzazione, visualizza i log di esecuzione di Gateway API in CloudWatch Logs. Annota l'output del Sistema di autorizzazione Lambda e l'esito della valutazione della policy delle risorse di Gateway API. Cerca un messaggio di log degli errori simile agli esempi seguenti.
Esempio di messaggio di log degli errori per un token richiesto mancante o non corrispondente alla convalida del token:
Extended Request Id: EXAMPLEabcIdGxzR=Unauthorized request: request-id
Nota: il valore Extended Request Id nei log è diverso perché viene generato casualmente.
Esempio di messaggio di log degli errori per un Sistema di autorizzazione Lambda che restituisce una policy che nega l'accesso:
Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/lambda-authorizer-arn/invocationsAuthorizer result body before parsing: { "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "resource-arn" } ] } } Using valid authorizer policy for principal: principal Successfully completed authorizer execution The client is not authorized to perform this operation.
Nota: la policy restituita dipende dal Sistema di autorizzazione Lambda utilizzato. Se il resource-arn della policy restituita non include la risorsa richiedente, la policy nega implicitamente le richieste.
Esempio di messaggio di log degli errori per una policy delle risorse di Gateway API che nega la richiesta:
Extended Request Id: EXAMPLE1ABdGeZB=ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: api-resource-arn with an explicit deny: request-id
Risolvi gli errori "not authorized to access this resource" del Sistema di autorizzazione Lambda
Potresti ricevere errori "not authorized to access this resource" a intermittenza a causa della memorizzazione nella cache della policy. Per verificare se l'opzione Memorizzazione nella cache dell'autorizzazione è attivata, controlla la configurazione del Sistema di autorizzazione Lambda nella console Gateway API. Esegui una di queste operazioni:
- Per un test singolo, esegui il comando AWS CLI flush-stage-authorizers-cache. Una volta svuotate le voci della cache del Sistema di autorizzazione, chiama nuovamente l’API.
- Disattiva la memorizzazione nella cache della policy, ridistribuisci l'API per confermare le modifiche, quindi chiama nuovamente l'API.
Nota: se la memorizzazione nella cache delle policy è disattivata per un Sistema di autorizzazione basato su parametri di richiesta, Gateway API non convalida le chiamate all'API prima di invocare la funzione del Sistema di autorizzazione Lambda. - Per modificare la chiave di cache del Sistema di autorizzazione, aggiorna il nome dell'intestazione specificato in Token Source (per i Sistemi di autorizzazione basati su token) o Identity Sources (per i Sistemi di autorizzazione basati su parametri di richiesta). Ridistribuisci l’API per confermare le modifiche. Quindi chiama nuovamente l’API utilizzando l'intestazione del token o le origini di identità appena configurate.
Per determinare perché il Sistema di autorizzazione nega esplicitamente l'accesso al chiamante, consulta il codice della funzione del Sistema di autorizzazione Lambda. Se stabilisci che il problema è dovuto alla memorizzazione nella cache, aggiorna il codice per consentire l'accesso al chiamante.
Risolvi gli errori "not authorized to perform: execute-api:Invoke"
Esamina la policy delle risorse dell’API per determinare se non è valida o se nega esplicitamente l'accesso alle chiamate. Puoi visualizzare i log di esecuzione dell'API per ottenere l’output della risposta della policy delle risorse. Per ulteriori informazioni, consulta Panoramica della sintassi delle policy di accesso per Amazon API Gateway e Sistema di autorizzazione Lambda e policy delle risorse.
Informazioni correlate
- Lingua
- Italiano
Video correlati

