Lorsque je définis un déclencheur pour invoquer ma fonction AWS Lambda, l'erreur « The final policy size is bigger than the limit » s’affiche.
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 ».
Cette erreur peut se produire lorsque vous créez des ressources pour d'autres services AWS qui ont besoin d'une autorisation pour accéder à votre fonction.
Remarque : La limite de quota de la politique basée sur les ressources de la fonction Lambda est de 20 Ko et ne peut pas être ajustée.
Résolution
Pour résoudre cette erreur, supprimez les instructions de politique répétitives et remplacez-les par des instructions consolidées qui utilisent des caractères génériques (*) pour réduire la taille de la politique de votre fonction.
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Examiner les politiques relatives aux ressources de votre fonction
-
Pour rechercher et consulter la politique basée sur les ressources de votre fonction Lambda, exécutez la commande get-policy suivante :
aws lambda get-policy --function-name your-function
Remarque : Remplacez your-function par le nom de ou l’Amazon Resource Name (ARN) de votre fonction.
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 la page Download jq sur le site Web de jq.
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 your-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 your-function | jq -r '.Policy' | wc -c
Exemple de commande get-policy qui utilise jq pour trouver l'ID d'instruction (Sid) de certaines instructions de politique
aws lambda get-policy --function-name your-function | jq '.Policy | fromjson
| .Statement[]
| select(.Principal.Service=="events.amazonaws.com")
| .Sid'
Remarque : Remplacez events.amazonaws.com par le service AWS qui invoque votre fonction.
Exemple de commande get-policy qui utilise jq pour obtenir le Sid des ressources dont les noms commencent par la même chaîne
aws 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'
Remarque : Remplacez arn:aws:events:region:account-id:rule/test- par une chaîne partagée par les ARN des ressources dans plusieurs instructions de politique répétitives.
-
Dans la politique basée sur les ressources, identifiez les instructions de politique que vous pouvez remplacer par un caractère générique. Notez le Sid de chaque instruction de politique.
Supprimer des instructions de politique répétitives
Pour supprimer chaque instruction de politique répétitive, exécutez la commande remove-permission suivante :
aws lambda remove-permission --function-name your-function --statement-id sid
Remarque : Remplacez your-function par le nom ou l’ARN de votre fonction. Remplacez sid par le Sid de l’instruction de politique que vous souhaitez supprimer.
Ajouter des instructions de politique qui utilisent un caractère générique (*)
Pour ajouter de nouvelles instructions de politique consolidées qui incluent un caractère générique (*), exécutez la commande add-permission suivante :
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-*'
Remarque : 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 AWS 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.
Pour plus d'informations, consultez la section Comment utiliser des politiques basées sur les ressources avec Lambda pour accorder des autorisations aux services AWS ?