examlab .net 用最有效率的方法,考取最有價值的證照
本篇導覽 約 18 分鐘

IAM 基礎與角色:GCP 的安全骨幹

3,600 字 · 約 18 分鐘閱讀 ·

為 ACE 考試掌握 Google Cloud 身分與存取管理 (IAM)。了解角色、政策、最小權限原則以及資源階層繼承。

立即做 20 題練習 → 免費 · 不用註冊 · ACE

理解 Google Cloud IAM (身分與存取管理)

身分與存取管理 (Identity and Access Management, IAM) 是 Google Cloud 的安全核心。對於 Associate Cloud Engineer (ACE) 考試來說,IAM 不僅僅是「誰能進入系統」,更重要的是「誰能在特定的資源上執行什麼動作」。IAM 讓管理員能以細粒度 (fine-grained) 的方式控制存取權限,確保系統的安全與合規性。

在 GCP 中,IAM 的基本邏輯可以簡化為一個公式:「誰 (身分) + 能做什麼 (角色) + 對哪個資源 (資源)」。這三個要素構成了 IAM 政策 (Policy)。

白話文解釋

為了讓初學者更容易理解 IAM 的運作,我們可以使用以下三個類比:

1. 辦公大樓的門禁卡系統 (瑞士刀類比)

想像一棟現代化的辦公大樓(GCP 資源):

  • 身分 (Identity):你是誰(員工、訪客、清潔工)。
  • 角色 (Role):你的職位賦予你的權限。例如,「安全主管」角色可以進入所有房間(基本角色),而「工程師」角色只能進入機房(預定義角色)。
  • 權限 (Permission):門禁卡上的具體編碼,例如「刷卡開門」或「調整冷氣溫度」。

如果你只是拿著一張普通門禁卡(基本角色),你可能能進出大樓,但如果你需要更專業的功能(如修理伺服器),你需要特定的工具包(預定義角色)。

2. 圖書館的管理系統 (圖書館類比)

想像一個大型圖書館:

  • 組織 (Organization):整座圖書館系統。
  • 專案 (Project):特定的藏書區(如「科學區」)。
  • 資源 (Resource):具體的一本書或一台電腦。
  • 角色 (Role)
    • 管理員 (Admin):可以借書、買書、丟書、甚至改建圖書館。
    • 讀者 (Reader):只能看書,不能帶走或修改。
    • 特約研究員 (自定義角色):可以進入禁書區,但不能借出。

權限是繼承的:如果你是科學區的管理員,你自然擁有科學區內所有書籍的管理權限。

3. 開書考試的准考證 (開書考試類比)

在一場大型考試中:

  • 身分:考生。
  • 政策:准考證上寫明的規則。
  • 繼承:如果考場規則規定「所有考場禁止交談」,那麼無論你在哪一個教室(專案/資源),這條規則都適用。
  • 角色:監考老師有「監考」角色,他可以走動(檢視)和沒收手機(刪除),而考生只有「作答」角色(執行)。

IAM 的三個組成部分:誰、能做什麼、對哪個資源

IAM 的運作圍繞著三個主軸:

1. 誰 (身分/成員)

在 GCP 中,成員 (Members) 指的是可以被授予資源存取權限的實體。這包括:

  • Google 帳戶:個人 Gmail 帳戶。
  • 服務帳戶 (Service Accounts):供應用程式或虛擬機使用的非人身分。
  • Google 群組:一組 Google 帳戶的集合,便於批次管理。
  • Cloud Identity/Google Workspace 網域:整個公司的網域。

2. 能做什麼 (角色/權限)

角色是一組權限的集合。權限通常以 service.resource.verb 的形式呈現,例如 compute.instances.start。你不會直接把權限給人,而是將人綁定到「角色」上。

3. 對哪個資源 (資源)

這是權限作用的對象,例如一個特定的 VM 實例、一個 Cloud Storage 儲存桶或一個專案。

IAM 成員類型 (身分)

了解成員類型對於 ACE 考試至關重要,因為考試常考「如何最有效地管理大量使用者」。

Google 帳戶與群組 (Google Accounts & Groups)

  • Google 帳戶: 適用於個人開發者或小型團隊。
  • Google 群組: 將角色授予群組而非個人,是管理權限的最佳實踐。

不要將權限直接授予個人,而是授予 Google 群組,然後將個人加入群組。這樣當人員異動時,你只需要調整群組成員,而不需要修改每個資源的 IAM 政策。同時建議在資源階層的最低層級(例如 bucket 或 project,而非 organization)授予角色,以維持最小爆炸半徑。 Source ↗

服務帳戶 (Service Accounts)

這是應用程式的身分。例如,運行在 Compute Engine 上的程式碼需要存取 Cloud Storage,你應該為 VM 分配一個具有正確權限的服務帳戶,而不是在程式碼中硬編碼 API 金鑰。

Google Workspace 與 Cloud Identity

這允許你管理整個網域下的使用者。如果員工離職,關閉其網域帳戶會自動撤回其在 GCP 中的所有存取權限。

深入理解 IAM 角色

GCP 提供三種類型的角色,其靈活性與管理複雜度各不相同:

1. 基本角色 (Basic Roles / Primitive Roles)

這是 GCP 早期提供的角色,權限非常大且粗略:

  • 檢視者 (Viewer, roles/viewer): 唯讀權限。
  • 編輯者 (Editor, roles/editor): 包含檢視者權限,加上修改資源的能力(但不包括管理身分)。
  • 擁有者 (Owner, roles/owner): 包含編輯者權限,加上管理身分與計費的能力。

