Salta al contenuto

Come posso risolvere gli errori "Invalid permissions on Lambda function" che ricevo dalle REST API di Gateway API?

5 minuti di lettura
0

Desidero risolvere l'errore "Invalid permissions on Lambda function" quando invoco la mia funzione AWS Lambda da una REST API di Gateway Amazon API.

Breve descrizione

Quando la REST API di Gateway API invoca la funzione Lambda senza autorizzazione, viene visualizzato l'errore "Invalid permissions on Lambda function".

Se configuri la registrazione di CloudWatch per la REST API, Gateway API registra anche il seguente messaggio di errore per le REST API con integrazione Lambda:

"Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Method completed with status: 500".

Per le REST API con un sistema di autorizzazione Lambda, viene visualizzato il seguente messaggio di errore:

"Sending request to https://lambda.region.amazonaws.com/2015-03-31/functions/arn:aws:lambda:region:############:function:example-function/invocations
Execution failed due to configuration error: Invalid permissions on Lambda function
Execution failed due to configuration error: Authorizer error".

Per risolvere il problema, devi aggiungere l'autorizzazione Lambda Invoke alla REST API.

Nota: se ricevi un errore «401 Unauthorized», consulta Perché ricevo errori 401 di autorizzazione negata di Gateway API dopo aver creato un sistema di autorizzazione Lambda?

Risoluzione

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.

Aggiungi un'autorizzazione Lambda Invoke a una REST API con un'integrazione Lambda

Puoi utilizzare la console Gateway API, un modello AWS CloudFormation o AWS CLI per aggiungere l'autorizzazione Invoke.

Nota: puoi anche ricevere il messaggio di errore "Execution failed due to configuration error: Invalid permissions on Lambda function Method completed with status: 500" nei seguenti casi:

  • Tenti di invocare Gateway API dalla console di test Gateway API.
  • Invochi Gateway API da una fase diversa da quella indicata nell'URL di invocazione.

Per evitare il problema, utilizza un carattere jolly (\ *) per il nome della fase nel modello CloudFormation e nel comando AWS CLI.

Utilizza la console Gateway API

Completa i seguenti passaggi:

  1. Apri la console Gateway API.
  2. Dal pannello di navigazione, scegli API, quindi scegli la REST API.
  3. Scegli Risorse, quindi seleziona il metodo HTTP.
  4. Scegli Esecuzione metodo, quindi seleziona Richiesta di integrazione.
  5. In Tipo di integrazione seleziona Funzione Lambda.
  6. Espandi l'elenco a discesa Regione Lambda, quindi scegli la Regione AWS in cui si trova la funzione Lambda.
  7. Scegli l'elenco a discesa Funzione Lambda, quindi seleziona la funzione Lambda.
  8. Scegli Salva.
  9. Scegli Deploy the API (Distribuisci l'API).

Utilizza un modello CloudFormation

Aggiungi il frammento di codice seguente al modello CloudFormation:

SampleApiPermission:    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref ExampleLambdaFunction
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:{AWS::Region}:{AWS::AccountId}:example-api-id/*/example-method/example-resource"

Nota: sostituisci FunctionName con il nome della tua funzione Lambda, SourceArn con il nome della risorsa Amazon (ARN) della tua API e example-api-id con l'ID della tua API.

Per ulteriori informazioni, consulta Frammenti del modello CloudFormation.

Utilizza AWS CLI

Esegui questo comando add-permission:

aws lambda add-permission   \--function-name "FUNCTION_NAME"   \
--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 FUNCTION_NAME con il nome della tua funzione Lambda, l'esempio di ARN di origine con l'ARN della tua API e STATEMENT_ID con un identificatore di istruzione che identifica in modo univoco l'istruzione.

Per fornire l'autorizzazione solo per una fase specifica, esegui questo comando:

--source-arn "arn:aws:execute-api:API_GW_REGION:YOUR_ACCOUNT:API_GW_ID/STAGE_NAME/METHOD/RESOURCE"

Nota: sostituisci l'esempio di ARN di origine con l'ARN della tua API e STAGE_NAME con il nome della tua fase.

Aggiungi un'autorizzazione Lambda Invoke a una REST API con un sistema di autorizzazione Lambda

Puoi utilizzare la console Gateway API, un modello CloudFormation o un comando AWS CLI per aggiungere l'autorizzazione Invoke.

Utilizza la console Gateway API

Completa i seguenti passaggi:

  1. Crea un ruolo IAM per Gateway API, quindi crea una policy che consenta l'azione lambda:InvokeFunction.
    Nota: prendi nota dell'ARN del ruolo IAM da utilizzare in una fase successiva. Per un esempio di policy, consulta Modello di autorizzazione Gateway API per invocare un'API.
  2. Apri la console Gateway API.
  3. Dal pannello di navigazione, scegli API, quindi scegli la REST API.
  4. Scegli Sistemi di autorizzazione, quindi seleziona il sistema di autorizzazione Lambda.
  5. Scegli Modifica.
  6. Per Ruolo di richiamo Lambda, inserisci l'ARN del ruolo IAM.
  7. Scegli Salva.
  8. Scegli Deploy the API (Distribuisci l'API).

Utilizza un modello CloudFormation

Aggiungi il frammento di codice seguente al modello CloudFormation:

SampleApiAuthPermission:    Type: AWS::Lambda::Permission
    Properties:
      Action: "lambda:InvokeFunction"
      FunctionName: !Ref ExampleLambdaFunction
      Principal: "apigateway.amazonaws.com"
      SourceArn: !Sub "arn:aws:execute-api:{AWS::Region}:{AWS::AccountId}:example-api-id/authorizers/example-auth-id"

Nota: sostituisci FunctionName con il nome della tua funzione Lambda, example-api-id con l'ID della tua API e example-auth-id con l'ID del tuo sistema di autorizzazione Lambda.

Utilizza AWS CLI

Esegui questo comando add-permission:

aws lambda add-permission   \--function-name "FUNCTION_NAME"   \
--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 FUNCTION_NAME con il nome della tua funzione Lambda, l'esempio di ARN di origine con l'ARN della tua API e STATEMENT_ID con un identificatore di istruzione che identifica in modo univoco l'istruzione.

Informazioni correlate

Visualizzazione delle policy IAM basate sulle risorse in Lambda

Come posso configurare la registrazione degli accessi di Gateway API?