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

Date de la dernière mise à jour : 09/12/2021

Lorsque j'essaie de créer une notification d'événement Amazon Simple Storage Service (Amazon S3) pour appeler ma fonction AWS Lambda, j'obtiens l'erreur suivante : « 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). Pourquoi est-ce que je reçois cette erreur et comment puis-je résoudre le problème ?

Brève description

Si votre compartiment Amazon S3 ne dispose pas des autorisations requises pour appeler votre fonction Lambda, Lambda renvoie l'erreur suivante :

« 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)

Remarque : les autorisations requises sont automatiquement ajoutées à une politique basée sur les ressources pour votre fonction lorsque vous effectuez l'une des opérations suivantes :

Raisons courantes pour lesquelles cette erreur peut se produire

  • La politique basée sur les ressources d'une fonction Lambda est supprimée ou annulée et les modifications sont enregistrées dans une notification d'événement Amazon S3 pour cette fonction.
  • Un compartiment S3 possède une notification d'événement pour une fonction Lambda qui ne dispose pas des autorisations requises, et une autre notification d'événement est enregistrée dans le compartiment.
  • Une nouvelle notification d'événement Amazon S3 est ajoutée à partir de l'un des éléments suivants, et la politique basée sur les ressources de la fonction ne dispose pas des autorisations requises :
    Kit SDK AWS
    Référence de la ligne de commande d'AWS (AWS CLI)
    Pile AWS CloudFormation

Remarque : si vous mettez à jour les autorisations et que votre fonction ne s'appelle toujours pas, consultez la section Pourquoi ma notification d'événement Amazon S3 n'appelle-t-elle pas ma fonction Lambda ?

Solution

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

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. Ensuite, ajoutez à nouveau la notification.

Remarque : la recréation de la notification d'événement dans la console Amazon S3 ajoute les autorisations appropriées à la politique basée sur les ressources de votre fonction Lambda.

Ajoutez les autorisations requises à la politique basée sur les ressources de votre fonction Lambda à l'aide de l'AWS CLI

Utilisez l'API Lambda AddPermission pour ajouter les autorisations d'appel requises à la politique basée sur les ressources de votre fonction Lambda. Pour valider la modification, exécutez la commande AWS CLI suivante :

Important : 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 politique. Remplacez arn:aws:s3:::myS3Bucket par l'Amazon Resource Name (ARN) de votre compartiment S3. Remplacez accountId par votre ID de compte 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