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

Organization Policy Service:大規模治理的基石

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

深入掌握 Google Cloud 的組織策略服務 (Organization Policy Service)。學習如何強制執行安全性限制、管理繼承關係,以及為企業級治理實施自定義策略。

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

組織策略服務 (Organization Policy Service) 簡介

對於 專業雲端安全工程師 (PSE) 而言,組織策略服務 (Organization Policy Service) 是集中化治理的終極工具。雖然 IAM 定義了「誰」可以做「什麼」,但組織策略則定義了「什麼」可以對特定「資源」執行。它提供了「護欄」,防止開發人員和管理員進行不安全的配置,無論其 IAM 權限為何。

在企業環境中,逐個專案管理安全性是不可能的。組織策略服務允許您在組織 (Organization) 或資料夾 (Folder) 層級強制執行安全性標準,確保該節點下的每個專案都繼承相同的安全狀況。

白話文解釋

1. 建築法規 (組織策略) vs. 鑰匙持有者 (IAM)

IAM 就像是給某人一個房間 (專案) 的鑰匙,他們有權進入。然而,建築法規 (組織策略) 規定房間必須配備滅火器且不能有裸露的電線。即使鑰匙持有者想要拆除滅火器,建築法規也會阻止他們。

2. 家長監護 (繼承)

想像一位家長為他們的房子 (組織) 設定規則。其中一條規則是「晚上 9 點後不能看電視」。這條規則會自動套用到所有孩子的房間 (資料夾) 和他們的個人書桌 (專案)。如果家長想允許一個孩子熬夜讀書,他們可以為該特定房間建立一個例外 (覆蓋),或者執行「重設為父級」以使其恢復一致。

3. 品質控制掃描器 (測試模式)

想像一條工廠生產線。在實施可能導致整條生產線停工的新規則之前,您先執行一個「掃描器」(測試模式),標記哪些項目「將會」被拒絕,而不會實際停止傳送帶。這讓您能在造成停機前修正問題。

在組織/資料夾層級管理安全性限制

組織策略服務透過限制 (Constraints) 運作。限制是安全性規則的藍圖。

布林限制與清單限制

  • 布林限制 (Boolean Constraints): 這些是「開啟/關閉」開關。(例如:constraints/compute.disableSerialPortAccess),要麼強制執行,要麼不執行。
  • 清單限制 (List Constraints): 這些允許或拒絕一系列值。(例如:constraints/compute.trustedImageProjects)。您可以指定允許哪些專案提供磁碟映像。

PSE 考試的 Constraint 速記表: Boolean constraints 透過 enforce: true/false 切換 (例如 compute.disableSerialPortAccessiam.disableServiceAccountKeyCreation);List constraints 使用 allowed_values / denied_values,並以 inheritFromParent: true|false 決定是否合併或取代父層的清單 (例如 gcp.resourceLocationssql.restrictAuthorizedNetworks)。所有 constraint 都支援 Dry-run mode — 將規則放入 dryRunSpec,違規會記錄到 Cloud Logging 但不會阻擋 API 呼叫;驗證無誤後再將同一份規格升級到 spec 進入強制模式。

組織策略服務 (Organization Policy Service) 是一種集中式控制機制,允許管理員跨 Google Cloud 資源階層配置限制,以限制資源的使用方式。

PSE 必備的核心安全性限制

PSE 應熟悉以下「必備」限制:

  1. 停用序列埠存取: (constraints/compute.disableSerialPortAccess) 防止對 VM 序列主控台的互動式存取,這會繞過 SSH/IAM 控制。
  2. 限制建立外部 IP: (constraints/compute.vmExternalIpAccess) 防止 VM 擁有外部 IP 位址,強制使用 Cloud NAT 或 IAP。
  3. 強制執行受防護的 VM: (constraints/compute.requireShieldedVm) 確保所有新 VM 都啟用了安全啟動 (Secure Boot) 和 vTPM。
  4. 資源位置限制: (constraints/gcp.resourceLocations) 限制可以建立資源 (如 GCS 儲存桶或 GKE 叢集) 的位置,這對於數據主權 (如 GDPR/CCPA) 至關重要。

組織策略具有階層性。在組織層級設定的策略會被所有資料夾和專案繼承。在較低層級 (專案) 設定的策略可以根據限制類型覆蓋合併父級策略。

自定義組織策略 (Custom Organization Policies)

Google 提供了數百個「預定義限制」,但有時您需要更細緻的控制。自定義組織策略允許您使用通用運算式語言 (CEL) 編寫自己的規則。

為什麼使用自定義限制?

  • 細粒度控制: 不只是「禁止外部 IP」,您可以規定「禁止帶有 'production' 標記的 VM 擁有外部 IP」。
  • 特定需求: 強制執行預定義限制未涵蓋的特定配置 (例如:特定的儲存桶加密類型)。

組織策略的測試模式 (Dry-run Mode)

在生產環境中更改組織策略可能很危險。它可能會突然破壞現有的部署腳本或自動擴展群組。

測試模式 (Dry-run mode) 允許您:

  1. 以「僅稽核」模式套用策略。
  2. 在日誌 (Cloud Logging) 中觀察違規情況。
  3. 在轉向「強制執行」模式前驗證影響。

