Direkt zum Inhalt

Wie behebe ich die Fehler „Invalid permissions on Lambda function“, die ich von API-Gateway-REST-APIs erhalte?

Lesedauer: 4 Minute
0

Ich möchte den Fehler „Invalid permissions on Lambda function“ beheben, wenn ich meine AWS-Lambda-Funktion von einer Amazon-API-Gateway-REST-API aus aufrufe.

Kurzbeschreibung

Wenn deine API-Gateway-REST-API deine Lambda-Funktion ohne Genehmigung aufruft, erhältst du den Fehler „Invalid permissions on Lambda function“.

Wenn du die CloudWatch-Protokollierung für deine REST-API einrichtest, protokolliert API Gateway auch die folgende Fehlermeldung für REST-APIs mit einer Lambda-Integration:

„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 (Ungültige Berechtigungen für die Lambda-Funktion)
Verfahren abgeschlossen mit Status: 500“.

Für REST-APIs mit einem Lambda-Genehmiger erhältst du die folgende Fehlermeldung:

„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 (Ungültige Berechtigungen für die Lambda-Funktion)
Execution failed due to configuration error: Authorizer error“.

Um dieses Problem zu beheben, musst du deiner REST-API die Lambda-Berechtigung Aufrufen hinzufügen.

Hinweis: Wenn du die Fehlermeldung „401 Unauthorized“ erhältst, siehe Warum erhalte ich den API-Gateway-Fehler „401 Unauthorized“, nachdem ich einen Lambda-Genehmiger erstellt habe?

Lösung

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Einer REST-API mit einer Lambda-Integration die Lambda-Berechtigung „Aufrufen“ hinzufügen

Du kannst entweder die API Gateway-Konsole, eine AWS-CloudFormation-Vorlage oder die AWS-CLI verwenden, um die Berechtigung Aufrufen hinzuzufügen.

Hinweis: Du kannst auch die Fehlermeldung „Execution failed due to configuration error: Invalid permissions on Lambda function Method completed with status: 500“ in den folgenden Szenarien erhalten:

  • Du versuchst, das API-Gateway von der API-Gateway-Testkonsole aus aufzurufen.
  • Du rufst das API-Gateway von einer Phase aus auf, die sich von der Stufe unterscheidet, die du in der Aufruf-URL benannt hast.

Um dieses Problem zu vermeiden, verwende einen Platzhalter (*) für den Schrittnamen in deiner CloudFormation-Vorlage und deinem AWS-CLI-Befehl.

API-Gateway-Konsole verwenden

Führe die folgenden Schritte aus:

  1. Öffne die API Gateway-Konsole.
  2. Wähle im Navigationsbereich APIs und dann deine REST-API aus.
  3. Wähle Ressourcen und dann die HTTP-Methode aus.
  4. Wähle Methodenausführung und dann Integrationsanforderung aus.
  5. Wähle als Integrationstyp die Option Lambda-Funktion aus.
  6. Erweitere die Dropdown-Liste Lambda-Region und wähle dann die AWS-Region aus, in der sich deine Lambda-Funktion befindet.
  7. Wähle die Dropdown-Lliste der Lambda-Funktion und dann deine Lambda-Funktion aus.
  8. Wähle Speichern aus.
  9. Wähle API bereitstellen aus.

Eine CloudFormation-Vorlage verwenden

Füge der CloudFormation-Vorlage den folgenden Codeausschnitt hinzu:

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"

Hinweis: Ersetze FunctionName durch den Namen deiner Lambda-Funktion, SourceArn durch deinen API-Amazon-Ressourcennamen (ARN) und example-api-id durch deine API-ID.

Weitere Informationen findest du unter CloudFormation-Vorlagen-Snippets.

Verwendung der AWS CLI

Führe den folgenden add-permission-Befehl aus:

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

**Hinweis:**Ersetze FUNCITON_NAME durch den Namen deiner Lambda-Funktion, den Beispielquellen-ARN durch deinen API-ARN und STATEMENT_ID durch eine Statement-ID, die die Anweisung eindeutig identifiziert.

Führe den folgenden Befehl aus, um die Berechtigung nur für eine bestimmte Phase zu erteilen:

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

Hinweis: Ersetze den Beispielquellen-ARN durch deinen API-ARN und STAGE_NAME durch deinen Stufennamen.

Einer REST-API mit einem Lambda-Genehmiger eine Lambda-Aufrufberechtigung hinzufügen

Du kannst die API-Gateway-Konsole, eine CloudFormation-Vorlage oder einen AWS-CLI-Befehl verwenden, um die Berechtigung Aufrufen hinzuzufügen.

API-Gateway-Konsole verwenden

Führe die folgenden Schritte aus:

  1. Erstelle eine IAM-Rolle für API-Gateway und erstelle dann eine Richtlinie, die die Aktion lambda:InvokeFunction zulässt.
    Hinweis: Notiere dir den ARN der IAM-Rolle, der in einem späteren Schritt verwendet werden soll. Eine Beispielrichtlinie findest du unter API-Gateway-Berechtigungsmodell für den Aufruf einer API.
  2. Öffne die API Gateway-Konsole.
  3. Wähle im Navigationsbereich APIs und dann deine REST-API aus.
  4. Wähle Genehmiger und dann den Lambda-Genehmiger aus.
  5. Wähle Bearbeiten aus.
  6. Gib für Lambda Invoke Role den ARN der IAM-Rolle ein.
  7. Wähle Speichern aus.
  8. Wähle API bereitstellen aus.

Eine CloudFormation-Vorlage verwenden

Füge der CloudFormation-Vorlage den folgenden Code-Snippet hinzu:

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"

Hinweis: Ersetze FunctionName durch den Namen deiner Lambda-Funktion, example-api-id durch deine API-ID und example-auth-id durch deine Lambda-Genehmiger-ID.

Verwendung der AWS CLI

Führe den folgenden add-permission-Befehl aus:

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

**Hinweis:**Ersetze FUNCITON_NAME durch den Namen deiner Lambda-Funktion, den Beispielquellen-ARN durch deinen API-ARN und STATEMENT_ID durch eine Statement-ID, die die Anweisung eindeutig identifiziert.

Ähnliche Informationen

Ressourcenbasierte IAM-Richtlinien in Lambda anzeigen

Wie richte ich die Zugriffsprotokollierung für API Gateway ein?