考試陷阱:在生產環境中應避免使用基本角色,因為它們違反了「最小權限原則」。除非是開發測試環境,否則建議使用預定義角色。 Source ↗

2. 預定義角色 (Predefined Roles)

Google 為特定服務建立的角色,提供更精細的控制。例如:

  • roles/storage.objectViewer:只能看儲存桶裡的檔案。
  • roles/compute.instanceAdmin.v1:可以管理 VM 但不能動網路。

3. 自定義角色 (Custom Roles)

如果預定義角色仍無法滿足需求,你可以自己挑選權限組合。

自定義角色不能跨專案使用(除非在組織層級定義),且需要持續維護,因為 Google 更新服務時不會自動更新自定義角色的權限。 Source ↗

IAM 政策結構與綁定 (Policy Structure and Binding)

IAM 政策是一個 JSON 或 YAML 文件,定義了「誰擁有什麼角色」。

政策綁定 (Policy Binding)

一條綁定 (Binding) 包含:

  • 成員 (Members): 一個或多個成員。
  • 角色 (Role): 一個特定的角色。
  • 條件 (Condition, 選用): 例如「只在特定的時間段內有效」。

IAM 政策是資源上的屬性。當你檢查權限時,GCP 會查找該資源及其所有父級資源上定義的所有政策。 Source ↗

資源階層與政策繼承

這是 ACE 考試中最常見的考點之一。權限是繼承的且只能增加不能減少

繼承機制 (Inheritance Mechanics)

  • 如果你在 組織 (Organization) 層級授予了 檢視者 角色,該使用者將成為該組織下所有資料夾、所有專案、所有資源的 檢視者
  • 子資源繼承父資源的所有政策。
  • 不能撤銷繼承的權限:如果父級給了 編輯者,你在子級給 檢視者 是沒用的,該使用者依然擁有 編輯者 權限。

有效政策 = (在資源上設定的政策) + (從階層中所有祖先繼承的政策)。 Source ↗

ACE 情境若主體 (principal) 已從組織層級繼承 roles/editor,唯一能阻擋該有效權限的方式是 Deny Policy,而不是在專案層級加上反向的 Allow binding。實務上需搭配 IAM Conditions(時間、IP、資源名稱)與 Policy Troubleshooter,才能精準判斷請求被允許或拒絕的原因。 Source ↗

最小權限原則 (Principle of Least Privilege, PoLP)

最小權限原則是 GCP 安全的黃金律。

  • 定義:只給予使用者完成其工作所需的最小權限集。
  • 應用
    • 優先使用預定義角色而非基本角色。
    • 在資源層級的最低層次授予權限(例如在儲存桶層級而非專案層級)。
    • 頻繁審核權限。

使用 gcloud CLI 管理 IAM

身為雲端工程師,你必須熟悉以下 CLI 指令:

查看政策

gcloud projects get-iam-policy PROJECT_ID

增加綁定

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:[email protected]" \
    --role="roles/viewer"

移除綁定

gcloud projects remove-iam-policy-binding PROJECT_ID \
    --member="user:[email protected]" \
    --role="roles/viewer"

ACE 考試的 IAM 最佳實務

  1. 使用群組管理使用者:減少重複勞動。
  2. 謹慎使用服務帳戶金鑰:優先使用自動管理的服務帳戶身分(例如 VM 上的預設服務帳戶或 Workload Identity)。
  3. 區分環境:不同的專案/資料夾對應生產 (Prod)、測試 (Stage)、開發 (Dev) 環境,並套用不同的 IAM 策略。
  4. 定期審計:使用 Cloud Audit Logs 查看誰在何時做了什麼。

常見 IAM 情境與故障排除

情境一:使用者無法建立 VM,即便擁有 roles/compute.instanceAdmin

  • 可能原因:使用者可能沒有在該專案中被授予「使用服務帳戶」的權限 (roles/iam.serviceAccountUser)。建立 VM 時需要身分去執行。

情境二:如何讓開發者只能在白天存取資源?

  • 解決方案:使用 IAM 條件 (IAM Conditions),在綁定角色時加入時間限制條件。

常見問題 (FAQ)

問:我可以直接把權限 (Permission) 給使用者嗎? 答:不行。你必須把權限包裝在角色 (Role) 裡,然後把角色給使用者。

問:如果一個使用者在專案層級是檢視者,在儲存桶層級是編輯者,他最後是什麼權限? 答:他是編輯者。權限是相加的 (Additive)。

問:自定義角色可以包含所有權限嗎? 答:大部分可以,但有些敏感權限(如修改 IAM 政策本身的部分權限)不允許包含在自定義角色中。

問:服務帳戶 (Service Account) 跟使用者帳戶有什麼不同? 答:服務帳戶不屬於特定人類,它沒有密碼,而是使用金鑰對 (Keys) 進行驗證。

問:刪除專案後,對應的 IAM 政策會怎樣? 答:專案刪除後,該專案上的所有 IAM 政策也會一併消失。

ACE 總結清單

  • 清楚區分基本角色、預定義角色、自定義角色。
  • 理解資源階層中的權限繼承邏輯(向下流動)。
  • 知道如何使用 gcloud 增加或移除 IAM 綁定。
  • 熟記最小權限原則的具體應用場景。
  • 理解服務帳戶 (Service Account) 的用途與安全性。

官方資料來源

更多 ACE 主題