2026年9月30日 · 閱讀時間 6 分鐘
如何公開 Amazon S3 儲存貯體
新的 S3 儲存貯體會封鎖所有公開存取,而且 ACL 預設為停用,所以以前每個物件上的「公開」按鈕已經沒有作用了。現在的公開讀取要靠儲存貯體政策。
步驟 1:允許公開的儲存貯體政策
- 在 S3 主控台開啟儲存貯體,前往 Permissions 分頁。
- 在 Block public access (bucket settings) 下選擇 Edit。
- 取消勾選與 bucket and access point policies 有關的兩項設定。兩項 ACL 設定可以保持開啟,因為政策不會用到 ACL。
- 儲存並確認。
如果帳戶層級也開啟了這項設定(S3 側邊欄中的 Block Public Access settings for this account),它的優先順序高於儲存貯體設定,同樣必須允許政策。
步驟 2:加入公開讀取的儲存貯體政策
同樣在 Permissions 中,編輯 Bucket policy,貼上以下內容並換成你的儲存貯體名稱:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket/*"
}
]
}
這只允許讀取物件,不允許列出儲存貯體內容。如果只想公開一個資料夾,請縮小資源範圍,例如 arn:aws:s3:::your-bucket/public/*。
用 AWS CLI 的話,同樣的兩個步驟是:
aws s3api put-public-access-block --bucket your-bucket \
--public-access-block-configuration \
BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=false,RestrictPublicBuckets=false
aws s3api put-bucket-policy --bucket your-bucket --policy file://policy.json步驟 3:找出公開 URL
現在可以透過虛擬主機樣式的 URL 存取物件:
https://your-bucket.s3.eu-central-1.amazonaws.com/2026/09/report.pdf
請換成你儲存貯體所在的區域。如果這個位址傳回 AccessDenied,代表 Block Public Access 設定仍在封鎖政策,或是政策中的儲存貯體名稱打錯了。
更安全的替代方案:CloudFront 搭配私人儲存貯體
如果你不想開放儲存貯體本身,可以保持 Block Public Access 開啟,並建立一個以該儲存貯體為來源、使用 Origin access control (OAC) 的 CloudFront 分佈。CloudFront 會提供一條只讓該分佈讀取物件的儲存貯體政策。這樣你就能在自己的網域上使用 HTTPS 和快取,儲存貯體也能維持私人。請參考為儲存貯體連結設定自訂網域。
常見問題
為什麼「Make public using ACL」不能用了?
從 2023 年 4 月起,新的儲存貯體會把 Object Ownership 設為 Bucket owner enforced,也就是停用 ACL。公開存取必須透過儲存貯體政策或 CloudFront 來提供。
公開的儲存貯體會讓別人列出我的檔案嗎?
使用上面的政策就不會。它只允許 s3:GetObject。要列出內容,需要對儲存貯體本身授予 s3:ListBucket,而這項權限不應該公開授予。
公開儲存貯體會讓 AWS 帳單變多嗎?
別人下載檔案時,你需要支付請求費用和輸出資料傳輸費用。對於經常分享的檔案,使用 CloudFront 或沒有輸出流量費用的服務供應商(例如 Cloudflare R2)通常比較便宜。