Pourquoi l'erreur « Unable to validate the following destination configurations » (Impossible de valider les configurations de destination suivantes) s'affiche-t-elle lors de la création d'une notification d'événement Amazon S3 pour déclencher ma fonction Lambda ?

Dernière mise à jour 10-06-2020

J’essaie de créer une notification d'événement Amazon Simple Storage Service (Amazon S3) pour déclencher ma fonction AWS Lambda. Pourquoi l'erreur « Unable to validate the following destination configurations. Not authorized to invoke function » (Impossible de valider les configurations de destination suivantes. Vous n'êtes pas autorisé à appeler la fonction) s'affiche-t-elle ?

Brève description

En règle générale, cette erreur signifie que votre compartiment S3 n'est pas autorisé à appeler une fonction Lambda. Les autorisations requises sont automatiquement ajoutées à une stratégie de ressource pour votre fonction lorsque vous utilisez la console Amazon S3 pour configurer une notification d'événement pour Lambda ou ajouter un déclencheur à votre fonction à partir de la console Lambda.

L'erreur peut se produire lorsque :

  • La stratégie basée sur les ressources d'une fonction Lambda est supprimée ou annulée, et vous essayez d'enregistrer les modifications apportées à une notification d'événement Amazon S3 pour cette fonction.
  • Un compartiment S3 dispose d'une notification d'événement existante pour une fonction Lambda qui n'a les autorisations requises dans sa stratégie de ressource, et que vous essayez d'enregistrer une nouvelle notification d'événement dans le compartiment S3.
  • Une nouvelle notification d'événement Amazon S3 est ajoutée à partir du kit AWS SDK, l'interface de ligne de commande (CLI) AWS ou de la pile AWS CloudFormation, et que la stratégie de ressource de la fonction ne dispose pas des autorisations requises.

Remarque : si vous corrigez les autorisations et que les notifications d'événements Amazon S3 ne déclenchent toujours pas votre fonction Lambda, consultez Pourquoi ma notification d'événement Amazon S3 ne déclenche-t-elle pas ma fonction Lambda ?

Résolution

Effectuez l'une ou l'autre des opérations suivantes :

Recréer la notification d'événement

Supprimez la notification d'événement de la console Amazon S3, puis ajoutez à nouveau la notification. Cela ajoute les autorisations appropriées à la stratégie de ressource de votre fonction Lambda.

Ajouter des autorisations à l'aide de l'interface de ligne de commande AWS (AWS CLI)

Utilisez l'API Lambda AddPermission pour ajouter les autorisations d'appel appropriées à la stratégie de ressource de votre fonction Lambda. Exécutez cette commande à partir de l'interface de ligne de commande (CLI) AWS:

$ aws lambda add-permission --function-name myLambdaFunction --principal s3.amazonaws.com \
--statement-id S3StatementId --action "lambda:InvokeFunction" \
--source-arn arn:aws:s3:::myS3Bucket \
--source-account accountId

Remarque : remplacez myLambdaFunction par le nom de votre fonction Lambda. Remplacez S3StatementId par une valeur unique pour différencier l'instruction des autres dans la même stratégie. Remplacez arn:aws:s3:::myS3Bucket par l'Amazon Resource Name (ARN) de votre compartiment S3. Remplacez accountId par votre ID de compte AWS.

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande (CLI) AWS, vérifiez que vous utilisez la toute dernière version de l’interface de ligne de commande (CLI) AWS.

Pour plus d'informations, consultez Configuration d'Amazon S3 pour publier des événements et Octroi à la fonction de l'accès aux services AWS.