仅使用实例角色从 Java 应用程序向 SES 发送邮件

Posted

技术标签:

【中文标题】仅使用实例角色从 Java 应用程序向 SES 发送邮件【英文标题】:Sending mail from a Java app to SES by using only an instance role 【发布时间】:2015-08-01 01:20:51 【问题描述】:

有没有一种方法可以利用实例角色从运行在 Amazon Linux EC2 实例上的 Java 应用程序向 SES 发送邮件,从而不必在盒子或内存中拥有 IAM 访问密钥?

不希望在我们的 EC2 实例(无论是在磁盘上还是在内存中)上拥有任何私钥,包括 IAM 密钥(即使是那些具有锁定权限的密钥)。

【问题讨论】:

【参考方案1】:

使用以下策略创建 IAM EC2 实例配置文件/角色:


  "Version": "2012-10-17",
  "Statement": [
    
      "Sid": "Stmt1393257734000",
      "Effect": "Allow",
      "Action": [
        "ses:SendEmail"
      ],
      "Resource": [
        "*"
      ]
    

当您启动您的实例时,从上面为其分配您的 IAM EC2 实例配置文件,然后您可以使用 AWS cli 或各种 AWS 开发工具包使用 ses:SendEmail 命令发送电子邮件。

编辑:

AWS SDK for Java 可以使用实例配置文件凭证。

AmazonSimpleEmailService sesClient = new AmazonSimpleEmailServiceClient(new InstanceProfileCredentialsProvider());

参考:http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/java-dg-roles.html

【讨论】:

这是一个很好的答案,但我现在意识到我没有指定我需要从运行在我的 ec2 实例上的 Java 应用程序中发送电子邮件,这就是为什么我发现实例角色没有'不起作用(因为我需要使用 java 无法直接访问的 aws cli)。我将编辑我的问题。对不起。 @BestPractices Java SDK 应该可以像 AWS CLI 一样访问实例角色。如果没有,您可以自己从实例元数据中查询临时访问密钥。跨度> 感谢@TimMalone,我不知道有人可以提取安全凭证。如果您想添加答案,我可以将其标记为已批准。 (您可以参考的文档 - docs.aws.amazon.com/AWSEC2/latest/UserGuide/…) @BestPractices 我 2015 年的回答,其中包括一个代码示例,不算数? ^^ 这个答案确实特别提到了Java SDK(经过编辑,所以你最初可能没有看到它)。如果这不适合,我将添加另一个带有元数据的答案,如果您必须使用 SMTP,我还会添加另一个选项。

以上是关于仅使用实例角色从 Java 应用程序向 SES 发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

从 EC2 访问 SQS - 实例配置文件与角色

带有 GMail 的 AWS SES(仅发送)

何时使用静态类与实例化类

Oracle发最后通牒:要用 Java 8 更新先交钱

Wordpress:当用户注册时发送通知,但仅适用于具有订阅者角色的用户

spring security仅实现控制账号重复登录,有没有人有实例给我发一下