2017-02-04 195 views
1

使用AWS IAM用戶角色的動機是讓AWS自動處理每個服務調用的AWS密鑰/憑證。這種方法在Apache Camel之後使用,後者然後使用憑證安全地進行數據傳輸,即不在源代碼中存儲任何憑證。使用AWS IAM的AWS S3存儲桶API調用用戶角色憑證:

我發現的問題是僅在aws cli中在IAM工具中創建的憑據。

舉例來說,我從IAM自動生成憑證成功運行此(我的環境變量中設置它們):

aws s3 cp test.txt s3://x/test.txt 

然而,當我試圖模仿中同一操作(相同的憑據) API調用,我給這個錯誤信息:

The AWS Access Key Id you provided does not exist in our records. 
(Service: Amazon S3; Status Code: 403; Error Code: InvalidAccessKeyId;   
Request ID: 07A4FCDCA2E82F9E) 

此外,使用我的AWS賬戶的安全證書(即製造一個安全密鑰ID和密鑰),我可以得到上述API工作。所以API不是問題(考慮到我已經測試了2個全音質證書集)。

最後,我的AWS IAM用戶角色設置爲擁有對S3存儲桶的完全訪問權限,並且S3存儲桶本身被配置爲允許這樣做。這是我開始迷失在潛在的路線上。

瞭解了所有這些,我已經做了一些研究並找到了類似問題的人(1)(2)。每個源代碼都提出了不同的想法來解決這個問題,但是對於我使用Apache Camel的用例來說,兩者都不適用。

對於我使用Apache的駱駝的知識,我的代碼示例如下:

String awsS3Connection = "aws-s3://x" + "?accessKey=" + accessId + 
          "&secretKey=" + accessKey; 

    from(awsS3Connection) 
      .to(importProcessingEndpoint); 

回答

1

臨時憑證是毫無意義的 - 和未確認的 - 的API,除非他們是在配合使用他們的服務隨附的會話/安全令牌。

當正在準備簽署的請求......

您加入會話令牌HTTP頭或命名X-Amz-Security-Token查詢字符串參數。您將會話令牌添加到HTTP標頭或查詢字符串參數,但不能同時添加。

http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#RequestWithSTS

然而,從駱駝docs,這不是明顯的如何通過令牌,或者是否他們甚至實施了這種支持。

+0

我正在向您提出的有關駱駝支持此事的相同結論。我會看看是否有任何實現或缺乏駱駝接口內傳遞自定義憑據的規則。我發現的任何其他信息將在您的答案下作爲單獨的答案和評論發佈! –

+0

似乎最近的aws sdk與駱駝不兼容,因此憑證檢索工作正常,但客戶端不能與駱駝一起使用。 –

0

經過深入研究,我發現這是駱駝不支持最新版本的AWS SDK的問題。它成功地檢索憑證(請參閱this文檔),但創建的客戶端本身打破了駱駝。

我能找到的唯一解決方案是自定義AWS SDK,以在構建客戶端時返回憑據,然後使用所述憑據構建與使用舊版AWS SDK的Camel兼容的客戶端...儘管包含相同SDK的兩個版本是非常不切實際和必要的,但它可以工作。

相關問題