我想創建一個用於將特定對象(PUT)上傳到Amazon S3存儲桶的所謂「預簽名」URL。預簽名URL和x-amz-acl
到目前爲止這麼好。我正在使用Python庫boto來創建一個包含所有必要內容(過期,簽名等)的URL。該URL看起來是這樣的:
https://<bucketname>.s3.amazonaws.com/<key>?Signature=<sig>&Expires=<expires>&AWSAccessKeyId=<my key id>&x-amz-acl=public-read
注意最後一個參數。
至少,據我瞭解,這限制了使用此URL將對象上傳到特定存儲桶中的特定密鑰並限制將在對象上設置爲「公開讀取」的預設ACL的人員。
儘管我最後的陳述很不正確。
事實證明,如果你使用這個網址,你可以與X-AMZ-ACL 頭(而不是在查詢字符串參數具有相同的名稱,你必須將下列設置爲簽名檢查成功):
- 將其設置爲「public-read」。該對象的權限將由兩個條目組成:「讀」爲「每個人」和「完全控制」爲存儲桶擁有者。這是相當期待的。
- 忽略x-amz-acl標題。對象的權限將與每個桶默認值相同(桶擁有者具有完全控制權)。爲什麼?
- 將其設置爲「公開讀寫」。結果與(1)中完全相同。
- 將其設置爲「已認證讀取」。 「認證用戶」獲得「讀取」權限,存儲桶擁有者完全控制。
- 將其設置爲「bucket-owner-read」。結果與(2)完全相同。桶擁有者完全控制,沒有其他權限被定義。
- 將其設置爲「bucket-owner-full-control」。不出所料,水桶擁有者將完全控制。
- 將其設置爲不存在的ACL ACL名稱並出現錯誤。
如此看來,這
- 的X-AMZ-ACL 頭不參加簽名檢查部件,因爲你可以隨意改變它,並請求成功。但是,在簽名檢查期間,查詢字符串參數肯定是是。
- x-amz-acl 查詢字符串參數不會影響對象的權限直接,因爲它不會自行處理。
- 如果發送的是X-AMZ-acl標頭,得到的權限永遠
- 剷鬥業主更嚴格的,比他們在默認情況下。
- 對非桶擁有者的限制較少。
- 但是,它們可以是更具限制性的對於非桶擁有者。也就是說,如果在查詢字符串中指定了
x-amz-acl=public-read
,則可以將x-amz-acl
標題設置爲authenticated-read
,而不是公開可讀的對象獲取只能由經過身份驗證的用戶讀取的對象。
什麼是X-AMZ-ACL QS參數和頭之間的真正關係,即去同名?有沒有辦法限制對象的權限,即通過PUT
請求上傳到所謂的「預先簽名」URL?
既然你是唯一一個在這個問題上花費了一些努力的人,那麼只要你得到賞金,即使答案不幸,根本沒有幫助我。 – shylent
對不起,答案不會更有幫助;只是試圖傳遞我對這個主題的任何知識。 – jdotjdot