Wie behebe ich die Fehler „Invalid permissions on Lambda function“ (Ungültige Berechtigungen für die Lambda-Funktion) von API Gateway-REST-APIs?

Lesedauer: 5 Minute
0

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:

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?