web-dev-qa-db-fra.com

Accès refusé lors de l'envoi d'e-mails depuis AWS SES dans la fonction Lambda

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 performses: 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.

18
RakeshKalwa

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.

12
Nishith

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.

Référence - http://docs.aws.Amazon.com/ses/latest/DeveloperGuide/control-user-access.html#iam-and-ses-examples-email-sending-actions

8
RakeshKalwa

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: '*'
3
Mari Gallegos

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": "*"
        }
0
tomcat

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
0
Abdelhadi Abdo