2026年9月30日 · 閱讀時間 6 分鐘

如何公開 Amazon S3 儲存貯體

新的 S3 儲存貯體會封鎖所有公開存取,而且 ACL 預設為停用,所以以前每個物件上的「公開」按鈕已經沒有作用了。現在的公開讀取要靠儲存貯體政策。

步驟 1:允許公開的儲存貯體政策

  1. 在 S3 主控台開啟儲存貯體,前往 Permissions 分頁。
  2. 在 Block public access (bucket settings) 下選擇 Edit。
  3. 取消勾選與 bucket and access point policies 有關的兩項設定。兩項 ACL 設定可以保持開啟,因為政策不會用到 ACL。
  4. 儲存並確認。

如果帳戶層級也開啟了這項設定(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)通常比較便宜。