2016-02-18 79 views
1

我試圖設置2100年的到期日期,但它說它是無效的。 或者是否有可能以某種方式使它永久存在?amazon s3生成鏈接的最長過期時間是多少?

+0

可公開訪問的文件,可以用簡單的URL'http://s3.amazonaws.com/[bucket]/訪問[鍵]'。所以我認爲你正在談論私人文件,你在那裏簽名了url來訪問文件。 2100年應該在到期時間內罰款。你能分享你的代碼來發現問題嗎? –

+0

Calendar calendar = Calendar.getInstance(); calendar.set(2100,Calendar.JANUARY,1); EXPIRATION_DATE = calendar.getTime(); generatePresignedUrlRequest.setExpiration(EXPIRATION_DATE); – user3000606

回答

6

對於使用S3簽名版本2簽名的URL,時間限制似乎是2038年Unix紀元的結束時間,但簽名版本4的限制時間爲7天,因爲V4中的簽名密鑰本身具有最高有效期爲7天。

如果您不熟悉V2和V4之間的差異,區分它們的一個簡單方法是V2 URL包括&Expires=,而V4 URL使用&X-Amz-Expires=

但是,重要的是,如果您停用用於簽署URL的IAM用戶憑證(訪問密鑰/祕密),那麼您應該在某個時間點計劃執行的操作,使用任一算法的簽名立即失效,因爲憑據的輪換被認爲是最佳做法(或者,如果不是這樣,那麼因爲您的憑證可能有一天會受到損害,或者被懷疑已經被入侵)。

因此,S3對象的簽名URL不應被視爲永久性的。

如果不希望公開對象,那麼下一個最好的方法是針對您的應用程序(或您控制的任何類型的HTTP端點)來驗證用戶下載對象的權限(可能基於您的應用程序的Cookie) ,然後生成一個短期簽名的URL並返回重定向。瀏覽器應該立即跟蹤它並獲取對象,但不緩存重定向,因爲您已經指出原始URL應該用於後續請求,並且響應代碼爲302

從你的應用程序中的HTTP響應就會是這個樣子的顯着標題:

HTTP/1.1 302 Found 
Location: https://...generated-signed-url-here... 
相關問題