在Lambda函数中从AWS SES发送电子邮件时拒绝访问

时间:2016-01-22 14:42:42

标签: javascript email amazon-web-services aws-sdk aws-lambda

我正在尝试使用AWS Lambda函数中的Amazon SES发送电子邮件,为此我遇到以下错误。

  

AccessDenied:用户arn:aws:sts::XXXXX:assumed-role/lambda_basic_execution/awslambda_XXXX' is not authorized to perform ses:SendEmail'在资源`arn:aws:ses:us-west-2:XXX:identity/example@example.com'

我已获得

的许可
  

" ses:SendEmail"," ses:SendRawEmail"对于IAM角色。

8 个答案:

答案 0 :(得分:8)

经过长时间的调试我得到了问题,“lambda_basic_execution”角色需要被授予访问“ses:SendEmail”,“ses:SendRawEmail”的权限。

我试图为我创建的新IAM角色授予权限,但lambda函数被映射到“lambda_basic_execution”,因此存在不匹配。

参考 - http://docs.aws.amazon.com/ses/latest/DeveloperGuide/control-user-access.html#iam-and-ses-examples-email-sending-actions

答案 1 :(得分:1)

所以,我也遇到了拉克什(Rakesh)解释过的相同问题,但不理解他说的要这样做的步骤,这是带有步骤的详细解释。

您需要执行以下操作 安全性,身份和合规性-> IAM->角色->选择您的lambda函数->然后编辑策略->在JSON中打开它并添加以下部分

{
  "Effect":"Allow",
  "Action":[
    "ses:SendEmail",
    "ses:SendRawEmail"
  ],
  "Resource":"*"
}

或者您可以根据需要从这些策略示例中进行操作https://docs.aws.amazon.com/ses/latest/DeveloperGuide/control-user-access.html#iam-and-ses-examples-email-sending-actions 另外,您需要首先验证电子邮件地址,所以不要忘记这一点。希望对大家有帮助。

答案 2 :(得分:0)

如果您要为SAM Lambda配置策略或使用YAML配置文件,则应使用以下内容:

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 :(得分:0)

IAM政策解决了该问题。策略摘要将显示是否存在任何警告,即资源不存在等。

JSON需要遵循

       {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }

答案 4 :(得分:0)

正如其他人所说,您应该添加以下两个权限:ses:SendEmail,ses:SendRawEmail

我只想为那些使用无服务器框架的人添加解释

在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

答案 5 :(得分:0)

对于无服务器组件Yaml:

...
inputs:
  name: ${name}-${stage}
  region: ...
  service: lambda.amazonaws.com
  policy:
    - Effect: Allow
      Action:
        - ses:SendEmail
        - ses:SendRawEmail
      Resource: '*'

答案 6 :(得分:0)

您必须创建一个策略才能将您的 IAM 用户与您的电子邮件发件人关联起来。

首先,您必须创建 SMTP 凭据。在您的帐户仪表板中向下并选择创建 SMTP 凭据 好吧,现在您有了 IAM 用户,您将使用它通过 SES 发送电子邮件。复制用户 ARN(类似于:arn:aws:iam::601688880060:user/ses-smtp-user.20227405-2043453),您将在下一步中用到它。

在您的 AWS SES 账户中,选择您要用于发送的经过验证的电子邮件。 转到授权标签。 使用策略生成器创建策略。 您必须在那里粘贴用户 ARN。 检查您想要的选项,应用政策。

最后,在您的代码中添加凭据。 (您也可以使用“.aws”根目录中名为“credentials”的文件)

$SesClient = new SesClient([
    'version' => '2010-12-01',
    'region'  => 'us-east-2',
    'credentials' => [
        'key'    => 'AKIAYYFKAU4OPBNUTIII',
        'secret' => '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',
    ],  
]);

就是这样,祝你好运!

答案 7 :(得分:0)

  1. 创建一个策略来授予资源发送电子邮件的操作。
  2. 将策略附加到 lambda 执行角色

https://www.lazydeveloper.tech/aws/aws-using-ses-to-send-email-within-a-lambda-function/