在引入 resourceLocationsvmExternalIpAccess 等限制性策略時,請務必使用測試模式至少 24-48 小時,以識別可能受影響的遺留資源。

策略繼承與「重設為父級」

理解策略如何向下流動是 PSE 考試的常見主題。

  • 繼承 (Inheritance): 預設情況下,子項會繼承父級策略。
  • 覆蓋 (Override): 專案可以設定自己的策略來取代父級策略。
  • 合併 (清單限制): 您可以選擇將您的清單附加到父級清單,或完全取代它。
  • 重設為父級 (Reset to Parent): 如果專案不再需要覆蓋設定,您可以將其「重設」以再次繼承父級策略。

如果您在資料夾層級「停用」某個布林限制,但在組織層級「啟用」它,則資料夾層級 (更接近資源的一端) 會勝出。最具體的策略優先執行。

強制執行受防護的 VM 與資源位置

受防護的 VM (Shielded VM) 強制執行

對於高安全性環境,您必須確保不會建立「裸機」VM。constraints/compute.requireShieldedVm 限制可確保每個 VM 都有信任根 (root of trust),防止開機等級的惡意軟體。

資源位置限制

constraints/gcp.resourceLocations 清單限制對於合規性至關重要。

  • 允許清單: groups/us-locations
  • 結果: 任何在 europe-west1 建立資源的嘗試都將被拒絕,並顯示 403 Forbidden 錯誤。

稽核組織策略違規情況

如何知道策略是否被繞過 (如果允許) 或哪裡發生了違規?

  • Cloud Logging: 每次組織策略阻擋動作時,都會生成一條 AuditLog 條目。
  • Security Command Center (SCC): SCC 提供專用的「合規性」儀表板,突顯整個組織中的策略違規情況。
  • 資產搜尋: 使用 Cloud Asset Inventory 尋找違反「新建立」策略的現有資源。

標記 (Tags) 與條件式組織策略

您可以使用標記 (Tags) 有條件地套用組織策略。

  • 情境: 您想限制所有專案的外部 IP,但標記為 environment: sandbox 的專案除外。
  • 實施: 建立一個帶有條件的組織策略:resource.matchTag('123/environment', 'sandbox')

標記是在組織或資料夾層級管理的,非常安全,因為修改標記需要特定的 IAM 權限 (resourcemanager.tagAdmin),這與網路標記 (Network Tags) 不同。

組織策略的 CLI 指令

描述策略

gcloud resource-manager org-policies describe \
    constraints/compute.disableSerialPortAccess \
    --organization=123456789

設定布林策略

gcloud resource-manager org-policies enable \
    constraints/compute.disableSerialPortAccess \
    --project=my-security-project

建立自定義限制 (YAML)

name: organizations/123/customConstraints/custom.disableExternalIP
resourceTypes:
- compute.googleapis.com/Instance
methodTypes:
- CREATE
condition: "resource.networkInterfaces.exists(ni, ni.accessConfigs.exists(ac, true))"
actionType: DENY

PSE 安全性最佳實踐

  1. 從頂部開始: 在組織層級套用廣泛的安全性限制 (例如:disableSerialPortAccess)。
  2. 使用資料夾進行例外處理: 將需要類似例外的專案歸類到資料夾中,並在該處套用覆蓋,而不是逐個專案處理。
  3. 嚴格控制 orgpolicy.policyAdmin 角色: 就基礎設施安全而言,此角色與超級管理員 (Super Admin) 一樣強大。
  4. 定期稽核: 使用 SCC 監控試圖繞過護欄的「影子 IT (Shadow IT)」。

故障排除情境

情境:開發人員無法在 'us-central1' 建立 VM

診斷: 檢查組織、資料夾和專案層級的 constraints/gcp.resourceLocations。開發人員可能觸碰了限制。 修正: 如果業務需求合理,將 us-central1 加入允許清單,或將專案移動到策略較寬鬆的資料夾。

情境:專案覆蓋無效

診斷: 確保該限制允許覆蓋。某些策略在組織層級被「硬編碼」為 inheritFromParent: false修正: 檢查父級策略是否將「強制執行」設定為 true,以及子級策略是否正確結構化為「覆蓋 (Override)」。

PSE 考試情境

情境 1:防止資料外洩

「一家組織希望確保由於 GDPR 規定,所有資料都不會儲存在歐盟以外的地方。強制執行此要求最有效的方法是什麼?」 答案: 在組織層級套用 constraints/gcp.resourceLocations 限制,僅允許歐盟區域。

情境 2:過渡到受防護的 VM

「您想強制執行受防護的 VM,但您有 500 個現有的遺留 VM 不是受防護的。您該如何進行?」 答案: 使用 constraints/compute.requireShieldedVm 策略的測試模式 (Dry-run mode) 來識別所有 500 個 VM 而不破壞它們,在切換到「強制執行」模式前先完成遷移。

總結清單

  • 區分布林限制與清單限制。
  • 解釋策略繼承和覆蓋的運作方式。
  • 識別停用外部 IP 和序列埠的關鍵限制。
  • 了解標記 (Tags) 在條件式策略中的作用。
  • 描述測試模式 (Dry-run) 的目的和工作流程。

官方資料來源

更多 PSE 主題