繁体   English   中英

将AWS SES与从S3调用的Lambda函数(nodejs)一起使用

[英]Using AWS SES with a Lambda function (nodejs) called from S3

我的设置如下:

  • Lambda为通过AWS SES发送电子邮件的功能提供API端点
  • API端点是从S3存储桶上的静态JS文件调用的

这有效:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM