我正在尝试使用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角色。
答案 0 :(得分:8)
经过长时间的调试我得到了问题,“lambda_basic_execution”角色需要被授予访问“ses:SendEmail”,“ses:SendRawEmail”的权限。
我试图为我创建的新IAM角色授予权限,但lambda函数被映射到“lambda_basic_execution”,因此存在不匹配。
答案 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)
https://www.lazydeveloper.tech/aws/aws-using-ses-to-send-email-within-a-lambda-function/