gpt4 book ai didi

amazon-web-services - 将 AWS SES 与从 S3 调用的 Lambda 函数 (nodejs) 结合使用

转载 作者:行者123 更新时间:2023-12-05 00:57:53 24 4
gpt4 key购买 nike

我的设置如下:

  • 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 服务执行操作。从文档:

    Regardless of how your Lambda function is invoked, AWS Lambda always executes the function. At the time of creating a Lambda function, you specify an IAM role that AWS Lambda can assume to execute your Lambda function on your behalf. This role is also referred to as the execution role. If your Lambda function accesses other AWS resources during execution (for example, to create an object in an Amazon S3 bucket, to read an item from a DynamoDB table, or to write logs to CloudWatch Logs), you need to grant the execution role permissions for the specific actions that you want to perform using your Lambda function.



    因此,您的新 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":"*"
    }
    ]
    }

    从我对您的问题的阅读来看,如果您仅将 S3 用于托管在那里并带有 API 端点链接的静态页面,那么它似乎与执行角色基本无关。如果您需要从函数本身列出/获取 s3 对象,您同样需要在您的 IAM 角色中包含这些权限。

    进一步阅读:
  • AWS Documentation - Granting Permissions Using the Execution Role
  • AWS Documentation - Controlling Access to Amazon SES
  • 关于amazon-web-services - 将 AWS SES 与从 S3 调用的 Lambda 函数 (nodejs) 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000139/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com