Come posso risolvere gli errori HTTP 403 Forbidden quando utilizzo un sistema di autorizzazione Lambda con una REST API di API Gateway?

6 minuti di lettura
0

Le chiamate alla REST API di Amazon API Gateway generano errori 403 Forbidden dopo che ho creato un sistema di autorizzazione AWS Lambda. Come posso risolvere questi errori?

Breve descrizione

Questo errore può verificarsi se:

Se la chiamata all’API ha un token o fonti di identità mancanti, nulle o non convalidate, viene visualizzato un errore 401 Unauthorized. Per ulteriori informazioni, consulta Perché ricevo errori 401 Unauthorized di API Gateway dopo aver creato un sistema di autorizzazione Lambda?

Nota: questo articolo illustra gli errori 403 relativi solo ai sistemi di autorizzazione Lambda configurati 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?

Risoluzione

Conferma la causa dell'errore

Nota:

1.    Esamina il messaggio di errore nella risposta di API Gateway. Cerca un messaggio di errore simile a uno dei seguenti.

Esempio di messaggio di errore per le funzioni di autorizzazione Lambda che restituiscono un documento di policy IAM con un rifiuto esplicito

{
    "message": "User is not authorized to access this resource with an explicit deny"
}

Esempio di messaggio di errore per le funzioni di autorizzazione Lambda che restituiscono un documento di policy IAM con un rifiuto implicito

{
    "message": "User is not authorized to access this resource"
}

Esempio di messaggio di errore per le REST API a cui è associata una policy delle risorse che nega implicitamente l'accesso al chiamante

{
    "message": "User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn>"
}

Esempio di messaggio di errore per le REST API a cui è collegata una policy delle risorse 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 sul comportamento che si ottiene quando l'accesso a un'API di API Gateway è controllato da una policy IAM, consulta le Tabelle dei risultati della valutazione delle policy.

2.    Visualizza i log di esecuzione di API Gateway in CloudWatch per esaminare il flusso di lavoro di autorizzazione. Esamina l'output del sistema di autorizzazione Lambda e i risultati della valutazione della policy delle risorse di API Gateway. Viene visualizzato un messaggio di errore di log simile a uno dei seguenti.

Esempio di messaggio di errore di log che si verifica quando un token richiesto manca o non corrisponde alla convalida del token

Extended Request Id: MY92nHDwwwIdGxzR=
Unauthorized request: <request-id>

Nota: l'Id richiesta estesa viene generato in modo casuale. Il valore dell’Id richiesta estesa nei log è diverso.

Esempio di messaggio di errore di log che si verifica quando un sistema di autorizzazione Lambda restituisce una policy che nega l'accesso

Sending request to https://lambda.<region>.amazonaws.com/2015-03-31/functions/<lambda-authorizer-arn>/invocations
Authorizer 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 in uso. Se il resource-arn della policy restituita non include la risorsa richiedente, la richiesta verrà negata in modo implicito.

Esempio di messaggio di errore di log che si verifica quando la policy delle risorse di API Gateway nega la richiesta

Extended Request Id: MY-BIVb4GEdGeZB=
ExplicitDenyException User: anonymous is not authorized to perform: execute-api:Invoke on resource: <api-resource-arn> with an explicit deny: <request-id>

Risoluzione degli errori "not authorized to access this resource" del sistema di autorizzazione Lambda

L’errore not authorized to access this resource potrebbe verificarsi a intermittenza a causa della memorizzazione della policy nella cache. Per verificare se Autorizzazione memorizzazione nella cache è attiva, controlla la configurazione del sistema di autorizzazione Lambda nella console API Gateway. Quindi, esegui una delle seguenti operazioni:

  • Per un test singolo, esegui il comando di AWS CLI flush-stage-authorizers-cache. Una volta svuotate le voci della cache del sistema di autorizzazione, richiama nuovamente l’API.
  • Disattiva la memorizzazione nella cache della policy, quindi richiama nuovamente l’API.
    Nota: quando disattivi la memorizzazione nella cache della policy di un sistema di autorizzazione basato su parametri di richiesta, API Gateway convalida le chiamate all'API solo dopo avere richiamato la funzione di autorizzazione Lambda.
  • Modifica la chiave di cache del sistema di autorizzazione aggiornando il nome dell'intestazione specificato in Origine token (per sistemi di autorizzazione basati su token) o Fonti di identità (per sistemi di autorizzazione basati su parametri di richiesta). Ridistribuisci l’API per confermare le modifiche. Quindi, richiama nuovamente l’API utilizzando l'intestazione del token o le fonti di identità appena configurate.

Se gli errori si verificano in modo costante, è possibile determinare perché il sistema di autorizzazione nega esplicitamente l'accesso al chiamante esaminando il codice della funzione di autorizzazione Lambda. Se risulta che il problema è causato dalla memorizzazione nella cache, puoi aggiornare il codice in modo che consenta l'accesso al chiamante. Per istruzioni, consulta Perché la mia risorsa proxy API Gateway con un sistema di autorizzazione Lambda con la memorizzazione nella cache attivata restituisce gli errori HTTP 403 "L'utente non è autorizzato ad accedere a questa risorsa"?

Risoluzione degli errori "not authorized to perform: execute-api:Invoke"

Per determinare se la policy delle risorse delle API non è valida o se nega esplicitamente l'accesso alle chiamate, esamina la policy delle risorse dell’API. Puoi visualizzare i log di esecuzione delle 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

Uso di autorizzazioni Lambda di API Gateway

Aggiornamenti a REST API che richiedono la ridistribuzione

Controllo e gestione degli accessi a REST API in API Gateway