Wie behebe ich Berechtigungsfehler von API-Gateway-HTTP-APIs mit einer Lambda-Integration oder einem Lambda-Autorisierer?

Lesedauer: 4 Minute
0

Wenn ich versuche, meine AWS-Lambda-Funktion mit einer API-Gateway-HTTP-API aufzurufen, erhalte ich die Meldung „Interner Serverfehler“. In meinen Amazon CloudWatch Logs wird entweder die Fehlermeldung „keine Berechtigungen zum Aufrufen der Integration vorhanden“ oder „keine Berechtigungen zum Aufrufen des Autorisierers vorhanden“ angezeigt.

Kurzbeschreibung

Wenn eine API-Gateway-HTTP-API versucht, eine Lambda-Funktion ohne Lambda-Aufrufberechtigung aufzurufen, gibt das API-Gateway die Meldung „Interner Serverfehler“ zurück. Wenn Sie die CloudWatch-Protokollierung für Ihre HTTP-API aktiviert haben, protokolliert das API-Gateway zudem eine der folgenden Fehlermeldungen in Ihren Zugriffsprotokollen:

  • Für HTTP-APIs mit einer Lambda-Integration: „integrationError“: „Die für Integration oder das API-Gateway konfigurierte IAM-Rolle ist nicht berechtigt, die Integration aufzurufen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.“
  • Für HTTP-APIs mit einem Lambda-Autorisierer: „authorizerError“: „Die für den Autorisierer oder das API-Gateway konfigurierte IAM-Rolle ist nicht berechtigt, den Autorisierer anzurufen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.“

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

Verwenden Sie die API-Gateway-Konsole oder die AWS Command Line Interface (AWS CLI), um Ihrer HTTP-API eine ressourcenbasierte Lambda-Aufrufberechtigung hinzuzufügen.

-oder-

Konfigurieren Sie eine AWS Identity and Access Management (IAM)-Ausführungsrolle, die Ihrer HTTP-API die Berechtigung zum Aufrufen Ihrer Funktion erteilt. Weitere Informationen finden Sie unter API-Gateway-Berechtigungsmodell zum Aufrufen einer API.

Weitere Informationen zur Behebung von Fehlern bei der Verwendung von Lambda-Integrationen mit HTTP-APIs finden Sie unter Problembehandlung mit HTTP-API-Lambda-Integrationen.

Lösung

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, vergewissern Sie sich, dass Sie die neueste AWS-CLI-Version verwenden.

Die API-Gateway-Konsole verwenden, um einer HTTP-API mit einer Lambda-Integration die Lambda-Aufrufberechtigung hinzuzufügen

  1. Öffnen Sie die API-Gateway-Konsole.
  2. Wählen Sie im Bereich APIs den Namen Ihrer HTTP-API aus.
  3. Wählen Sie im linken Navigationsbereich Integrationen aus.
  4. Wählen Sie Integration verwalten aus.
  5. Suchen Sie nach dem Namen Ihrer Lambda-Integration und wählen Sie dann die Schaltfläche Bearbeiten neben dem Namen Ihrer Lambda-Integration aus.
  6. Wählen Sie unter Aufrufberechtigungen die Option API-Gateway-Berechtigung gewähren aus, um Ihre Lambda-Funktion aufzurufen.
    Geben Sie alternativ den IAM-Rollen-ARN an, den das API-Gateway verwenden kann, um die Lambda-Funktion aufzurufen.
  7. Wählen Sie Speichern und anschließend API bereitstellen aus, um Ihrer API die Lambda-Aufrufberechtigung hinzuzufügen.

Die AWS-CLI verwenden, um einer HTTP-API mit einer Lambda-Integration eine Lambda-Aufrufberechtigung hinzuzufügen

Führen Sie den folgenden AWS-CLI-Befehl add-permission aus:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--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 den Wert function-name durch den ARN Ihrer Lambda-Funktion. Ersetzen Sie den Wert source-arn durch den Quell-ARN Ihrer API. Ersetzen Sie den Wert statement-id durch eine Anweisungskennung, die die Anweisung von anderen Anweisungen in derselben Richtlinie unterscheidet.

Die API-Gateway-Konsole verwenden, um einer HTTP-API mit einem Lambda-Autorisierer die Lambda-Aufrufberechtigung hinzuzufügen

  1. Öffnen Sie die API-Gateway-Konsole.
  2. Wählen Sie im Bereich APIs den Namen Ihrer HTTP-API aus.
  3. Wählen Sie im linken Navigationsbereich Autorisierung aus.
  4. Wählen Sie Autorisierung verwalten aus.
  5. Suchen Sie den Namen Ihres Lambda-Autorisierers und wählen Sie dann die Schaltfläche Bearbeiten neben dem Namen Ihres Lambda-Autorisierers aus.
  6. Wählen Sie unter Aufrufberechtigungen die Option API-Gateway-Berechtigung zum Aufrufen Ihrer Lambda-Funktion automatisch erteilen aus.
    Geben Sie alternativ den IAM-Rollen-ARN an, den das API-Gateway verwenden kann, um die Lambda-Funktion aufzurufen.
  7. Wählen Sie Speichern und anschließend API bereitstellen aus, um Ihrer API die Lambda-Aufrufberechtigung hinzuzufügen.

Die AWS-CLI verwenden, um einer HTTP-API mit einem Lambda-Autorisierer eine Lambda-Aufrufberechtigung hinzuzufügen

Führen Sie den folgenden AWS-CLI-Befehl add-permission aus:

aws lambda add-permission \
--function-name "$YOUR_FUNCTION_ARN" \
--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 den Wert function-name durch den ARN Ihrer Lambda-Funktion. Ersetzen Sie den Wert source-arn durch den Quell-ARN Ihrer API. Ersetzen Sie den Wert statement-id durch eine Anweisungskennung, die die Anweisung von anderen Anweisungen in derselben Richtlinie unterscheidet.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr