【问题标题】:How do I pass AWS_ACCESS_KEY_ID for Amazon SES on Elastic Beanstalk?如何在 Elastic Beanstalk 上为 Amazon SES 传递 AWS_ACCESS_KEY_ID?
【发布时间】:2019-01-10 21:26:32
【问题描述】:

我在本地计算机中将AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 设置为环境变量,它工作正常。当我部署到 Elastic Beanstalk 时,我设置了“环境属性”,但它们作为 -D Java 系统属性传递,而不是设置为环境变量,并且会产生错误。

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-softwaresettings.html?icmpid=docs_elasticbeanstalk_console

当 Tomcat 平台设置您使用 System.getProperty 检索的 Java 系统属性时。

错误

2018-08-03 02:34:37.001 INFO 32073 --- [nio-8080-exec-9] c.s.xxxxx.apis.XxxxxxxApiController:未发送电子邮件。错误:用户 'arn:aws:sts::849611986161:assumed-role/aws-elasticbeanstalk-ec2-role/i-0f447c52c84e1fd93' 无权对资源 'arn:aws:ses:us- 执行 'ses:SendEmail' east-1:849611986161:identity/xxxxxx@xxxxx.com'(服务:AmazonSimpleEmailService;状态代码:403;错误代码:AccessDenied;请求 ID:c3835dda-96c5-11e8-8a21-67774160691b)

Amazon SES 仅需要环境变量(或您的主目录中的“共享凭证文件”)。那么如何将 AWS 密钥传递给 Elastic Beanstalk 中的 Amazon SES,以便使用该环境的 Java Spring Boot 应用程序?

【问题讨论】:

    标签: java amazon-web-services spring-boot amazon-elastic-beanstalk amazon-ses


    【解决方案1】:

    您可以使用 SSM(Systems Manager Service)参数存储来保存您的环境变量并通过任何具有 IAM 权限的服务访问它。在这种情况下,由于您需要访问密钥,因此不需要保留任何环境变量。您可以在弹性 beantalk 中使用您的实例配置文件,它会为您提供弹性 beantalk 的分配 IAM 的访问密钥和秘密访问密钥。请参考这个document

    【讨论】:

      【解决方案2】:

      根据https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default

      Java 系统属性——aws.accessKeyId 和 aws.secretKey。适用于 Java 的 AWS 开发工具包使用 SystemPropertiesCredentialsProvider 加载这些凭证。

      因此,请设置 aws.accessKeyId,而不是 AWS_ACCESS_KEY_ID,然后将其设置为命令行上的 Java 系统属性,由 Amazon SES 开发工具包获取。

      【讨论】:

        猜你喜欢
        • 2014-06-16
        • 2017-01-12
        • 2013-06-12
        • 2014-12-30
        • 2014-09-15
        • 2013-06-14
        • 2018-10-13
        • 2013-12-07
        • 2012-08-04
        相关资源
        最近更新 更多