我的设置如下:
这有效:
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 repo。我对将这些凭据添加到代码仓库感到很难过。
答案 0 :(得分:5)
创建lambda函数时,您创建了一个具有足够权限的IAM角色来执行函数本身,但不对任何其他AWS服务执行操作。来自文档:
无论您的Lambda函数如何被调用,AWS Lambda始终如此 执行该功能。在创建Lambda函数时,您 指定AWS Lambda可以承担的执行Lambda的IAM角色 代表你运作。这个角色也被称为 执行角色。如果您的Lambda函数访问其他AWS资源 执行期间(例如,在Amazon S3中创建对象) bucket,从DynamoDB表中读取项目或将日志写入 CloudWatch Logs),您需要授予执行角色权限 您要使用Lambda执行的特定操作 功能
因此,您的新IAM角色无权执行SES发送操作。
在Web控制台或CLI中,您可以找到此IAM角色,update the existing inline policy (or attach a new one)以允许发送电子邮件操作:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ses:SendEmail", "ses:SendRawEmail"],
"Resource":"*"
}
]
}
从我对你的问题的解读看来,如果你只是将它用于托管在那里的静态页面,并且有一个指向API端点的链接,那么S3似乎与执行角色无关。如果您需要从函数本身列出/获取s3对象,则同样需要在IAM角色中包含这些权限。
进一步阅读: