esc*_*cat 4 amazon-s3 amazon-web-services amazon-ses amazon-iam aws-lambda
我的设置如下:
这有效:
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...
};
Run Code Online (Sandbox Code Playgroud)
我想从函数中删除凭据,而是让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\'
Run Code Online (Sandbox Code Playgroud)
我仍然试图围绕政策,角色和凭据.我首先想到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":"*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
从我对你的问题的解读看来,如果你只是将它用于那里托管的静态页面,并且有一个指向API端点的链接,那么S3似乎与执行角色无关.如果需要从函数本身列出/获取s3对象,则同样需要在IAM角色中包含这些权限.
进一步阅读:
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |