J'essaie d'envoyer un e-mail à l'aide d'Amazon SES dans la fonction AWS Lambda, pour cela, je fais face à l'erreur suivante.
AccessDenied: utilisateur
arn:aws:sts::XXXXX:assumed-role/lambda_basic_execution/awslambda_XXXX' is not authorized to perform
ses: SendEmail 'sur la ressource `arn: aws: ses: us-west-2: XXX: identity/[email protected]'
J'ai accordé la permission de
"ses: SendEmail", "ses: SendRawEmail" pour le rôle IAM.
Donc, j'avais aussi le même problème que Rakesh a expliqué mais je ne pouvais pas comprendre les étapes qu'il disait pour le faire voici une explication détaillée avec les étapes.
Vous devez faire la sécurité, l'identité et la conformité suivantes -> IAM -> Rôles -> sélectionner votre fonction lambda -> puis modifier la politique -> l'ouvrir dans JSON et ajouter la partie ci-dessous
{
"Effect":"Allow",
"Action":[
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource":"*"
}
ou vous pouvez le faire selon les exigences de ces exemples de politiques https://docs.aws.Amazon.com/ses/latest/DeveloperGuide/control-user-access.html#iam-and-ses-examples-email -sending-actions également, vous devez d'abord vérifier l'adresse e-mail, alors n'oubliez pas cela. J'espère que cela aide tout le monde.
Après un long débogage, j'ai eu le problème, le rôle "lambda_basic_execution" doit être accordé avec la permission d'accéder à "ses: SendEmail", "ses: SendRawEmail".
Où j'essayais d'accorder l'autorisation pour le nouveau rôle IAM que j'ai créé, mais la fonction lambda est mappée sur "lambda_basic_execution", donc il y a un décalage.
Si vous configurez des politiques pour un SAM Lambda ou utilisez un fichier de configuration YAML, vous utiliseriez quelque chose comme ceci:
template.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 'your-email-lambda'
Resources:
YourEmailFunction:
Type: AWS:Serverless::Function
Properties:
Policies:
- Version: '2012-10-17'
Statement:
- Effect: Allow
Action:
- 'ses:SendEmail'
- 'ses:SendRawEmail'
Resource: '*'
La stratégie IAM a résolu le problème. Le résumé de la politique indiquera s'il y a des avertissements, c'est-à-dire que la ressource n'existe pas, etc.
JSON doit suivre
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
Comme ce que les autres ont dit, vous devez ajouter ces deux autorisations: ses: SendEmail, ses: SendRawEmail
Je veux juste ajouter une explication pour ceux qui utilisent le framework sans serveur
Dans serverless.yml:
provider:
name: aws
stage: dev
runtime: nodejs10.x
region: us-west-1
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- lambda:InvokeFunction
- ses:SendEmail # add this
- ses:SendRawEmail # add this
Resource: '*' # add this