Come posso risolvere gli errori "Invalid permissions on Lambda function" dalle REST API di API Gateway?
Quando invoco la mia funzione AWS Lambda da una REST API di Gateway Amazon API, ricevo l'errore "Invalid permissions on Lambda function".
Breve descrizione
Se hai una REST API di API Gateway che invoca una funzione Lambda senza l'autorizzazione di invocazione Lambda, API Gateway restituisce l'errore "Invalid permissions on Lambda function".
Se configuri la registrazione CloudWatch per la REST API, API Gateway registra anche uno dei messaggi di errore seguenti:
- Esempio di messaggio di errore di CloudWatch per le REST API con un'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" - Esempio di messaggio di errore di CloudWatch per le REST API con un sistema di autorizzazione 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
Execution failed due to configuration error: Authorizer error"
Risoluzione
Per risolvere questi errori, esegui una delle operazioni seguenti:
- Aggiungi alla REST API un'autorizzazione di invocazione Lambda basata sulle risorse utilizzando uno dei metodi descritti in questo articolo.
- Configura un ruolo di esecuzione di AWS Identity and Access Management (IAM) che conceda alla REST API l'autorizzazione a invocare la funzione.
Per ulteriori informazioni, consulta API Gateway permissions model for invoking an API.
Nota: se ricevi un errore 401 Autorizzazione negata, segui le istruzioni in Perché ricevo errori 401 di autorizzazione negata di API Gateway dopo aver creato un sistema di autorizzazione Lambda?
Risolvi gli errori di integrazione Lambda
Aggiungi l'autorizzazione di invocazione Lambda a una REST API con un'integrazione Lambda utilizzando la console API Gateway
Completa i passaggi seguenti:
- Apri la console API Gateway.
- Nel pannello API seleziona il nome della REST API.
- Nel pannello Risorse seleziona il metodo HTTP configurato.
- Nel pannello Esecuzione metodo seleziona Richiesta di integrazione.
- In Tipo di integrazione seleziona Funzione Lambda.
- Espandi l'elenco a discesa Regione Lambda. Quindi scegli la regione AWS in cui si trova la funzione Lambda.
- Seleziona l'elenco a discesa Funzione Lambda. Quindi scegli il nome della funzione Lambda.
- Fai clic su Salva. Quindi seleziona Distribuisci l'API per aggiungere all'API l'autorizzazione di invocazione Lambda.
Aggiungi l'autorizzazione di invocazione Lambda a una REST API con un'integrazione Lambda utilizzando 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: nel modello precedente sostituisci quanto segue:
Il valore di FunctionName con il nome della funzione Lambda
Il valore di SourceArn con il nome della risorsa Amazon (ARN) di origine dell'API
All'interno del valore di sourceArn, example-api-id con il tuo apiID
Per ulteriori informazioni su come dichiarare le varie parti del modello CloudFormation, consulta Template snippets.
Aggiungi l'autorizzazione di invocazione Lambda alla REST API con un'integrazione Lambda utilizzando AWS CLI
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Esegui il comando di AWS CLI add-permission seguente:
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 quanto segue nel comando precedente:
Il valore di function-name con il nome della funzione Lambda
Il valore di source-arn con l'ARN di origine dell'API
Il valore di statement-id con un identificatore di istruzione che identifichi in modo univoco l'istruzione
Risolvi gli errori del sistema di autorizzazione Lambda
Aggiungi l'autorizzazione di invocazione Lambda a una REST API con un sistema di autorizzazione Lambda tramite la console API Gateway
Completa i passaggi seguenti:
- Crea un ruolo IAM per API Gateway che consenta l'azione lambda:InvokeFunction. Quindi copia l'ARN del ruolo IAM negli appunti.
- Apri la console API Gateway.
- Nel pannello API seleziona il nome della REST API.
- Nel pannello Autorizzazioni seleziona il sistema di autorizzazione Lambda configurato. Quindi fai clic su Modifica.
- In Ruolo di richiamo Lambda inserisci l'ARN del ruolo IAM che hai copiato negli appunti.
- Fai clic su Salva. Quindi seleziona Distribuisci l'API.
Aggiungi l'autorizzazione di invocazione Lambda a una REST API con un sistema di autorizzazione Lambda utilizzando 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: nel modello precedente sostituisci quanto segue:
Il valore di FunctionName con il nome della funzione Lambda
All'interno del valore di sourceArn, example-api-id con il tuo apiID
All'interno del valore di sourceARN, example-auth-id con l'authorizerId del tuo sistema di autorizzazione Lambda
Aggiungi l'autorizzazione di invocazione Lambda a una REST API con un sistema di autorizzazione Lambda tramite AWS CLI
Esegui il comando di AWS CLI add-permission seguente:
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 quanto segue nel comando precedente:
Il valore di function-name con il nome della funzione Lambda
Il valore di source-arn con l'ARN di origine dell'API
Il valore di statement-id con un identificatore di istruzione che identifichi in modo univoco l'istruzione
Informazioni correlate
Working with resource-based IAM policies in Lambda
Come posso configurare la registrazione degli accessi di API Gateway?
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 8 mesi fa
- AWS UFFICIALEAggiornata 3 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa