組織策略服務 (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.disableSerialPortAccess、iam.disableServiceAccountKeyCreation);List constraints 使用 allowed_values / denied_values,並以 inheritFromParent: true|false 決定是否合併或取代父層的清單 (例如 gcp.resourceLocations、sql.restrictAuthorizedNetworks)。所有 constraint 都支援 Dry-run mode — 將規則放入 dryRunSpec,違規會記錄到 Cloud Logging 但不會阻擋 API 呼叫;驗證無誤後再將同一份規格升級到 spec 進入強制模式。
組織策略服務 (Organization Policy Service) 是一種集中式控制機制,允許管理員跨 Google Cloud 資源階層配置限制,以限制資源的使用方式。
PSE 必備的核心安全性限制
PSE 應熟悉以下「必備」限制:
- 停用序列埠存取: (
constraints/compute.disableSerialPortAccess) 防止對 VM 序列主控台的互動式存取,這會繞過 SSH/IAM 控制。 - 限制建立外部 IP: (
constraints/compute.vmExternalIpAccess) 防止 VM 擁有外部 IP 位址,強制使用 Cloud NAT 或 IAP。 - 強制執行受防護的 VM: (
constraints/compute.requireShieldedVm) 確保所有新 VM 都啟用了安全啟動 (Secure Boot) 和 vTPM。 - 資源位置限制: (
constraints/gcp.resourceLocations) 限制可以建立資源 (如 GCS 儲存桶或 GKE 叢集) 的位置,這對於數據主權 (如 GDPR/CCPA) 至關重要。
組織策略具有階層性。在組織層級設定的策略會被所有資料夾和專案繼承。在較低層級 (專案) 設定的策略可以根據限制類型覆蓋或合併父級策略。
自定義組織策略 (Custom Organization Policies)
Google 提供了數百個「預定義限制」,但有時您需要更細緻的控制。自定義組織策略允許您使用通用運算式語言 (CEL) 編寫自己的規則。
為什麼使用自定義限制?
- 細粒度控制: 不只是「禁止外部 IP」,您可以規定「禁止帶有 'production' 標記的 VM 擁有外部 IP」。
- 特定需求: 強制執行預定義限制未涵蓋的特定配置 (例如:特定的儲存桶加密類型)。
組織策略的測試模式 (Dry-run Mode)
在生產環境中更改組織策略可能很危險。它可能會突然破壞現有的部署腳本或自動擴展群組。
測試模式 (Dry-run mode) 允許您:
- 以「僅稽核」模式套用策略。
- 在日誌 (Cloud Logging) 中觀察違規情況。
- 在轉向「強制執行」模式前驗證影響。
在引入 resourceLocations 或 vmExternalIpAccess 等限制性策略時,請務必使用測試模式至少 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 安全性最佳實踐
- 從頂部開始: 在組織層級套用廣泛的安全性限制 (例如:
disableSerialPortAccess)。 - 使用資料夾進行例外處理: 將需要類似例外的專案歸類到資料夾中,並在該處套用覆蓋,而不是逐個專案處理。
- 嚴格控制
orgpolicy.policyAdmin角色: 就基礎設施安全而言,此角色與超級管理員 (Super Admin) 一樣強大。 - 定期稽核: 使用 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) 的目的和工作流程。