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

IAM 條件與政策智慧:具備內容感知能力的安全性

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

掌握使用 IAM 條件和通用運算式語言 (CEL) 實施具備內容感知能力的存取控制。學習為 PSE 使用政策模擬器和分析器等政策智慧工具。

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

IAM 條件與政策智慧簡介

對於 GCP 專業雲端安全工程師 (PSE) 來說,靜態的 IAM 角色往往不足以滿足需求。業務需求通常需要「有條件的」存取,例如:「Alice 可以擔任儲存管理員,但『僅限』她從公司 IP 連線時、『僅限』在辦公時間內,且『僅限』針對標記為『臨時 (temporary)』的儲存桶。」

IAM 條件 (IAM Conditions) 透過使用通用運算式語言 (CEL) 提供這種精細且具備內容感知能力的控制。與此相輔相成的是政策智慧 (Policy Intelligence) 套件——這是一組由人工智慧驅動的工具,可協助你在實施複雜的存取政策之前對其進行分析、模擬和疑難排解,以防止安全性漏洞或營運中斷。

白話文解釋

1. 大夜班保全 (IAM 條件)

想像一名保全,他手裡有一份授權進入的名單。然而,保全還有一套規則:「晚上 10 點後禁止進入」以及「如果有人佩戴紅色徽章,他們只能去地下室」。保全會檢查人員的身分 (Identity) 「以及」當時的情境 (時間、徽章顏色)。這正是 IAM 條件的運作方式。

2. 飛行模擬器 (政策模擬器)

飛行員在駕駛新型波音 747 之前,會先在模擬器中練習。如果在模擬器中墜機,不會有人受傷。政策模擬器 (Policy Simulator) 讓你能夠針對真實的歷史存取記錄「演練」你的新 IAM 政策。如果模擬器顯示你的新政策在昨天會阻止 50 名合法的開發人員存取,你可以在「墜毀」正式環境之前修正它。

3. X 光機 (政策分析器)

當醫生想查看體內的骨頭是否斷裂時,他們會使用 X 光。政策分析器 (Policy Analyzer) 就是你整個 Google Cloud 組織的 X 光機。它可以看穿層層的資料夾、專案和群組成員身份,回答關鍵問題:「到底『誰』真正擁有這個敏感資料集的存取權限?」

IAM 條件中的屬性定義

IAM 條件會評估要求 (Request)資源 (Resource)環境 (Environment) 的屬性。

1. 時間屬性 (Temporal Attributes)

將存取權限限制在特定的時間窗口內。

  • request.time:要求發出的當前時間。
  • 使用場景: 僅在值班期間授予「值班 (On-Call)」工程師存取權限。

2. 資源屬性

根據資源的名稱、類型或服務限制存取。

  • resource.name:資源的完整路徑。
  • resource.service:例如 storage.googleapis.com
  • resource.type:例如 storage.googleapis.com/Bucket

3. 資源標記 (Resource Tags)

一種現代化的大規模管理存取範圍的方法。與標籤 (Labels) 不同,標記 (Tags) 是在組織/資料夾級別管理的,且安全性極高。

  • resource.matchTag():檢查資源是否具有特定的標記。

IAM 條件 (IAM Conditions) 是你新增到角色繫結 (Role Bindings) 中的邏輯運算式。當發出要求時,Google Cloud 會評估該條件;如果結果為真 (True),則授予存取權限。

通用運算式語言 (CEL) 語法

CEL 是一種快速、可移植且安全的運算式語言,廣泛應用於 Google Cloud。

基本 CEL 語法

  • 邏輯運算子: && (且)、|| (或)、! (非)。
  • 比較: ==!=<>
  • 字串函式: startsWith()endsWith()contains()

CEL 運算式範例

request.time < timestamp("2026-01-01T00:00:00Z") &&
resource.matchTag("123456789/env", "prod")

翻譯:僅在 2026 年之前且資源被標記為 'prod' 時才授予存取權限。

政策疑難排解工具 (Policy Troubleshooter)

當使用者抱怨「我有角色但收到權限被拒絕 (Permission Denied)」時,政策疑難排解工具是你的首選。

  • 分析: 它會檢查階層中所有的「允許政策」和「拒絕政策」。
  • 清晰度: 它會明確告訴你哪一個繫結授予了存取權限,以及哪一個條件 (或拒絕政策) 阻止了存取。

政策疑難排解工具只能分析「呼叫者」擁有可見權限的政策。如果你沒有組織級別的檢視權限,專案管理員就無法排解從組織級別繼承的政策問題。

政策分析器 (Policy Analyzer):深層可見性

政策分析器 協助你在複雜的結構中尋找「誰擁有什麼的存取權限」。

  • 群組展開: 它會自動展開 Google 群組,顯示個別成員。
  • 繼承解析: 它會考慮在組織、資料夾和專案級別授予的角色。
  • 匯出: 結果可以匯出到 BigQuery,以便進行長期的合規性報告。

使用政策分析器來找出所有擁有存取公司資源權限的外部使用者 (例如 @gmail.com)。

政策模擬器 (Policy Simulator):安全第一

政策模擬器 允許你在套用 IAM 政策變更之前先進行測試。

  • 重播 (Replay): 它會針對「建議的」政策「重播」過去 90 天的存取記錄。
  • 影響評估: 它會列出哪些原本被允許的要求現在會被拒絕,反之亦然。

