Pourquoi reçois-je une erreur d'autorisation lorsque j'essaie d'abonner ma fonction Lambda à ma rubrique Amazon SNS ?

Lecture de 6 minute(s)
0

Je reçois une erreur d'autorisation lorsque j'essaie d'abonner ma fonction AWS Lambda à ma rubrique Amazon Simple Notification Service (Amazon SNS). Comment résoudre ce problème ?

Brève description

Lorsque vous abonnez une fonction Lambda à une rubrique SNS, vous pouvez recevoir une erreur d'autorisation pour les raisons suivantes :

  • Vous avez essayé de créer l'abonnement à partir d'un compte AWS différent de celui dans lequel se trouve votre fonction Lambda.
    -ou-
  • L'identité AWS Identity and Access Management (IAM) que vous avez utilisée pour créer l'abonnement n'est pas autorisée à exécuter les opérations d'API suivantes :
    (Lambda) AddPermission
    (Amazon SNS) S'abonner

Pour résoudre le problème, vous devez effectuer l'une des opérations suivantes en fonction de la cause de l'erreur :

  • Assurez-vous d'abonner votre fonction Lambda à la rubrique SNS à partir du compte AWS où se trouve votre fonction.
    -ou-
  • Assurez-vous que l'identité IAM que vous utilisez dispose des autorisations nécessaires pour exécuter les opération d'API AddPermission et S’abonner SNS.

Solution

Vérifiez la cause de l'erreur en fonction du message d'erreur renvoyé par Lambda

Si vous créez l'abonnement à partir d'un compte AWS différent de celui où se trouve votre fonction, Lambda renvoie l'une des erreurs suivantes :

Exemple d’erreur d’AWS CLI : vous avez essayé de créer l'abonnement à partir d'un compte différent de celui dans lequel se trouve votre fonction Lambda.

An error occurred (AuthorizationError) when calling the Subscribe operation: The account YOUR_AWS_ACCOUNT_ID_1 is not the owner of the endpoint arn:aws:lambda:us-east-1:YOUR_AWS_ACCOUNT_ID_2:function: your_Lambda_function_ARN

Exemple d'erreur d'AWS Management Console : vous avez essayé de créer l'abonnement à partir d'un compte différent de celui dans lequel se trouve votre fonction Lambda

Error code: AccessDeniedException - Error message: User: arn:aws:sts::XXXXXXX:XXXXXXX/XXXXX/XXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXXX:function:XXXXXXX

Si vous utilisez le bon compte, mais que votre identité IAM ne dispose pas des autorisations requises, Lambda ou SNS renvoie l'une des erreurs suivantes :

Exemple d'erreur d’AWS CLI : l'identité IAM que vous avez utilisée pour créer l'abonnement n'est pas autorisée à exécuter l'action AddPermission Lambda

An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: lambda:AddPermission on resource: arn:aws:lambda:us-west-2:XXXXXX:function:XXXXXXX because no identity-based policy allows the lambda:AddPermission action

Exemple d'erreur d’AWS Management Console : l'identité IAM que vous avez utilisée pour créer l'abonnement n'est pas autorisée à exécuter l'action AddPermission Lambda

Error code: AccessDeniedException - Error message: User: arn:aws:sts:XXXXXXXX:assumed-role/XXXXXXXX/XXXXX-XXXXXX is not 
authorized to perform: lambda:AddPermission on resource: 
arn:aws:lambda:us-west-2:XXXXXXXXX:function:XXXXXXX because no 
identity-based policy allows the lambda:AddPermission action

Exemple d'erreur d’AWS CLI lorsque vous essayez d'utiliser une identité IAM qui n'est pas autorisée à exécuter l'action SNS Subscribe

An error occurred (AuthorizationError) when calling the Subscribe operation: User: arn:aws:iam::XXXXXXX:user/XXXXXXXX is not authorized to perform: SNS:Subscribe on resource: arn:aws:sns:us-west-2:XXXXXXXX:XXXXXXX because no resource-based policy allows the SNS:Subscribe action

