2016-01-29 74 views
4

我想为我的Spring启动maven应用程序托管在云(Pivotal Web服务)上提供证书,以便能够上传到Amazon S3。然而,每一次我尝试使用获得的凭据:无法检索亚马逊证书

DefaultAWSCredentialsProviderChain credentialProviderChain = new DefaultAWSCredentialsProviderChain(); 
TransferManager transferManager = new TransferManager(credentialProviderChain.getCredentials()); 

它说

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception 
[Request processing failed; nested exception is com.amazonaws.AmazonClientException: Unable 
to load AWS credentials from any provider in the chain] with root cause 
2016-01-28T23:55:38.55+0000 [APP/0]  OUT com.amazonaws.AmazonClientException: 
Unable to load AWS credentials from any provider in the chain 

我有点困惑,是否我的凭据应在beans.xml文件或应用程序定义。属性文件。但我已经试过都无济于事。有人能指出我正确的方向吗?

+0

你可以尝试AWS Cognito服务以及 –

回答

10

查阅文档! http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html

,看起来在这个顺序凭证AWS凭据提供链:

  • 环境变量 - AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(推荐,因为它们是由所有AWS SDK和除了.NET CLI识别),或AWS_ACCESS_KEY和AWS_SECRET_KEY(仅Java SDK中识别)
  • Java系统属性 - aws.accessKeyId和aws.secretKey
  • 凭据配置文件在所有AWS的SDK和AWS CLI共享默认的位置(〜/ .aws /凭证)文件
  • 实例档凭证,通过亚马逊EC2元数据服务交付

更一般的文档在这里:http://docs.aws.amazon.com/AWSSdkDocsJava/latest/DeveloperGuide/credentials.html

+0

我已经看到这一点,但你能回答如何正确定义凭证并使用代码识别它们吗? – Tometoyou

+1

那么,你想使用哪种模式?如果您在EC2上运行,则应优先使用实例配置文件凭据。否则,为了让它运行,你可以在你的代码之前使用系统属性技术:'System.setProperty(“aws.accessKeyId”,“”); System.setProperty(“aws.secretKey”,“”);'。但是,通常情况下,最好不要将凭证放在源代码中。 – guitarsteve

+2

@Tometoyou,请查看[ClasspathPropertiesFileCredentialsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/ClasspathPropertiesFileCredentialsProvider.html),它允许您折腾一个简单的属性文件您的类路径包含您的凭据。它不是链条的一部分。另一种方法是[PropertiesFileCredentialsProvider](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/PropertiesFileCredentialsProvider.html)。 – tedder42

2

这种方式工作:

$ export AWS_ACCESS_KEY_ID=... 
$ export AWS_SECRET_ACCESS_KEY=...