Comment résoudre l'erreur « The final policy size is bigger than the limit » de Lambda ?

Lecture de 4 minute(s)
0

Lorsque je définis un déclencheur pour appeler ma fonction AWS Lambda, l'erreur suivante s’affiche « The final policy size is bigger than the limit. »

Brève description

Si la politique basée sur les ressources de votre fonction Lambda est supérieure à 20 Ko, Lambda renvoie une erreur The final policy size is bigger than the limit.

L'erreur peut se produire lorsque vous ajoutez des instructions de politique à la politique basée sur les ressources de votre fonction en effectuant l'une des opérations suivantes :

Pour résoudre l'erreur, réduisez la taille de la politique de votre fonction en supprimant les instructions répétitives et en les remplaçant par des instructions consolidées qui utilisent des caractères génériques (*). Pour en savoir plus, consultez les rubriques Quotas Lambda et Nettoyage des politiques basées sur les ressources.

Résolution

Remarque : si vous recevez des messages d’erreurs lors de l'exécution des commandes de l'AWS CLI, vérifiez que vous utilisez bien la version la plus récente de l'AWS CLI.

Passez en revue les politiques relatives aux ressources de votre fonction

Remarque : pour les commandes suivantes, remplacez my-function par le nom de votre fonction ou Amazon Resource Name (ARN).

1.    Exécutez la commande get-policy d’AWS CLI suivante pour rechercher et consulter la politique basée sur les ressources de votre fonction Lambda :

$ aws lambda get-policy --function-name my-function

Remarque : vous pouvez également utiliser le processeur JSON de ligne de commande, jq, dans la commande get-policy pour écrire des requêtes avancées. Pour en savoir plus sur le téléchargement et l'installation de jq, consultez Download jq sur le site Web de jq sur GitHub.

Exemple de commande get-policy qui utilise jq pour formater la politique d'une fonction Lambda sous forme de fichier JSON

$ aws lambda get-policy --function-name my-function | jq '.Policy|fromjson'

Exemple de commande get-policy qui utilise jq pour trouver la taille d’une politique d'une fonction Lambda

$ aws lambda get-policy --function-name my-function | jq -r '.Policy' | wc -c

Exemple de commande get-policy qui utilise jq pour trouver l'identifiant d'instruction (Sid) de certaines déclarations de politique

Remplacez events.amazonaws.com par le service AWS qui invoque votre fonction.

$ aws lambda get-policy --function-name my-function | jq '.Policy
| fromjson
| .Statement[]
| select(.Principal.Service=="events.amazonaws.com")
| .Sid'

Exemple de commande get-policy qui utilise jq pour obtenir le Sid des ressources dont les noms commencent par la même chaîne

Remplacez arn:aws:events:region:account-id:rule/test- par une chaîne partagée par les ARN des ressources dans plusieurs déclarations de politique répétitives.

$ aws lambda get-policy --function-name my-function | jq '.Policy
| fromjson
| .Statement[]
| select(.Condition.ArnLike."AWS:SourceArn" | startswith("arn:aws:events:region:account-id:rule/test-"))
| .Sid'

2.    Dans la politique basée sur les ressources, identifiez les déclarations de politique que vous pouvez remplacer par un caractère générique. Notez le Sid de chaque déclaration de politique.

Supprimez les déclarations de politique répétitives

Exécutez la commande remove-permission de l'AWS CLI suivante pour supprimer chaque déclaration de politique répétitive. Remplacez my-function par le nom ou l’ARN de votre fonction. Remplacez sid par le Sid de la déclaration de politique que vous souhaitez supprimer.

$ aws lambda remove-permission --function-name my-function --statement-id sid

Ajoutez des déclarations de politique qui utilisent un caractère générique (*)

Exécutez la commande AWS CLI add-permission suivante pour ajouter de nouvelles déclarations de politique consolidées qui incluent un caractère générique (*). Remplacez my-function par le nom ou l'ARN de votre fonction. Remplacez sid par un nouveau Sid de n'importe quelle valeur. Remplacez events.amazonaws.com par le service AWS ou le principal du compte qui invoque votre fonction. Remplacez arn:aws:events:region:account-id:rule/test-* par une chaîne ARN (plus un caractère générique) partagée par les ressources auxquelles vous accordez des autorisations.

$ aws lambda add-permission --function-name my-function \
--statement-id 'sid' \
--action 'lambda:InvokeFunction' \
--principal 'events.amazonaws.com' \
--source-arn 'arn:aws:events:region:account-id:rule/test-*'

Remarque : les déclencheurs qui ont des caractères génériques dans la politique basée sur les ressources peuvent ne pas être visibles dans la console Lambda. Pour en savoir plus, consultez Invocation basée sur les événements.

Pour en savoir plus, consultez Octroi de l'accès aux fonctions aux services AWS.

Informations connexes

Éléments de politique JSON IAM : ressource

Contrôle de la sortie des commandes depuis l'AWS CLI (Guide de l’utilisateur AWS CLI)

Pourquoi ma notification d’événement Amazon S3 n’invoque-t-elle pas ma fonction Lambda ?

Comment puis-je arrêter et démarrer des instances Amazon EC2 à intervalles réguliers à l'aide de Lambda ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans