AWS S3 與 IAM:圖片上傳功能的權限管理指南

更新日期: 2024 年 12 月 18 日

在使用 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 透過多種機制進行存取保護:

  1. Bucket Policy:設定存取規則,定義哪些 IAM 使用者或角色可存取特定 Bucket。
  2. ACL(Access Control List):設定物件層級的細緻權限。
  3. Block Public Access:防止 Bucket 資源被公開存取,提升安全性。

IAM 與 S3 Bucket 的權限分工

在實現圖片上傳功能時,IAM 和 S3 Bucket 的角色分工如下:

功能IAM 負責S3 Bucket 負責
上傳圖片IAM Policy 允許用戶使用 s3:PutObjectBucket Policy 允許特定 IAM 主體上傳圖片
讀取圖片IAM Policy 允許用戶使用 s3:GetObjectBucket Policy 控制公開或授權存取權限
刪除圖片IAM Policy 允許用戶使用 s3:DeleteObjectBucket Policy 控制刪除權限
列出圖片IAM Policy 允許用戶使用 s3:ListBucketBucket 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 則是「借書證」,用來規定誰可以進入圖書館,並執行借書、還書等操作。

圖片上傳的流程

  1. 小明(應用程式) 帶著「借書證(IAM 權限)」來到圖書館(S3 Bucket)。
  2. 圖書館管理員(S3 Bucket) 檢查小明的權限:
    • 你有放書(s3:PutObject)的權限嗎?
  3. 如果權限有效,小明就可以將書(圖片)放入圖書館。

結論

透過 IAM 和 S3 Bucket 的雙重控制機制,你可以有效地管理圖片上傳功能的安全性與存取權限:

  • IAM:負責身份驗證和操作權限的授權。
  • S3 Bucket:負責具體資源的存取控制與保護。

這樣的設計,讓你的圖片上傳功能在安全且可控的環境下運作,避免未授權的存取行為。

Similar Posts