发送电子邮件时如何向 Amazon SES 服务提供 AWS 密钥?

Posted

技术标签:

【中文标题】发送电子邮件时如何向 Amazon SES 服务提供 AWS 密钥?【英文标题】:How do you provide AWS keys to Amazon SES service when sending emails? 【发布时间】:2018-10-28 08:06:56 【问题描述】:

文档说您的主目录中需要一个“共享凭据文件”,但这不适用于生产!那么在发送电子邮件时如何指定 AWS 密钥?它没有给出任何例子!

https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html

此代码示例假定您已安装适用于 Java 的 AWS 开发工具包,并且您已创建共享凭证文件。

  AmazonSimpleEmailService client = 
      AmazonSimpleEmailServiceClientBuilder.standard()
      ...
  client.sendEmail(request);

他们的参考文档甚至不包含AmazonSimpleEmailServiceClientBuilder

https://docs.aws.amazon.com/search/doc-search.html?searchPath=documentation-guide&searchQuery=AmazonSimpleEmailServiceClientBuilder&x=3&y=8&this_doc_product=Amazon+Simple+Email+Service&this_doc_guide=API+Reference&doc_locale=en_us#facet_doc_product=Amazon%20Simple%20Email%20Service&facet_doc_guide=API%20Reference

【问题讨论】:

我看不出它在哪里说你“需要”这样做。它提供了一个示例,该示例使用多种方式中的一种方式来提供凭据。假设您使用的是 EC2 或 Lambda,请使用 IAM 角色。另见docs.aws.amazon.com/general/latest/gr/… @jarmod 有哪些方法?能给我举个例子吗?我正在使用 IAM 角色,但它仍然使用 AWS_ACCESS_KEY_ID 和密钥。我正在使用 Elastic Beanstalk,但该环境在 EB 中不起作用。 ***.com/questions/51664938/… 在 EC2 上使用 IAM 角色时,会从元数据服务而非环境变量中检索凭证。有关向 Elastic Beanstalk 提供凭据的众多选项的讨论,请访问 docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/… 看我的回答***.com/a/54807882/6414086 【参考方案1】:

如果您使用 EC2 或 Lambda 或任何 AWS IAM role 支持的服务,安全的方法是创建一个有权访问 SES 的角色并将其附加到资源。您不需要维护任何凭据。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#create-iam-role

以下链接提供了向您的 java 程序提供凭据的不同方法 https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

如果你想在你的计划中给予

AWSCredentialsProvider credentialsProvider = new AWSCredentialsProvider() 
    @Override
    public void refresh() 
        @Override
        public AWSCredentials getCredentials() 
        return new AWSCredentials() 
            @Override
            public String getAWSSecretKey() 
                return "YOUR_SECRET_KEY";
            
            @Override
            public String getAWSAccessKeyId() 
                return "YOUR_ACCESS_KEY";
            
        ;
    
;

AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder.standard()
            .withCredentials(credentialsProvider).build();

【讨论】:

“环境变量 – AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY” 从头开始。 Elastic Beanstalk 没有为 Spring Boot/Tomcat 设置环境。它设置 Java 属性。因此:“Java 系统属性 – aws.accessKeyIdaws.secretKey。AWS SDK for Java 使用 SystemPropertiesCredentialsProvider 加载这些凭证。”

以上是关于发送电子邮件时如何向 Amazon SES 服务提供 AWS 密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 play framework 1.x 和 Amazon SES 发送电子邮件?

Postfix 处理 Amazon SES 最大发送速率错误

发送电子邮件时,Amazon SES(沙盒外和域验证)失败

使用 PHP 开发工具包从 Amazon SES 发送 HTML 邮件

Amazon SES:发送电子邮件标头

使用 Amazon SES 的 Codeigniter SMTP 电子邮件