2016-10-13 50 views
0

我剛開始在我的項目中使用AWS。我想編寫一個將關鍵文件上傳到s3存儲桶的項目。我不想公開任何密鑰,以便所有其他開發人員/用戶都可以訪問上傳的文檔。請提供一些指示如何開始。Java AWS SDK - 如何使用Java API中的IAM配置文件上傳文件

我目前的執行情況:

return new AmazonS3Client(new AWSCredentials() { 
    @Override 
    public String getAWSAccessKeyId() { 
    return accessKey; 
    } 

    @Override 
    public String getAWSSecretKey() { 
    return accessKeySecret; 
    }, clientConfiguration) 

然後我用amazonS3Client.putObject(putReq);上傳文件。 所以,我在這裏公開我的密鑰,使其他同事可以下載/查看文件。任何人都可以使用它從s3cmd,瀏覽器插件等下載/上傳文件。

在閱讀AWS文檔時,我知道我可以使用EC2實例並設置IAM配置文件。 BUT我不確定我如何處理java代碼。請提供一些鏈接和示例

+0

http://stackoverflow.com/questions/15076645/amazon-s3-write-only-access的可能重複這個問題可以讓每個用戶一個單獨的文件夾中的S3存儲桶 - 用戶不有權訪問每個其他文件夾 –

+0

我認爲這個問題更關注於如何從實例的IAM角色獲取憑證。 – jbird

+0

這不會阻止'暴露我的密鑰,使其他同事下載/查看文件',會嗎? –

回答

1

請看InstanceProfileCredentialsProvider課。它從實例的元數據中獲取IAM憑證(訪問/祕密密鑰)。在具有允許訪問S3的策略的IAM角色下啓動您的實例。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(新InstanceProfileCredentialsProvider()) .build();

Source reference

0

如果您的用戶需要訪問上傳到S3,那麼他們將需要訪問密鑰,沒有什麼可以做的。

雖然你可以做的是給他們有權限上傳文件到S3的密鑰,但沒有讀/下載權限。因此,您需要具有PutObject權限的上傳策略以及具有「列表/獲取」權限的讀取策略。