[英]Using AWS SES with a Lambda function (nodejs) called from S3
我的设置如下:
这有效:
var exec = require('child_process').exec;
var aws = require('aws-sdk');
var ses = new aws.SES({
"accessKeyId": "MY_ACCESS_KEY",
"secretAccessKey": "MY_SECRET_ACCESS_KEY",
"region": "A_REGION"
});
var ses = new aws.SES();
exports.handler = function(event, context) {
...code to send email...
};
我想从函数中删除凭据,而是让Lambda从其他地方获取它们。
如果我删除凭据,我会得到:
User `arn:aws:sts::1234567890:assumed-role/lambda_basic_execution/awslambda_1234567890\' is not authorized to perform `ses:SendEmail\' on resource `arn:aws:ses:us-region-123:1234567890:identity/my.identity@domain.com\'
我仍然试图围绕政策,角色和凭据。 我首先想到Lambda可能能够从S3环境变量中获取凭据,但我不知道如何设置这些或者无论如何这是正确的方法。
如果有人能给我一个暗示这可能如何起作用的话会很棒。 或者如果不可能的话。
我从Lambda函数中删除凭据的主要原因是我想将函数代码添加到git仓库。 我对将这些凭据添加到代码仓库感到很难过。
创建lambda函数时,您创建了一个具有足够权限的IAM角色来执行函数本身,但不对任何其他AWS服务执行操作。 从文档:
无论您如何调用Lambda函数,AWS Lambda始终执行该函数。 在创建Lambda函数时,您可以指定AWS Lambda可以代表您执行Lambda函数的IAM角色。 此角色也称为执行角色。 如果您的Lambda函数在执行期间访问其他AWS资源(例如,要在Amazon S3存储桶中创建对象,从DynamoDB表读取项目或将日志写入CloudWatch Logs),则需要授予执行角色权限对于要使用Lambda函数执行的特定操作。
因此,您的新IAM角色无权执行SES发送操作。
在Web控制台或CLI中,您可以找到此IAM角色并更新现有内联策略(或附加新策略)以允许发送电子邮件操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ses:SendEmail", "ses:SendRawEmail"],
"Resource":"*"
}
]
}
从我对你的问题的解读看来,如果你只是将它用于那里托管的静态页面,并且有一个指向API端点的链接,那么S3似乎与执行角色无关。 如果需要从函数本身列出/获取s3对象,则同样需要在IAM角色中包含这些权限。
进一步阅读:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.