AWS S3 與 IAM:圖片上傳功能的權限管理指南
更新日期: 2024 年 12 月 18 日
本文為 圖片上傳 AWS S3 系列教學,第 3 篇:
- 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(Simple Storage Service) 實現圖片上傳功能時,IAM(Identity and Access Management) 和 S3 Bucket 之間的權限設定至關重要。
本文將帶你理解兩者如何配合,確保資源安全地被管理及存取。
IAM 與 S3 Bucket 的基本關係
- IAM:AWS 的身份驗證與權限管理服務,用於控制「誰」可以對資源執行「哪些操作」。
- S3 Bucket:存放圖片、檔案等物件的容器,負責「哪些資源」可以被存取以及「如何被保護」。
兩者協同運作,提供靈活且安全的存取控制機制。
IAM 的角色:權限管理
IAM 控制存取權限,確保只有授權的使用者或應用程式能執行指定操作。
例如:
s3:PutObject
:允許將圖片上傳到指定 Bucket。s3:GetObject
:允許下載圖片或物件。s3:DeleteObject
:允許刪除圖片或物件。s3:ListBucket
:允許列出 Bucket 內的物件列表。
S3 Bucket 的角色:資源存取設定
S3 Bucket 透過多種機制進行存取保護:
- Bucket Policy:設定存取規則,定義哪些 IAM 使用者或角色可存取特定 Bucket。
- ACL(Access Control List):設定物件層級的細緻權限。
- Block Public Access:防止 Bucket 資源被公開存取,提升安全性。
IAM 與 S3 Bucket 的權限分工
在實現圖片上傳功能時,IAM 和 S3 Bucket 的角色分工如下:
功能 | IAM 負責 | S3 Bucket 負責 |
---|---|---|
上傳圖片 | IAM Policy 允許用戶使用 s3:PutObject | Bucket Policy 允許特定 IAM 主體上傳圖片 |
讀取圖片 | IAM Policy 允許用戶使用 s3:GetObject | Bucket Policy 控制公開或授權存取權限 |
刪除圖片 | IAM Policy 允許用戶使用 s3:DeleteObject | Bucket Policy 控制刪除權限 |
列出圖片 | IAM Policy 允許用戶使用 s3:ListBucket | Bucket Policy 定義列出物件的權限 |
權限設定範例
IAM Policy 設定
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject", "s3:GetObject"],
"Resource": "arn:aws:s3:::trico-django-bucket/*"
}
]
}
這段 IAM Policy 允許將圖片上傳並讀取 trico-django-bucket
的物件。
Bucket Policy 設定
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/YourUserName"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::trico-django-bucket/*"
}
]
}
這段 Bucket Policy 限制特定 IAM 使用者上傳圖片到 trico-django-bucket
。
圖書館借書系統比喻
將 S3 和 IAM 的角色比喻成圖書館借書系統,有助於理解:
- S3 Bucket 就像「圖書館」,存放書籍(圖片或物件)。
- IAM 則是「借書證」,用來規定誰可以進入圖書館,並執行借書、還書等操作。
圖片上傳的流程
- 小明(應用程式) 帶著「借書證(IAM 權限)」來到圖書館(S3 Bucket)。
- 圖書館管理員(S3 Bucket) 檢查小明的權限:
- 你有放書(
s3:PutObject
)的權限嗎?
- 你有放書(
- 如果權限有效,小明就可以將書(圖片)放入圖書館。
結論
透過 IAM 和 S3 Bucket 的雙重控制機制,你可以有效地管理圖片上傳功能的安全性與存取權限:
- IAM:負責身份驗證和操作權限的授權。
- S3 Bucket:負責具體資源的存取控制與保護。
這樣的設計,讓你的圖片上傳功能在安全且可控的環境下運作,避免未授權的存取行為。