pre-signed-url · L6

S3 生態與進階(完整筆記)

這是 pre-signed URL 學習路線圖的 Level 6,最後一站,拉高視野。前面你已經把「一條 URL 為什麼免帳密就能存取私有物件」講得清清楚楚。這一關讓你能在更大的地圖上定位它:它是 S3/SigV4 的公開標準(不綁 MinIO)、能跨 store 遷移;再帶你認識三個進階題——POST policy 上傳、multipart pre-signed、SigV4a。學完,你就能對整個 pre-signed URL 生態侃侃而談。

它是 S3/SigV4 標準,天生可遷移

pre-signed URL 不是 AWS 或 MinIO 的專屬招式——它是「S3 API + SigV4 簽章」這套公開規範的一部分。任何相容 S3 的儲存服務都吃這一套。

這解釋了 Level 4 那個現象:AWS SDK 產的 URL、MinIO SDK 產的 URL,格式一模一樣、互相認得。因為它們都只是照 SigV4 規範吐出那串 X-Amz-*。實務上這代表:

可遷移性的價值:本機開發用 MinIO、正式環境用 S3 或 R2,同一套產 URL 的 code 跑遍全部。學會 pre-signed URL=學會一個跨廠商的通用技能,不是綁死一家。

(小提醒:各家對進階功能的支援度不一,尤其 POST policy、multipart、SigV4a 這些——用之前查一下該 store 的相容性文件。)

進階一:POST policy 上傳(限制內容的直傳)

presigned PUT 綁不住上傳內容(Level 5:body 沒被簽);POST policy 是「能限制內容」的直傳方案,特別適合瀏覽器表單上傳。

做法概念:後端產一份 policy(一份 JSON,列出允許條件)+ 一段簽章,交給前端;前端用 HTML form 的 multipart/form-data POST 到 S3。S3 會強制 policy 裡的條件:

跟 presigned PUT 的取捨:PUT 簡單、一條 URL 搞定,但內容不設限;POST policy 複雜一點(要組 policy),但能卡大小/型別——要讓不受信任的前端直傳,POST policy 通常更安全。

進階二:multipart pre-signed(大檔分片上傳)

單條 presigned PUT 一次只傳一個物件、一個 body;檔案很大(幾 GB)時,用 multipart upload 把它切成很多片、每片各簽一條 presigned URL 平行傳。

流程概念:

好處:大檔可平行加速、單片失敗只重傳那片(不用整個重來)、還能斷點續傳。代價是流程比單條 PUT 複雜——小檔別用,大檔才划算。

進階三:SigV4a(一次簽名、多 region 通用)

SigV4a 是 SigV4 的擴充版,讓「同一個簽章能在多個 region 驗證」——為 S3 Multi-Region Access Points(多區存取點)這類跨區場景設計的。

跟你學的 SigV4 比,關鍵差別:

SigV4(你學的)SigV4a
演算法AWS4-HMAC-SHA256(對稱 HMAC)AWS4-ECDSA-P256-SHA256(非對稱 ECDSA)
region 綁定Signing Key 綁單一 region(Level 3 的四次鏈式推導含 region)簽章可跨多 region 驗證,簽的時候不必知道最終落哪個 region
server 存什麼共享 secret(兩邊都有)只存公鑰(非對稱的安全好處)

一句話定位:SigV4a=為「一份簽章要在多個 region 都認」而生的升級版,用非對稱簽章取代對稱 HMAC。日常單區用的 pre-signed URL 用 SigV4 就夠;碰到 Multi-Region Access Points 才需要它。知道它存在、知道它解決什麼問題,就足以侃侃而談。

你現在能講的整張地圖

到這裡,pre-signed URL 從心智模型到底層機制到落地到生態,你都串得起來了。

參考來源