Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Lambda函数中从AWS SES发送电子邮件时拒绝访问_Javascript_Email_Amazon Web Services_Aws Sdk_Aws Lambda - Fatal编程技术网

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

Javascript 在Lambda函数中从AWS SES发送电子邮件时拒绝访问,javascript,email,amazon-web-services,aws-sdk,aws-lambda,Javascript,Email,Amazon Web Services,Aws Sdk,Aws Lambda,我试图在AWS Lambda函数中使用Amazon SES发送电子邮件,为此我面临以下错误 拒绝访问:用户arn:aws:sts::XXXXX:假定角色/lambda_基本_执行/awslambda_XXXX'无权对资源'arn:aws:ses:us-west-2:XXX:identity'执行ses:sendmail'/example@example.com" 我已经批准了你的申请 IAM角色的“ses:SendEmail”、“ses:SendRawEmail” 经过长时间的调试,我发现了一个

我试图在AWS Lambda函数中使用Amazon SES发送电子邮件,为此我面临以下错误

拒绝访问:用户
arn:aws:sts::XXXXX:假定角色/lambda_基本_执行/awslambda_XXXX'无权对资源'arn:aws:ses:us-west-2:XXX:identity'执行
ses:sendmail'/example@example.com"

我已经批准了你的申请

IAM角色的“ses:SendEmail”、“ses:SendRawEmail”


经过长时间的调试,我发现了一个问题,“lambda_basic_execution”角色需要被授予访问“ses:sendmail”、“ses:sendrawmail”的权限

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


参考-

所以,我也遇到了拉凯什解释过的同样的问题,但无法理解他所说的步骤。这里是一个详细的步骤说明

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

{
  "Effect":"Allow",
  "Action":[
    "ses:SendEmail",
    "ses:SendRawEmail"
  ],
  "Resource":"*"
}
或者,您可以根据这些政策示例中的要求执行
此外,您需要先验证电子邮件地址,因此不要忘记这一点。希望这对每个人都有帮助。

如果您正在为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: '*'

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

JSON需要以下内容

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

正如其他人所说,您应该添加这两个权限: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

对于无服务器组件yaml:

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

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

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

在AWS SES帐户中,选择要用于发送的已验证电子邮件。 转到授权选项卡。 使用策略生成器创建策略。 您必须在那里粘贴用户ARN。 选中所需选项,应用策略

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


就这样,祝你好运

是否可以包括已应用于lambda_基本_执行角色的策略?请查找以下策略-{“版本”:“2012-10-17”,“语句”:[{“Sid”:“StmtXXXXXXXXX”,“效果”:“允许”,“操作”:[“ses:SendEmail”,“ses:SendRawEmail”[“*”]}],“资源”:[“*”]}]}对于仍有问题的任何人,您需要首先在任何资源上授权SendEmail和SendRawEmail的ec2/lambda角色(请参阅Rakesh的评论/Nishith的回答),除了设置SES身份策略以允许您的角色发送电子邮件外,您是否可以粘贴适用于您的最终策略?我仍然有这个问题。谢谢
$SesClient = new SesClient([
    'version' => '2010-12-01',
    'region'  => 'us-east-2',
    'credentials' => [
        'key'    => 'AKIAYYFKAU4OPBNUTIII',
        'secret' => '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',
    ],  
]);