Javascript 在Lambda函数中从AWS SES发送电子邮件时拒绝访问
我试图在AWS Lambda函数中使用Amazon 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” 经过长时间的调试,我发现了一个
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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',
],
]);