Java 如何在Elastic Beanstalk上传递Amazon SES的AWS_ACCESS_KEY_ID?

Java 如何在Elastic Beanstalk上传递Amazon SES的AWS_ACCESS_KEY_ID?,java,amazon-web-services,spring-boot,amazon-elastic-beanstalk,amazon-ses,Java,Amazon Web Services,Spring Boot,Amazon Elastic Beanstalk,Amazon Ses,我将AWS\u ACCESS\u KEY\u ID和AWS\u SECRET\u ACCESS\u KEY设置为本地计算机中的环境变量,它工作正常。当我部署到Elastic Beanstalk时,我设置了“环境属性”,但它们作为-DJava系统属性传递,而不是设置为环境变量,并且它会生成一个错误 而Tomcat平台设置您使用system.getProperty检索的Java系统属性 错误 2018-08-03 02:34:37.001信息32073---[nio-8080-exec-9]c.s

我将
AWS\u ACCESS\u KEY\u ID
AWS\u SECRET\u ACCESS\u KEY
设置为本地计算机中的环境变量,它工作正常。当我部署到Elastic Beanstalk时,我设置了“环境属性”,但它们作为
-D
Java系统属性传递,而不是设置为环境变量,并且它会生成一个错误

而Tomcat平台设置您使用system.getProperty检索的Java系统属性

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

Amazon SES只需要环境变量(或主目录中的“共享凭证文件”)。那么,对于使用环境的Java Spring引导应用程序,如何在Elastic Beanstalk中将AWS密钥传递给Amazon SES?

您可以使用SSM(系统管理器服务)参数存储以保留您的环境变量,并通过任何具有IAM权限的服务访问它。在这种情况下,由于您需要访问密钥,因此不需要保留任何环境变量。您只需在elastic beanstalk中使用您的实例配置文件,它将为您提供您的访问密钥和机密访问密钥您为弹性豆茎分配了IAM。请参考此。

根据

Java系统属性–aws.accessKeyId和aws.secretKey。aws Java SDK使用SystemPropertiesCredentialsProvider加载这些凭据

因此,不要设置
AWS\u ACCESS\u KEY\u ID
,而是设置
AWS.accessKeyId
,然后将其设置为命令行上的Java系统属性,由Amazon SES SDK获取