EC2 Instance 配置一個 IAM Role,Role 關聯了一個 IAM Policy,Policy 則明確定義了 EC2 可以對 S3 Bucket 執行的操作權限
介紹
```bash showLineNumbers 作業環境:Ubuntu + EC2 服務管理: 主要應用:IAM + S3 功能重點: a. 角色:為 EC2 Instance 配置一個 IAM Role b. 權限:將這個 Role 關聯了一個 IAM Policy c. 權限內容:這個 Policy 則明確定義了 EC2 可以對 S3 Bucket 執行的操作權限
## 核心邏輯
這套機制的核心是「最小權限原則 (Principle of Least Privilege)」,這是 AWS 重要的安全實踐。簡單來說,就是只給予資源完成任務所需的最小權限,不多也不少。
可以將這四個元件的關係比喻為:
1. EC2 Instance:一個需要存取 S3 的「人」。
2. IAM Role:這是一個「通行證」或「身分」。你把這個通行證給 EC2 Instance,它就能使用這張通行證所賦予的權限。
3. IAM Policy:這是一份「權限清單」。它具體規定了這張通行證能做什麼事,例如「讀取」S3 裡的檔案、還是「寫入」新檔案,甚至「刪除」檔案。
4. S3 Bucket:一個需要被保護的「資源」或「資料庫」。
所以,你的目的就是:建立一個「權限清單 (Policy)」,將其綁定到一個「通行證 (Role)」上,然後把這個「通行證 (Role)」賦予給你的「EC2 Instance」。
## 針對 Bucket 和 Role 和 Policy 的命名規則
目前是以 專案/應用程式 為主導
這種方法是最常見的,因為它能將所有相關資源都歸類到一個專案下,方便管理。
命名結構: project-environment-service-resource
舉例:
1. S3 Bucket: myproject-prod-app-data (表示「我的專案」在「正式環境」用於「應用程式」的「資料」儲存)
2. IAM Role: myproject-prod-app-role
3. IAM Policy: myproject-prod-app-policy
這種方式的優點是:你只需要看開頭,就能知道這個資源是屬於哪個專案和環境的。
## 權限 (Policy)
給一個最小的 S3 存取範例:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject"
],
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
- s3:PutObject → 允許上傳 (你 worker 要存檔)
- s3:GetObject → 允許下載 (debug 或檢查用)
- arn:aws:s3:::your-bucket-name/* → 限制只在這個 bucket 裡的物件
決定身份來源 (Role)
你現在跑在 AWS VM (EC2) 上 → 最乾淨的方式是用 Instance Profile (IAM Role for EC2),這樣你不需要在程式碼裡塞金鑰。
去 IAM Console 建一個 Role
- 類型選「EC2」
- 綁定一個允許 S3 的 Policy
回到 EC2 → 修改 IAM Role → 把 Role 掛到 EC2
- 去 EC2 Console → Instances
- 點你正在跑的那台 VM
- 上方按 Actions → Security → Modify IAM role
- 在下拉選單選你剛才建的 EC2-S3-Access-Role
- 儲存 → 幾秒內生效