Come posso risolvere i problemi relativi agli errori di autorizzazione delle API HTTP di Gateway API con un'integrazione Lambda o un sistema di autorizzazione Lambda?

4 minuti di lettura
0

Quando provo a richiamare la mia funzione AWS Lambda con un'API HTTP di Gateway API, ricevo un messaggio "Internal Server Error". Nei miei File di log Amazon CloudWatch, vedo un errore "doesn't have permissions to call the integration" o "doesn't have permissions to call the authorizer".

Breve descrizione

Se un’API HTTP di Gateway API tenta di richiamare una funzione Lambda senza l’autorizzazione di chiamata Lambda, Gateway API restituisce il messaggio "Internal Server Error". Se hai attivato la Registrazione CloudWatch per la tua API HTTP, Gateway API registra anche uno dei seguenti messaggi di errore nei tuoi log di accesso:

  • Per le API HTTP con integrazione Lambda: “integrationError”: “The IAM role configured on the integration or API Gateway doesn’t have permissions to call the integration. Check the permissions and try again”.
  • Per le API HTTP con un autorizzatore Lambda: “authorizerError”: “The IAM role configured on the authorizer or API Gateway doesn’t have permissions to call the authorizer. Check the permissions and try again”.

Per risolvere questi errori, esegui una delle seguenti azioni:

Usa la console Gateway API o l’interfaccia della linea di comando AWS (AWS CLI) per aggiungere un’autorizzazione di chiamata Lambda basata sulle risorse alla tua API HTTP.

-oppure-

Configura un ruolo di esecuzione di AWS IAM ( Identity and Access Management) che conceda alla tua API HTTP l’autorizzazione a richiamare la tua funzione. Per ulteriori informazioni, consulta la pagina Modello di autorizzazione Gateway API per invocare un’API.

Per ulteriori informazioni sulla risoluzione degli errori durante l’utilizzo delle integrazioni Lambda con le API HTTP, consulta Risoluzione dei problemi relativi alle integrazioni Lambda di API HTTP.

Risoluzione

**Nota:**Se ricevi messaggi di errore durante l’esecuzione di comandi AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Utilizzo della console Gateway API per aggiungere l’autorizzazione di chiamata Lambda a un’API HTTP con un’integrazione Lambda

  1. Apri la console Gateway API.
  2. Nel pannello API, scegli il nome della tua API HTTP.
  3. Nel pannello di navigazione a sinistra, scegli Integrazioni.
  4. Scegli Gestisci l’integrazione.
  5. Trova il nome della tua integrazione Lambda, quindi scegli il pulsante Modifica accanto al nome della tua integrazione Lambda.
  6. Per le Autorizzazioni di chiamata, scegli Concedi a Gateway API l’autorizzazione per richiamare la tua funzione Lambda.
    Oppure fornisci l’ARN del ruolo IAM che Gateway API può utilizzare per richiamare la funzione Lambda.
  7. Scegli Salva, quindi scegli Implementa l’API per aggiungere l’autorizzazione di chiamata Lambda alla tua API.

Utilizzo di AWS CLI per aggiungere l’autorizzazione di chiamata Lambda a un’API HTTP con un’integrazione Lambda

Esegui il seguente comando AWS CLI add-permission:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/*/$METHOD/$RESOURCE" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction

**Nota:**Sostituisci il valore di function-name con l’ARN della tua funzione Lambda. Sostituisci il valore di source-arn con l’ARN di origine della tua API. Sostituisci il valore di statement-id con un identificatore di dichiarazione che differenzi la dichiarazione dalle altre nella stessa policy.

Utilizzo della console Gateway API per aggiungere l’autorizzazione di chiamata Lambda a un’API HTTP con un sistema di autorizzazione Lambda

  1. Apri la console Gateway API.
  2. Nel pannello API, scegli il nome della tua API HTTP.
  3. Nel pannello di navigazione a sinistra, scegli Autorizzazione.
  4. Scegli Gestisci autorizzazione.
  5. Trova il nome del tuo sistema di autorizzazione Lambda, quindi scegli il pulsante Modifica accanto al nome.
  6. Per le Autorizzazioni di chiamata, scegli Concedi automaticamente a Gateway API l’autorizzazione per richiamare la tua funzione Lambda.
    Oppure fornisci l’ARN del ruolo IAM che Gateway API può utilizzare per richiamare la funzione Lambda.
  7. Scegli Salva, quindi scegli Implementa l’API per aggiungere l’autorizzazione di chiamata Lambda alla tua API.

Utilizzo di AWS CLI per aggiungere l’autorizzazione di chiamata Lambda a un’API HTTP con un sistema di autorizzazione Lambda

Esegui il seguente comando AWS CLI add-permission:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--source-arn "arn:aws:execute-api:$API_GW_REGION:$YOUR_ACCOUNT:$API_GW_ID/authorizers/$AUTHORIZER_ID" \
--principal apigateway.amazonaws.com \
--statement-id $STATEMENT_ID \
--action lambda:InvokeFunction

**Nota:**Sostituisci il valore di function-name con l’ARN della tua funzione Lambda. Sostituisci il valore di source-arn con l’ARN di origine della tua API. Sostituisci il valore di statement-id con un identificatore di dichiarazione che differenzi la dichiarazione dalle altre nella stessa policy.