2016-01-29 92 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=...