對於以公司 IP 限制存取的 PSE 場景,正確的屬性是 request.auth.access_levels,這需要搭配 Access Context Manager 的 Access Level(最好再加上 VPC Service Controls)——在 CEL 裡直接寫 origin.ip 並非 IAM 條件支援的屬性。同時為角色繫結加上清楚的標題(例如 Contractor_Access_Limit),方便日後稽核追蹤。

根據標記 (Tags) 設定存取範圍

資源標記 (Resource Tags) 是 PSE 大規模管理存取的首選方式。

  • 標記 (Tags) vs. 標籤 (Labels): 標籤用於計費/組織管理;標記用於安全性/IAM。
  • 繼承: 標記可以沿著資源階層向下繼承。
  • 強制執行: 你可以在 IAM 條件中使用標記來建立「安全區域」。

基於 IP 的存取限制

你可以使用 IAM 條件將存取限制在特定的 IP 範圍內。

  • 屬性: request.auth.access_levels
  • 注意: 這需要 Access Context Manager 和 VPC 服務控制 (VPC Service Controls) 才能完整實施。

用於安全性邏輯的進階 CEL 函式

  • request.auth.claims 檢查使用者身分的屬性 (例如:「使用者的電子郵件是否已驗證?」)。
  • resource.matchTagId() 使用標記的唯一永久 ID 而非顯示名稱進行比對 (安全性更高)。

在資料夾間管理複雜的 IAM 條件

隨著政策變得複雜,管理難度也會增加。

  1. 邏輯集中化: 在資料夾級別使用資源標記,以簡化專案級別的條件。
  2. 限制嵌套: 避免在 CEL 中使用深層的 if/else 邏輯,以保持可讀性。
  3. 定期稽核: 使用政策分析器來確保「臨時」存取權限確實已經過期。

政策智慧的 CLI 指令

執行政策分析

gcloud iam experts analyze-policy \
    --organization="123456789" \
    --identity="user:[email protected]"

透過 CEL 測試 IAM 條件

(CEL 通常在角色繫結期間透過 JSON/YAML 檔案傳遞):

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:[email protected]" \
    --role="roles/viewer" \
    --condition="expression=request.time < timestamp('2026-01-01T00:00:00Z'),title=Expires_2026"

政策模擬器 (Policy Simulator) 使用歷史資料來預測未來政策變更的影響。

政策分析器 (Policy Analyzer) 只回答「誰擁有 Allow 繫結」,並不會完整解析 拒絕政策 (Deny Policies)組織政策限制 (Organization Policy Constraints)——所以使用者在 Analyzer 看起來有權限,實際呼叫時仍可能收到 Permission Denied。出現這種落差時,改用 政策疑難排解工具 (Policy Troubleshooter),它會評估包含拒絕規則在內的有效政策。另外請記得 Troubleshooter 只能看到「呼叫者」自身有可見權限的部分,務必以具備組織層級檢視權限的身分執行。

PSE 安全性最佳實務

  1. 始終使用標題與說明: 每個 IAM 條件都必須有清晰的標題 (例如 "Contractor_Access_Limit")。
  2. 先模擬再套用: 絕對不要在未執行模擬的情況下更改正式環境的組織級別政策。
  3. 使用標記進行環境隔離: 將資源標記為 env:prodenv:dev,並使用 IAM 條件來防止交叉污染。
  4. 監控 CEL 效能: 極其複雜的 CEL 運算式理論上可能會增加 API 要求的延遲。

故障排除場景

場景:時間限制條件未按預期運作。

診斷: CEL 的 timestamp() 使用 UTC。如果管理員是以當地時間思考,則時間窗口可能會發生偏移。 修正: 驗證時間戳記格式,並確保其符合 UTC 的 ISO 8601 標準。

場景:政策分析器顯示使用者擁有存取權,但他們仍被拒絕。

診斷: 政策分析器可能未考慮到拒絕政策 (Deny Policies)組織政策限制 (Organization Policy Constraints)修正: 執行政策疑難排解工具,它會評估包含拒絕規則在內的完整「有效」政策。

PSE 考試場景

場景 1:地端 IP 限制

「如何確保開發人員只能從公司 VPN IP 範圍存取 Cloud Console?」 答案: 使用具有 request.auth.access_levels 屬性的 IAM 條件,或實施 身分識別感知代理伺服器 (IAP)

場景 2:保護敏感標記

「如何防止專案所有者從資源中移除『高安全性』標記,以繞過 IAM 條件?」 答案: 使用組織政策來限制誰可以管理標記,並確保只有中央安全團隊擁有 roles/resourcemanager.tagAdmin 角色。

常見問題 (FAQ)

Q1:IAM 中 CEL 運算式的最大長度是多少? A1:2,000 個字元。

Q2:我可以在自訂角色中使用 IAM 條件嗎? A2:可以,IAM 條件適用於基礎角色、預定義角色和自訂角色。

Q3:政策模擬器需要付費嗎? A3:政策模擬器是 Security Command Center (SCC) Premium 層級的一部分,或者在標準層級中具有特定的配額限制。

總結檢查清單

  • 編寫一個基於時間存取規則的 CEL 運算式。
  • 解釋政策分析器與政策疑難排解工具之間的區別。
  • 描述政策模擬器中的「重播」機制。
  • 列出三個可用於 IAM 條件的屬性。
  • 解釋為什麼資源標記在安全性方面優於標籤。

官方資料來源

更多 PSE 主題