Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

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

Lesedauer: 5 Minute
0

Wenn ich meine AWS Lambda-Funktion aus einer Amazon API Gateway-REST-API aufrufe, erhalte ich die Fehlermeldung „Invalid permissions on Lambda function“.

Kurzbeschreibung

Wenn die API-Gateway-REST-API die Lambda-Funktion ohne Lambda-Aufrufberechtigung aufruft, gibt API Gateway den Fehler „Invalid permissions on Lambda function“ zurück.

Wenn Sie die CloudWatch-Protokollierung für die 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.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)
    Method completed with status (Methode abgeschlossen mit Status): 500"
  • Beispiel für eine CloudWatch-Fehlermeldung für REST-APIs mit einem Lambda Genehmiger:
    „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 (Die Ausführung ist aufgrund eines Konfigurationsfehlers fehlgeschlagen): Authorizer error (Autorisierungsfehler)“

Lösung

Gehen Sie wie folgt vor, um diese Fehler zu beheben:

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 erhalte ich den API-Gateway-Fehler „401 Unauthorized“, nachdem ich einen Lambda-Genehmiger erstellt habe?

Lambda-Integrationsfehler beheben

Einer REST-API mit einer Lambda-Integration über die API Gateway-Konsole die Lambda-Aufrufberechtigung hinzufügen

Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die API-Gateway-Konsole.
  2. Wählen Sie im Bereich APIs den Namen Ihrer REST-API aus.
  3. Wählen Sie im Bereich Ressourcen die konfigurierte HTTP-Methode aus.
  4. Wählen Sie im Bereich Methodenausführung die Option Integrationsanforderung aus.
  5. Wählen Sie für Integrationstyp die Option Lambda-Funktion.
  6. Erweitern Sie die Dropdown-Liste Lambda-Region. Wählen Sie dann die AWS-Region aus, in der sich Ihre Lambda-Funktion befindet.
  7. Wählen Sie die Dropdown-Liste Lambda-Funktion. Wählen Sie dann den Namen Ihrer Lambda-Funktion.
  8. Wählen Sie Speichern. Wählen Sie dann Deploy the API (API bereitstellen), um Ihrer API die Lambda-Aufrufberechtigung hinzuzufügen.

Einer REST-API mit einer Lambda-Integration über eine CloudFormation-Vorlage die Lambda-Aufrufberechtigung hinzufügen

Fügen Sie 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: Ersetzen Sie in der vorherigen Vorlage Folgendes:
Den Wert FunctionName durch den Namen Ihrer Lambda-Funktion
Den Wert SourceArn durch den Amazon-Ressourcennamen (ARN) Ihrer API
Innerhalb des Werts SourceArn, example-api-id durch Ihre apiID

Weitere Informationen zur Deklaration verschiedener CloudFormation-Vorlagenteile finden Sie unter Template snippets (Vorlagenfragmente).

Einer REST-API mit einer Lambda-Integration über die AWS CLI die Lambda-Aufrufberechtigung hinzufügen

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, finden Sie weitere Informationen unter Problembehandlung bei der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Führen Sie den folgenden AWS-CLI-Befehl add-permission 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: Ersetzen Sie im vorherigen Befehl Folgendes:
Den Wert function-name durch den Namen Ihrer Lambda-Funktion
Den Wert source-arn durch den Quell-ARN Ihrer API
Den Wert statement-id durch eine Anweisungs-ID, die die Anweisung eindeutig identifiziert

Lambda-Genehmiger-Fehler beheben

Einer REST-API mit einem Lambda-Genehmiger über die API Gateway-Konsole die Lambda-Aufrufberechtigung hinzufügen

Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie eine IAM-Rolle für API Gateway, die die Aktion lambda:InvokeFunction zulässt. Kopieren Sie dann den ARN der IAM-Rolle in die Zwischenablage.
  2. Öffnen Sie die API-Gateway-Konsole.
  3. Wählen Sie im Bereich APIs den Namen Ihrer REST-API aus.
  4. Wählen Sie im Bereich Genehmiger den konfigurierten Lambda Genehmiger aus. Wählen Sie dann Bearbeiten.
  5. Geben Sie als Lambda-Aufrufrolle den ARN der IAM-Rolle ein, den Sie in die Zwischenablage kopiert haben.
  6. Wählen Sie Speichern. Wählen Sie dann Deploy the API (API bereitstellen) aus.

Einer REST-API mit einem Lambda-Genehmiger über eine CloudFormation-Vorlage die Lambda-Aufrufberechtigung hinzufügen

Fügen Sie der CloudFormation-Vorlage den folgenden Codeausschnitt 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: Ersetzen Sie in der vorherigen Vorlage Folgendes:
Den Wert FunctionName durch den Namen Ihrer Lambda-Funktion
Innerhalb des Werts SourceArn example-api-id durch Ihre apiID
Innerhalb des Werts SourceArn example-auth-id durch die authorizerId Ihres Lambda-Genehmigers

Einer REST-API mit einem Lambda-Genehmiger über die AWS CLI die Lambda-Aufrufberechtigung hinzufügen

Führen Sie den folgenden AWS-CLI-Befehl add-permission 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: Ersetzen Sie im vorherigen Befehl Folgendes:
Den Wert function-name durch den Namen Ihrer Lambda-Funktion
Den Wert source-arn durch den ARN Ihrer API
Den Wert statement-id durch eine Anweisungs-ID, die die Anweisung eindeutig identifiziert

Ähnliche Informationen

Arbeiten mit ressourcenbasierten IAM-Richtlinien in Lambda

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