Wie behebe ich den Lambda-Fehler „The final policy size is bigger than the limit“?
Wenn ich einen Auslöser setze, um meine AWS-Lambda-Funktion aufzurufen, erhalte ich die Fehlermeldung „The final policy size is bigger than the limit“.
Kurzbeschreibung
Wenn die ressourcenbasierte Richtlinie der Lambda-Funktion über 20 KB groß ist, gibt Lambda den Fehler „The final policy size is bigger than the limit“ zurück.
Dieser Fehler kann auftreten, wenn du Ressourcen für andere AWS-Services erstellst, die eine Berechtigung für den Zugriff auf deine Funktion benötigen.
Hinweis: Das Kontingentlimit der ressourcenbasierten Richtlinie der Lambda-Funktion beträgt 20 KB und ist nicht anpassbar.
Lösung
Um diesen Fehler zu beheben, entferne sich wiederholende Richtlinienanweisungen und ersetze sie durch konsolidierte Anweisungen, die Platzhalter (*) verwenden, um die Größe der Funktionsrichtlinie zu reduzieren.
Hinweis: Wenn du beim Ausführen von 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.
Die ressourcenbasierten Richtlinien deiner Funktion überprüfen
-
Führe den folgenden Befehl get-policy aus, um die ressourcenbasierte Richtlinie der Lambda-Funktion zu finden und zu überprüfen:
aws lambda get-policy --function-name your-functionHinweis: Ersetze your-function durch den Namen deiner Funktion oder den Amazon-Ressourcennamen (ARN).
Du kannst auch den Befehlszeilen-JSON-Prozessor jq im Befehl get-policy verwenden, um erweiterte Abfragen zu schreiben. Informationen zum Herunterladen und Installieren von jq findest du unter Download jq (jq herunterladen) auf der jq-Website.
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Richtlinie einer Lambda-Funktion als JSON-Datei zu formatierenaws lambda get-policy --function-name your-function | jq '.Policy|fromjson'Beispiel für einen get-policy-Befehl, der jq verwendet, um die Größe der Richtlinie einer Lambda-Funktion zu ermitteln
aws lambda get-policy --function-name your-function | jq -r '.Policy' | wc -cBeispiel für einen get-policy-Befehl, der jq verwendet, um die Statement ID (Sid, Anweisungs-ID) bestimmter Richtlinienanweisungen zu finden
aws lambda get-policy --function-name your-function | jq '.Policy | fromjson | .Statement[] | select(.Principal.Service=="events.amazonaws.com") | .Sid'Hinweis: Ersetze events.amazonaws.com durch den AWS-Service, der deine Funktion aufruft.
Beispiel für einen get-policy-Befehl, der jq verwendet, um die Sid von Ressourcen abzurufen, deren Namen mit derselben Zeichenfolge beginnenaws lambda get-policy --function-name your-function | jq '.Policy| fromjson | .Statement[] | select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-")) | .Sid'Hinweis: Ersetze arn:aws:events:region:account-id:rule/test- durch eine Zeichenfolge, welche die ARNs der Ressourcen mehrerer sich wiederholender Richtlinienanweisungen gemeinsam nutzen.
-
Identifiziere in der ressourcenbasierten Richtlinie die Richtlinienanweisungen, die du durch einen Platzhalter ersetzen kannst. Notiere dir die Sid jeder Richtlinienanweisung.
Sich wiederholende Richtlinienanweisungen entfernen
Führe den folgenden Befehl remove-permission aus, um jede sich wiederholende Richtlinienanweisung zu entfernen:
aws lambda remove-permission --function-name your-function --statement-id sid
Hinweis: Ersetze your-function durch den Namen deiner Funktion oder den ARN. Ersetze sid durch die Sid der Richtlinienanweisung, die du entfernen möchtest.
Richtlinienanweisungen hinzufügen, die einen Platzhalter (*) verwenden
Um neue, konsolidierte Richtlinienanweisungen hinzuzufügen, die einen Platzhalter (*) enthalten, führe den folgenden Befehl add-permission aus:
aws lambda add-permission --function-name your-function \--statement-id 'sid' \ --action 'lambda:InvokeFunction' \ --principal 'events.amazonaws.com' \ --source-arn 'arn:aws:events:region:account-id:rule/test-*'
Hinweis: Ersetze my-function durch den Namen deiner Funktion oder den ARN. Ersetze sid durch eine neue Sid mit einem beliebigen Wert. Ersetze events.amazonaws.com durch den AWS-Service oder den AWS-Kontoprinzipal, der die Funktion aufruft. Ersetze arn:aws:events:region:account-id:rule/test-* durch eine ARN-Zeichenfolge (plus einen Platzhalter), welche die Ressourcen gemeinsam nutzen, denen du Berechtigungen erteilst.
Weitere Informationen findest du unter Wie kann ich ressourcenbasierte Richtlinien mit Lambda verwenden, um Berechtigungen für AWS-Services zu erteilen?
- Themen
- ServerlessCompute
- Tags
- AWS Lambda
- Sprache
- Deutsch
Ähnliche Videos

