AWS S3「阻止所有公開訪問」設定說明
更新日期: 2024 年 12 月 18 日
本文為 圖片上傳 AWS S3 系列教學,第 6 篇:
- AWS S3 是什麼?
- boto3 與 django-storages:如何在 Django 中對接 AWS S3
- AWS S3 與 IAM:圖片上傳功能的權限管理指南
- S3 與 Postgres 的比較與應用
- Amazon S3 物件所有權設定解析
- AWS S3「阻止所有公開訪問」設定說明 👈 所在位置
- Amazon S3 儲存桶版本控制完整指南
- 如何設定 S3 儲存桶的「預設加密」?—— 初學者指南
- S3 儲存桶標籤(Tags)簡單介紹:讓你的 S3 管理更輕鬆!
- AWS S3 物件鎖定功能入門指南
- AWS S3 公開存取權完整指南
- AWS CORS 預檢請求與設定指南
- AWS IAM 設定教學:生成訪問密鑰以用於 S3 配置
- django-storages 基本配置:讓應用程式連接 S3 存儲桶
- Django-storages 的完整配置教學:從隱密性到快取控制
- Django-storages 完整配置指南:從文件存儲到訪問路徑
- Django-storages 配置:環境變數設定
- Django-storages 與 STORAGES 配置:未來相容性的最佳實踐
- 如何在 Django 中移除 DEBUG URL 的靜態檔案配置
建議閱讀本文前,先閱讀完 圖片上傳功能 系列文
「阻止所有公開訪問」是 AWS S3 提供的安全設定,用來強制阻止所有未經授權的外部存取,確保儲存桶和物件不會意外公開。
主要影響
- 任何人 無法未經身份驗證,直接訪問你的儲存桶或物件(例如:透過公開網址存取)。
- 無法透過「公開存取」的方式(如匿名使用者)讀取、修改或刪除儲存桶中的物件。
- 這個設定會覆蓋儲存桶政策 和 存取控制清單(ACL),阻止任何形式的公開存取設定。
不影響的部分
- 已經獲得授權的使用者,或 AWS 帳戶仍然可以讀取或上傳物件到儲存桶。
- 例如:你的應用程式(如透過身份驗證的後端服務)仍然可以安全地操作 S3 儲存桶。
當「阻止所有公開訪問」不適合的情況
在某些特定需求下,啟用「阻止所有公開訪問」並不適用,反而會妨礙你的使用場景。
例如:
需要公開讀取的場景
有時候,你可能希望儲存桶中的物件(例如圖片、影片、靜態檔案),能夠被所有人透過公開網址直接訪問,而不需身份驗證。
這類需求常見於:
- 網站公開圖片:網站上的圖片需要公開讀取,讓所有訪客可以直接查看。
- 靜態檔案托管:將網站的 CSS、JavaScript、PDF 文件等檔案存放在 S3,並讓訪客能夠直接存取。
- 資源分享:透過公開網址分享檔案給任何人,例如使用者上傳的圖片需要被其他人看到。
啟用「阻止所有公開訪問」時,AWS 會強制覆蓋任何公開權限設定,包括:
- 儲存桶政策(Bucket Policy)中允許的公開讀取。
- 物件級別的 ACL(Access Control List)公開設定。
因此,即使你手動設定允許公開存取,這個保護機制也會將公開設定封鎖,導致你的內容無法被所有人訪問。
不會帶來安全風險的公開存取
有些場景下,公開存取的內容本身不涉及敏感資料,沒有安全風險,例如:
- 公開的產品圖片或影片。
- 公共文件(例如可下載的操作手冊或白皮書)。
- 公開的 API 文件、開發者工具或其他靜態資源。
在這種情況下,完全封鎖公開存取會造成不必要的限制,影響內容的正常公開分享與訪問。
搭配其他安全機制的公開內容
即使允許公開讀取,你仍然可以透過其他安全機制保護你的儲存桶:
- 使用儲存桶政策,控制哪些物件可以公開存取。
- 僅對某些特定目錄或檔案設定公開存取,避免其他物件誤設為公開。
- 使用 AWS CloudFront 搭配簽名 URL,提供有時效性的存取權限。
在這樣的安全設計下,「阻止所有公開訪問」的全域保護機制反而會造成不便,影響應用程式的彈性設定。
結論
「阻止所有公開訪問」是 AWS 提供的一種安全保護鎖,適用於完全禁止未經授權的存取,確保儲存桶的內容不會意外公開。
但在以下情況下,它不適用:
- 需要公開讀取:例如網站圖片、靜態檔案或資源分享。
- 內容本身不敏感:公開訪問的資料不會帶來安全風險。
- 搭配其他安全控制:使用儲存桶政策或其他方式,控制公開內容的範圍與安全性。
在這類情境下,你應該不要啟用「阻止所有公開訪問」,而是使用儲存桶政策來精確控制權限,滿足需求的同時兼顧安全性。
這樣可以更靈活地達到「讓內容公開檢視」的目標,同時避免過度限制導致功能無法正常運作。