一句話:pre-signed URL 是「一個完整的 HTTP 請求,被預先簽好名、整個塞進一條網址」——誰在期限內點它,S3 就當它是簽的人本人發的請求。
你在 S3 / MinIO 上有一張私有照片,直接用瀏覽器打它的網址會被擋(AccessDenied)。你想「臨時、限時」讓某人下載它,又不想:把整個 bucket 設成公開、也不想把自己的 AWS 帳密交出去。pre-signed URL 就是為這個而生——後端產一條限時網址,對方點了就能存取,全程免帳密。
回想一般 API 認證:把「我是誰、有沒有權限」放在 Authorization header,每次現簽。pre-signed URL 只是把這件事提前算好、改放進 query string:後端此刻先算好簽章,連同「誰簽的、有效多久」全寫進網址 ? 之後。於是這條網址本身就是一個「帶著有效簽章的請求」。
比喻:它像一張老闆預先簽好、限時的提貨單。倉庫(S3)不認人、只認單上的簽名和期限;誰拿著單、在到期前來,倉庫就照放。
https://my-bucket.s3.amazonaws.com/photo.jpg
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIA...%2F20260710%2Fap-northeast-1%2Fs3%2Faws4_request
&X-Amz-Date=20260710T091100Z
&X-Amz-Expires=900
&X-Amz-SignedHeaders=host
&X-Amz-Signature=aeeed9bb...d404
看得出來——它就是原本的物件網址,後面接了一串 X-Amz-* query 參數:誰簽的、什麼時候簽、有效幾秒、簽了哪些東西、以及那段簽章。這些參數怎麼算出來,是 Level 3 的主題。這裡先記住:pre-signed URL=物件網址 + 一串把「授權」凝結進去的 query 參數。