Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

AWS S3 公開存取權完整指南

最後更新:2025年3月4日資料庫

本文為 圖片上傳 AWS S3 系列教學,第 1 篇:

  1. AWS S3 是什麼?
  2. boto3 與 django-storages:如何在 Django 中對接 AWS S3
  3. AWS S3 與 IAM:圖片上傳功能的權限管理指南
  4. S3 與 Postgres 的比較與應用
  5. Amazon S3 物件所有權設定解析
  6. AWS S3「阻止所有公開訪問」設定說明
  7. Amazon S3 儲存桶版本控制完整指南
  8. 如何設定 S3 儲存桶的「預設加密」?—— 初學者指南
  9. S3 儲存桶標籤(Tags)簡單介紹:讓你的 S3 管理更輕鬆!
  10. AWS S3 物件鎖定功能入門指南
  11. AWS S3 公開存取權完整指南 👈 所在位置
  12. AWS CORS 預檢請求與設定指南
  13. AWS IAM 設定教學:生成訪問密鑰以用於 S3 配置
  14. django-storages 基本配置:讓應用程式連接 S3 存儲桶
  15. Django-storages 的完整配置教學:從隱密性到快取控制
  16. Django-storages 完整配置指南:從文件存儲到訪問路徑
  17. Django-storages 配置:環境變數設定
  18. Django-storages 與 STORAGES 配置:未來相容性的最佳實踐
  19. 如何在 Django 中移除 DEBUG URL 的靜態檔案配置

建議閱讀本文前,先閱讀完 圖片上傳功能 系列文

AWS S3 提供強大的存儲功能,但預設設置下,公開存取權 是封鎖的,這是為了保護資料安全。

然而,有些情境下,我們需要將 S3 存儲桶(Bucket)或物件設置為公開存取,例如分享靜態資源或網站內容。

本篇文章將帶你了解什麼是公開存取權、何時需要使用、潛在風險以及如何正確且安全地設置公開存取權限。


什麼是公開存取權?

公開存取權 指的是允許所有人(包括未經身份驗證的使用者),對你的 S3 存儲桶和物件進行存取操作,例如:

  • 讀取:下載或查看檔案。
  • 寫入:上傳或覆蓋檔案。
  • 刪除:移除檔案。

這種存取不需要 AWS 帳戶或 IAM 身份驗證,只要擁有物件的 URL,就能直接訪問。


什麼情況下需要啟用「公開存取權」?

公開網站內容

  • 如果你的 S3 Bucket 用於存放靜態網站內容(例如 HTML、CSS、JavaScript、圖片),你需要讓訪客可以自由讀取這些檔案。
  • 例如:部落格圖片、產品頁面的 CSS 檔案。

靜態資源或檔案分享

  • 若你需要公開分享特定的資源(如圖片、影片或 PDF 文件),可透過 S3 提供公開讀取權限。
  • 例如:分享活動海報、可供下載的產品手冊等。

第三方服務存取

  • 有些外部應用程式或工具需要存取你的 S3 檔案,若無身份驗證機制,啟用公開存取可簡化流程。

風險與安全考量

啟用公開存取權雖然方便,但同時也存在一定風險:

資料洩漏

  • 未經授權的使用者可查看或下載敏感資料。
  • 例如:誤將用戶資料、私密文件設為公開存取。

資料覆寫或刪除

  • 如果錯誤授予「寫入」或「刪除」權限,惡意使用者可能會覆寫或刪除你的檔案。

資源濫用

  • 公開的物件可能被大量訪問,導致 S3 流量增加,進而提高成本。

如何安全地啟用公開存取權?

僅授予「讀取」權限

要安全地設置公開讀取權限,需在 Bucket Policy 中明確授予 s3:GetObject 動作。

範例:公開讀取權限

將以下範例設定貼到 Bucket Policy 中:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}
  • Principal: "*" 表示允許所有人存取。
  • Action: "s3:GetObject" 限定只允許讀取操作。
  • Resource 包含你的 Bucket 名稱及所有物件(/* 表示所有檔案)。

限制存取來源

你可以進一步限制存取來源,例如:

  • 限制 IP 地址:只允許特定網段的訪客存取。
  • 限制 Referer:只有通過特定網站鏈接的用戶才能訪問。

範例:限制 Referer 存取

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*",
      "Condition": {
        "StringLike": {
          "aws:Referer": "https://your-website.com/*"
        }
      }
    }
  ]
}

避免公開「寫入」權限

千萬不要授予 s3:PutObject 或 s3:DeleteObject 權限給所有人,否則任何人都能上傳、覆蓋或刪除你的檔案。

使用預簽名 URL 進行控制

如果檔案需要暫時公開存取,但不想設置為永久公開,可以使用預簽名 URL。

  • 預簽名 URL 是帶有時效性的存取鏈接,僅允許特定時間內存取檔案。

範例:生成預簽名 URL

aws s3 presign s3://your-bucket-name/your-file-name --expires-in 3600
  • --expires-in 設定鏈接的有效時間(單位:秒)。

啟用公開存取權的步驟

步驟:檢查並關閉「封鎖公開存取」

  1. 進入 S3 控制台,選擇你的 Bucket。
  2. 進入 「權限」(Permissions) 分頁。
  3. 找到 「封鎖公開存取 (Block Public Access)」,點擊 「編輯」。
  4. 取消勾選 「封鎖所有公開存取權」,然後儲存更改。

步驟:設定 Bucket Policy

  1. 在同一個 「權限」 分頁中,找到 Bucket Policy 區塊。
  2. 點擊 「編輯」,貼上公開讀取的 JSON 設定。
  3. 儲存變更。

步驟:測試存取 URL

  • 上傳一個檔案至 S3 Bucket。
  • 獲取物件的 URL,打開瀏覽器測試是否能正常訪問。

結論

「公開存取權」適合用於公開內容的場景,如靜態網站文件或資源分享,但啟用時需謹慎管理,避免資料洩漏或成本增加。

  • 僅授予讀取權限,不要授予寫入或刪除權限。
  • 使用安全控制手段,如限制存取來源或生成預簽名 URL。
  • 定期檢查 S3 設定,避免意外公開敏感資料。
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

資料庫

目錄

  • 什麼是公開存取權?
  • 什麼情況下需要啟用「公開存取權」?
  • 公開網站內容
  • 靜態資源或檔案分享
  • 第三方服務存取
  • 風險與安全考量
  • 資料洩漏
  • 資料覆寫或刪除
  • 資源濫用
  • 如何安全地啟用公開存取權?
  • 僅授予「讀取」權限
  • 限制存取來源
  • 避免公開「寫入」權限
  • 使用預簽名 URL 進行控制
  • 啟用公開存取權的步驟
  • 步驟:檢查並關閉「封鎖公開存取」
  • 步驟:設定 Bucket Policy
  • 步驟:測試存取 URL
  • 結論