Assurez-vous d'abonner votre fonction Lambda à la rubrique SNS à partir du compte AWS où se trouve votre fonction

Vous pouvez utiliser la console Lambda ou l'AWS CLI pour abonner votre fonction Lambda à une rubrique SNS.

Pour abonner une fonction à une rubrique SNS à l'aide de la console Lambda

Remarque : lorsque vous ajoutez le déclencheur SNS à l'aide de la console Lambda, la console autorise automatiquement l'autorisation lambda:InvokeFunction du service:sns.amazonaws.com principal.

1.    Sur la page Fonctions de la console Lambda, choisissez votre fonction.

2.    Sous Overview (Présentation), choisissez Add trigger (Ajouter un déclencheur).

3.    Pour la Configuration du déclencheur, choisissez Sélectionner un déclencheur, puis SNS.

4.    Pour la rubrique SNS, collez la rubrique SNS Amazon Resource Name (ARN) depuis l'autre compte AWS.

5.    Cochez la case Activer le déclencheur.

6.    Choisissez Add (Ajouter).

Pour plus d'informations, consultez la section Configuration des options de fonction Lambda.

Remarque : si vous recevez l'erreur suivante, vous devez accorder des autorisations d'action d'API Subscribe (Abonner) à l'identité IAM que vous utilisez. Pour obtenir des instructions de dépannage, consultez l'article suivant :Comment résoudre les erreurs d'autorisation lorsque j'essaie d'ajouter des abonnés à une rubrique Amazon SNS ?

An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN

Pour abonner une fonction à une rubrique SNS à l'aide de l'AWS CLI

Remarque : si vous recevez des erreurs lors de l'exécution de commandes AWS CLI, assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

1.    Configurez votre AWS CLI avec un utilisateur IAM qui appartient au compte AWS sur lequel se trouve votre fonction Lambda :

aws configure --profile-name your_profile_name

Important : veillez à transmettre l'identifiant de la clé d'accès AWS et la clé secrète de votre utilisateur IAM.

2.    Autoriser les invocations Lambda à partir de la rubrique SNS en ajoutant l'autorisation Lambda:InvokeFunction du service:sns.amazonaws.com principal :

aws lambda add-permission --function-name your_lambda_function_name --statement-id sns_invoke_permission --action lambda:InvokeFunction --principal sns.amazonaws.com --source-arn your_sns_topic_arn

3.    Abonnez votre fonction Lambda à votre rubrique SNS :

aws sns subscribe --topic-arn your_sns_topic_ARN --protocol lambda --notification-endpoint your_lambda_function_arn --profile your_profile_name_passed_on_#1

Remarque : si vous recevez l'erreur suivante, vous devez accorder des autorisations d'action d'API Subscribe (Abonner) à l'identité IAM que vous utilisez. Pour obtenir des instructions de dépannage, consultez l'article suivant :Comment résoudre les erreurs d'autorisation lorsque j'essaie d'ajouter des abonnés à une rubrique Amazon SNS ?

An error occurred (AuthorizationError) when calling the Subscribe operation: User: your_IAM_user_or_role is not authorized to perform: SNS:Subscribe on resource: your_SNS_topic_ARN

Assurez-vous que l'identité IAM que vous utilisez dispose des autorisations nécessaires pour exécuter les opérations d'API Lambda AddPermission et SNS Subscribe

Vérifiez la politique basée sur l'identité de votre identité IAM. Assurez-vous que la politique autorise explicitement l'identité IAM à exécuter les deux actions suivantes :
lambda:AddPermission
SNS:Subscribe

Si la politique basée sur l'identité n'accorde pas les autorisations requises, ajoutez les autorisations requises à la politique. Ensuite, abonnez votre fonction Lambda à la rubrique SNS à partir du compte AWS dans lequel se trouve la fonction.


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