2017-03-08 57 views
1

我創建了一個使用AWS與DynamoDB數據庫進行通信的程序的JAR可執行文件。我記得通過Eclipse設置我的憑據,以便我可以訪問數據庫,但是這似乎沒有傳遞到JAR文件,因爲這些憑據保存在我的計算機上,並且沒有與JAR打包在一起。我注意到JAR實際上可以訪問我用來創建它的計算機上的數據庫,但在任何其他計算機上,任何需要程序訪問數據庫的任務都會顯示錯誤消息「錯誤掃描表:無法加載來自鏈中任何提供商的AWS憑證。「包含帶有JAR文件的AWS憑證

我應該如何在應用程序中包含憑據以確保運行JAR的任何人都能訪問數據庫?

編輯︰萬一它有所作爲,我認爲我最初設置憑據的方式是在Eclipse中通過AWS>首選項>配置文件配置。

+0

是就罐子所有用戶信賴? –

+0

是的,他們都是。 – user3726962

回答

1

  1. 爲每個要運行Jar的用戶創建一個「Programatic Access」類型的AWS用戶。用戶需要使用您提供的憑據創建〜/ .aws /憑證。這是一個半手動步驟,但它允許您關閉特定用戶。
  2. 假設您有一個shell文件來啓動Jar文件,請創建環境變量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY並導出它們以供用戶運行。
  3. 如果這確實是一個原始Jar,那麼在你的main()(或其他一些你知道在AWS中調用任何東西之前被調用的方法)執行System.setProperty("aws.accessKeyId", "youraccesskey")System.setProperty("aws.secretKey", "yoursecretkey")將它們設置爲系統屬性。

最後兩條建議非常危險。您今天可能會信任您的用戶,但當其中一個用戶不再信任時會發生什麼?第一個選項允許您禁用單個用戶。

1

我不建議在JAR中使用硬編碼憑證,但如果您真的想要使用它,那麼有幾種方法。

當您創建客戶端時,您可以使用.withCredentials()來傳入您的密鑰和祕密。例如:

BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key"); 
AmazonDynamoDBClient dbClient = AmazonDynamoDBClientBuilder.standard() 
         .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) 
         .build(); 

如果你想讓它全球,並有每一個客戶端自動使用它,你使用任何AWS代碼之前,你可以設置這些Java屬性:

System.setProperty("aws.accessKeyId", "access_key_id"); 
System.setProperty("aws.secretKey", "secret_key"); 

欲瞭解更多信息,請參閱:

根據您發佈我看到幾個選項

http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html

1

可以通過編程方式創建一個「AWSCredentials」對象是這樣的:

AWSCredentials credentials = new AWSCredentials() { 
    public String getAWSSecretKey() { return "your secret key here"; } 
    public String getAWSAccessKeyId() { return "your access id here"; } 
}; 
AmazonSimpleDB simpleDb = new AmazonSimpleDBClient(credentials); 
AmazonS3Client = new AmazonS3Client(credentials); 
//and so on...