Wie behebe ich die Fehler „Invalid permissions on Lambda function“ (Ungültige Berechtigungen für die Lambda-Funktion) von API Gateway-REST-APIs?
Wenn ich meine AWS Lambda-Funktion mithilfe einer Amazon API Gateway-REST-API aufrufe, erhalte ich die Fehlermeldung „Invalid permissions on Lambda function“ (Ungültige Berechtigungen für die Lambda-Funktion). Was verursacht den Fehler und wie behebe ich ihn?
Kurzbeschreibung
Wenn Ihre API Gateway-REST-API versucht, Ihre Lambda-Funktion ohne Lambda-Aufrufberechtigung aufzurufen, gibt API Gateway den folgenden Fehler zurück: „Invalid permissions on Lambda function“ (Ungültige Berechtigungen für die Lambda-Funktion)
Wenn Sie die CloudWatch-Protokollierung für Ihre REST-API einrichten, protokolliert API Gateway auch eine der folgenden Fehlermeldungen:
Beispiel für eine CloudWatch-Fehlermeldung für REST-APIs mit einer Lambda-Integration
„Sending request to https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/invocations (Sende Anforderung an https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xx:function:xxx/invocations
Execution failed due to configuration error (Die Ausführung ist aufgrund eines Konfigurationsfehlers fehlgeschlagen): Invalid permissions on Lambda function (Ungültige Berechtigungen für die Lambda-Funktion)
Method completed with status (Methode abgeschlossen mit Status): 500“
Beispiel für eine CloudWatch-Fehlermeldung für REST-APIs mit einem Lambda Authorizer
„Sending request to https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/invocations (Sende Anforderung an https://lambda.xx.amazonaws.com/2015-03-31/functions/arn:aws:lambda:xx:xxx:function:xx/invocations)
Execution failed due to configuration error (Die Ausführung ist aufgrund eines Konfigurationsfehlers fehlgeschlagen): Invalid permissions on Lambda function (Ungültige Berechtigungen für die Lambda-Funktion)
Execution failed due to configuration error (Die Ausführung ist aufgrund eines Konfigurationsfehlers fehlgeschlagen): Authorizer error (Autorisierungsfehler)“
Lösung
Gehen Sie wie folgt vor, um diese Fehler zu beheben:
Fügen Sie Ihrer REST-API mithilfe einer der in diesem Artikel beschriebenen Methoden eine ressourcenbasierte Lambda-Aufrufberechtigung hinzu.
- oder -
Konfigurieren Sie eine Ausführungsrolle für AWS Identity and Access Management (IAM), die Ihrer REST-API die Berechtigung zum Aufrufen Ihrer Funktion erteilt.
Weitere Informationen finden Sie unter API Gateway-Berechtigungsmodell für den Aufruf einer API.
Hinweis:
- Wenn Sie die Fehlermeldung „401 Unauthorized“ erhalten, folgen Sie den Anweisungen unter Warum wird mir nach dem Erstellen eines Lambda Authorizers ein API-Gateway-Fehler „401 Unauthorized“ angezeigt?
- Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.
So fügen Sie einer REST-API mit einer Lambda-Integration mithilfe der API-Gateway-Konsole eine Lambda-Aufrufberechtigung hinzu
1. Wählen Sie in der API Gateway-Konsole im Bereich APIs den Namen Ihrer REST-API aus.
2. Wählen Sie im Bereich Resources (Ressourcen) die konfigurierte HTTP-Methode aus.
3. Wählen Sie im Bereich Method Execution (Methodenausführung) die Option Integration Request (Integrationsanforderung) aus.
4. Wählen Sie für Integration type (Integrationstyp) die Option Lambda Function (Lambda-Funktion).
5. Erweitern Sie die Dropdown-Liste Lambda Region. Wählen Sie dann die AWS-Region aus, in der sich Ihre Lambda-Funktion befindet.
6. Wählen Sie die Dropdown-Liste Lambda Function (Lambda-Funktion). Wählen Sie dann den Namen Ihrer Lambda-Funktion.
7. Es wird eine Eingabeaufforderung angezeigt, in der Sie der Lambda-Funktion eine Berechtigung hinzufügen können. Wählen Sie OK.
8. Wählen Sie Save (Speichern). Wählen Sie dann Deploy the API (API bereitstellen), um Ihrer API die Lambda-Aufrufberechtigung hinzuzufügen.
So fügen Sie einer REST-API mit einer Lambda-Integration mithilfe einer CloudFormation-Vorlage eine Lambda-Aufrufberechtigung hinzu
Fügen Sie Ihrer CloudFormation-Vorlage den folgenden Codeausschnitt hinzu:
Wichtig: Ersetzen Sie <api-id> mit Ihrer apiID. Ersetzen Sie den FunctionName-Wert durch den Namen Ihrer Lambda-Funktion. Ersetzen Sie den SourceArn-Wert durch den Amazon-Ressourcennamen (ARN) der Quelle Ihrer API.
SampleApiPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/*/<method>/<resource>"
Weitere Informationen zur Deklaration verschiedener CloudFormation-Vorlagenteile finden Sie unter Vorlagenfragmente.
So fügen Sie einer REST-API mit einer Lambda-Integration mithilfe der AWS-CLI eine Lambda-Aufrufberechtigung hinzu
Führen Sie den folgenden AWS-CLI-Befehl add-permission aus:
Wichtig: Ersetzen Sie den Wert function-name durch den Namen Ihrer Lambda-Funktion. Ersetzen Sie den Wert source-arn durch den Quell-ARN Ihrer API. Ersetzen Sie den statement-id-Wert durch einen Statement-Identifier, der die Anweisung von anderen Anweisungen in derselben Richtlinie unterscheidet.
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
So fügen Sie einer REST-API mit einem Lambda Authorizer mithilfe der API Gateway-Konsole eine Lambda-Aufrufberechtigung hinzu
1. Erstellen Sie eine IAM-Rolle für API Gateway, die die Aktion „lambda:InvokeFunction“ ermöglicht. Kopieren Sie dann die IAM-Rolle ARN in Ihre Zwischenablage.
2. Wählen Sie in der API Gateway-Konsole im Bereich APIs den Namen Ihrer REST-API aus.
3. Wählen Sie im Bereich Authorizers den konfigurierten Lambda Authorizer aus. Wählen Sie dann Edit (Bearbeiten).
4. Geben Sie für Lambda Invoke Role (Lambda-Aufrufrolle) den ARN der IAM-Rolle ein, den Sie in Ihre Zwischenablage kopiert haben.
5. Wählen Sie Save (Speichern). Wählen Sie dann Deploy the API (API bereitstellen) aus.
So fügen Sie einer REST-API mit einem Lambda Authorizer mithilfe einer CloudFormation-Vorlage eine Lambda-Aufrufberechtigung hinzu
Fügen Sie Ihrer CloudFormation-Vorlage den folgenden Codeausschnitt hinzu:
Wichtig: Ersetzen Sie <api-id> mit Ihrer apiID. Ersetzen Sie den FunctionName-Wert durch den Namen Ihrer Lambda-Funktion. Ersetzen Sie <auth-id> mit der authorizerId Ihres Lambda Authorizers.
SampleApiAuthPermission: Type: AWS::Lambda::Permission Properties: Action: "lambda:InvokeFunction" FunctionName: !Ref MyLambdaFnA1 Principal: "apigateway.amazonaws.com" SourceArn: !Sub "arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:<api-id>/authorizers/<auth-id>"
Weitere Informationen zur Deklaration verschiedener CloudFormation-Vorlagenteile finden Sie unter Vorlagenfragmente.
So fügen Sie einer REST-API mit einem Lambda Authorizer mithilfe der AWS-CLI eine Lambda-Aufrufberechtigung hinzu
Führen Sie den folgenden AWS-CLI-Befehl add-permissionaus:
Wichtig: Ersetzen Sie den Wert function-name durch den Namen Ihrer Lambda-Funktion. Ersetzen Sie den Wert source-arn durch den Quell-ARN Ihrer API. Ersetzen Sie den statement-id-Wert durch einen Statement-Identifier, der die Anweisung von anderen Anweisungen in derselben Richtlinie unterscheidet.
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
Verwandte Informationen
Verwenden ressourcenbasierter Richtlinien für Lambda
Wie kann ich die Zugriffsprotokollierung für API Gateway einrichten?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren