Wie behebe ich die Fehler „Invalid permissions on Lambda function“ aus API Gateway-REST-APIs?
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:
- Fügen Sie der REST-API mithilfe einer der in diesem Artikel beschriebenen Methoden eine ressourcenbasierte Lambda-Aufrufberechtigung hinzu.
- Konfigurieren Sie eine Ausführungsrolle für AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement), 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 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:
- Öffnen Sie die API-Gateway-Konsole.
- Wählen Sie im Bereich APIs den Namen Ihrer REST-API aus.
- Wählen Sie im Bereich Ressourcen die konfigurierte HTTP-Methode aus.
- Wählen Sie im Bereich Methodenausführung die Option Integrationsanforderung aus.
- Wählen Sie für Integrationstyp die Option Lambda-Funktion.
- Erweitern Sie die Dropdown-Liste Lambda-Region. Wählen Sie dann die AWS-Region aus, in der sich Ihre Lambda-Funktion befindet.
- Wählen Sie die Dropdown-Liste Lambda-Funktion. Wählen Sie dann den Namen Ihrer Lambda-Funktion.
- 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:
- 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.
- Öffnen Sie die API-Gateway-Konsole.
- Wählen Sie im Bereich APIs den Namen Ihrer REST-API aus.
- Wählen Sie im Bereich Genehmiger den konfigurierten Lambda Genehmiger aus. Wählen Sie dann Bearbeiten.
- Geben Sie als Lambda-Aufrufrolle den ARN der IAM-Rolle ein, den Sie in die Zwischenablage kopiert haben.
- 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?
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 7 Monaten
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Monaten