簡體   English   中英

如何創建僅在 6 天后過期的 s3 下載鏈接

[英]How to create an s3 download link which will expire only after 6 days

我想生成一個 s3 鏈接來下載文件,該鏈接應該至少存在 6 天。 我曾嘗試使用選項 InstanceProfileCredentialsProvider(false)(僅工作 24 小時)、ProfileCredentialsProvider(甚至不創建鏈接)、訪問密鑰

IAM 用戶的訪問密鑰有效,但此用戶密鑰將在幾天后過期,因此每次我必須在代碼中更改相同的內容時,我認為在代碼中公開密鑰不是一個好習慣。

有沒有其他方法可以生成 s3 下載鏈接,該鏈接只會在 6 天后過期。

以下是代碼片段:-

AmazonS3 s3Client  = AmazonS3ClientBuilder.standard().withCredentials(new InstanceProfileCredentialsProvider(false))
                    .build();
java.util.Date expiration = new java.util.Date();
long milliSeconds = expiration.getTime();
milliSeconds += 1000 * 60 * 60 * 24 * 7; // Add 7 days.
expiration.setTime(milliSeconds);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("s3bucket",
                    "fileLocationpath");
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);
link =  s3Client.generatePresignedUrl(generatePresignedUrlRequest);

您實施解決方案的方式的總體思路是 AWS 建議的正確方式。

關於在 80 天后過期的用戶密鑰,因為用戶密鑰不會自動過期,並且在您停用它們之前它們是有效的,我想這是您出於安全原因設置的一個輪換憑據的過程。 這確實是一個非常好的做法。 為了避免在代碼中硬編碼這些憑證,這是一種不好的做法,您可以將憑證設置為環境變量或將它們存儲在實例的AWS 憑證文件中。 通過這樣做,您可以輕松地在部署管道中輪換它們。

當您啟動 ec2 實例時,您可以通過用戶數據進行 ./aws/credentials 配置。 您將運行“aws configure”,然后傳遞您的 aws 憑證以在您的 ec2 實例中設置它們。 理想情況下,您將擁有一個 CI/CD 管道,它將自動化整個過程,而不是手動執行此操作。

請參閱以下 AWS 推薦的最佳實踐:

s3 存儲桶的預簽名 URL - 推薦方法

https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/

AWS 訪問密鑰最佳實踐

https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html

配置和憑證文件設置

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM