代管限制

代管限制是預先定義的組織政策,以現代化平台為基礎建構而成,可透過程式輔助集中控管 Compute Engine 資源。包括內建支援安全發布工具,例如 Policy Simulator 和模擬測試。

代管限制會以 compute.managed.* 前置字元標示,可直接取代舊版 compute.* 限制。

優點

  • 安全推出及監控:使用完整工具實作政策、加快變更控管速度,並運用模擬和試執行功能逐步部署。
  • 記錄一致性:強制執行記錄和錯誤訊息的統一性,簡化集中式監控並簡化稽核。

政策繼承

您在資源上設定的組織政策,會由該資源在資源階層中的子系繼承。舉例來說,如果您對資料夾強制執行政策, Cloud de Confiance by S3NS 會對該資料夾中的所有專案強制執行政策。

定價

組織政策服務 (包括預先定義 (舊版)、代管和自訂組織政策) 免費提供。

事前準備

  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Cloud de Confiance by S3NS 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上的分頁,瞭解如何使用範例:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,無須設定驗證。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設地區和區域
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI

    詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」。

  • 請確認您知道組織 ID
  • 如果尚未安裝 gcloud CLI,請安裝並執行 gcloud init 初始化。
  • 為測試設定預設專案。

必要的角色

如要取得管理具有代管限制的組織政策所需的權限,請要求管理員授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備管理代管限制的組織政策所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要使用代管限制管理組織政策,必須具備下列權限:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set
  • 如要測試限制:
    • 專案的 compute.instances.create 權限
    • 如要使用自訂映像檔建立 VM,請按一下映像檔上的 compute.images.useReadOnly
    • 如要使用快照建立 VM,請按一下快照上的 compute.snapshots.useReadOnly
    • 如要使用執行個體範本建立 VM,請按一下執行個體範本上的 compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給 VM:專案的 compute.networks.use
    • 如要為 VM 指定靜態 IP 位址:專案的 compute.addresses.use 權限
    • 使用舊版網路時,如要將外部 IP 位址指派給 VM,請在專案中啟用 compute.networks.useExternalIp
    • 為 VM 指定子網路:專案或所選子網路的 compute.subnetworks.use
    • 使用虛擬私有雲網路時,如要將外部 IP 位址指派給 VM,請在專案或所選子網路上擁有 compute.subnetworks.useExternalIp 權限
    • 如要為專案中的 VM 設定 VM 執行個體中繼資料,請執行下列指令:compute.instances.setMetadata
    • 如要為 VM 設定標記:compute.instances.setTags 在 VM 上
    • 如要為 VM 設定標籤,請在 VM 上執行下列指令:compute.instances.setLabels
    • 如要設定 VM 使用的服務帳戶,請在 VM 上執行 compute.instances.setServiceAccount
    • 如要為 VM 建立新磁碟,請取得專案的 compute.disks.create 權限
    • 如要以唯讀或讀寫模式連接現有磁碟,請對磁碟擁有 compute.disks.use 權限
    • 如要以唯讀模式連接現有磁碟,請對磁碟擁有 compute.disks.useReadOnly 權限

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

可用的代管限制

下列代管式組織政策限制適用於 Compute Engine:

階層式中繼資料評估

依據預先定義中繼資料金鑰 (例如 OS 登入或序列埠存取權) 的代管限制條件支援階層式評估。Compute Engine 評估這些限制時,會檢查在 VM 執行個體、專案或可用區層級設定的中繼資料值。

在專案或可用區層級設定中繼資料值,可大規模管理 VM 執行個體。不過,只有在建立 VM 執行個體或更新 API 呼叫時,才會強制執行限制。因此,只有在建立或更新 VM 執行個體時,專案或區域中繼資料的變更才會影響該執行個體的限制合規性。

以中繼資料為準的限制和層級

限制 中繼資料鍵 中繼資料階層層級
compute.managed.disableSerialPortAccess serial-port-enable 專案、可用區、執行個體
compute.managed.requireOsLogin enable-oslogin 專案、可用區、執行個體
compute.managed.disableGuestAttributesAccess enable-guest-attributes 專案、可用區、執行個體
compute.managed.requireOsConfig enable-osconfig 專案、可用區、執行個體
compute.managed.disallowGlobalDns VmDnsSetting 專案、執行個體

安全發布:政策生命週期

為避免逐步導入新限制時服務中斷,Google 建議按照下列步驟導入代管限制:

使用 Policy Simulator 進行分析

強制執行政策前,請先使用 Policy Simulator,查看哪些現有資源違反政策。步驟如下:

  1. 前往 Cloud de Confiance 控制台的「Organization Policies」(機構政策) 頁面。

    前往「Organization Policies」(機構政策)

  2. 在篩選列中搜尋限制,然後按一下限制名稱,前往「政策詳細資料」頁面。

  3. 按一下「測試變更」,即可產生模擬報表。

  4. 階層式中繼資料變更可能需要幾小時,才會反映在 VM 中繼資料設定限制的模擬報表中。

  5. 查看報告,重新設定不符規定的資源或申請豁免。

使用模擬測試驗證

模擬測試模式會將違規事項記錄到 Cloud Logging,但不會強制執行限制。

如要測試限制,請使用 gcloud org-policies set-policy 指令,如下所示:

  1. 建立政策 YAML 檔案 (例如 dry-run-policy.yaml),並使用以下內容: dryRunSpec

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    dryRunSpec:
      rules:
      - enforce: true
    

    PROJECT_ID 替換為專案 ID。

  2. 套用政策:

    gcloud org-policies set-policy dry-run-policy.yaml
    

全面強制執行

模擬及測試政策後,即可對資源強制執行政策。政策變更最多可能需要 15 分鐘,才會在所有系統中生效。Cloud de Confiance by S3NS

測試限制強制執行

設定政策後,您可以使用 gcloud CLI 驗證強制執行情況。舉例來說,如要測試 compute.managed.requireOsLogin 限制條件,請按照下列步驟操作:

  1. 列出現有政策,確認設定:

    gcloud org-policies list --project=PROJECT_ID
    
  2. 使用 YAML 檔案套用強制執行政策:

    gcloud org-policies set-policy enforce_managed_constraint.yaml
    
  3. 呼叫變動 API,確認強制執行狀態。嘗試建立中繼資料不符規定的 VM 執行個體時,應該會失敗:

    gcloud compute instances create VM_NAME \
        --machine-type=MACHINE_TYPE \
        --image-family=IMAGE_FAMILY \
        --image-project=IMAGE_PROJECT \
        --metadata=enable-oslogin=false
    

    更改下列內容:

    • VM_NAME:新 VM 執行個體的名稱。
    • MACHINE_TYPE:有效機型,例如 e2-micro
    • IMAGE_FAMILY:有效的映像檔系列,例如 debian-11
    • IMAGE_PROJECT:映像檔系列的專案,例如 debian-cloud
  4. 請查看錯誤訊息。您應該會看到拒絕訊息,指出違反的特定限制條件:ERROR: (gcloud.compute.instances.create) Could not fetch resource: - Operation denied by org policy: [constraints/compute.managed.requireOsLogin]

使用標記設定條件式豁免

您可以根據業務需求,使用標記為特定資源授予例外狀況。在本範例中,我們會使用名為 osLoginOptional 的標記,識別免除 OS 登入需求的資源。將這個標記繫結至資源,並將值設為 true 時,即使政策仍嚴格套用至環境中的其他資源,機構政策也會允許該特定資源存在,且不必啟用 OS 登入功能。

如要使用標記授予例外狀況,請按照下列步驟操作:

  1. 建立標記:使用 gcloud CLI 建立標記鍵和標記值。

    1. 建立標記鍵:

      gcloud resource-manager tags keys create osLoginOptional \
          --parent=organizations/ORGANIZATION_ID
      
    2. 建立標記值:

      gcloud resource-manager tags values create true \
          --parent=organizations/ORGANIZATION_ID/tagKeys/osLoginOptional
      

    請將 ORGANIZATION_ID 替換成組織 ID。

  2. 將標記繫結至資源。如要將專案從 compute.managed.requireOsLogin 限制中排除,請使用 gcloud resource-manager tags bindings create 指令,將 osLoginOptional=true 標記繫結至專案:

    gcloud resource-manager tags bindings create \
        --tag-value=ORGANIZATION_ID/osLoginOptional/true \
        --parent=//cloudresourcemanager.googleapis.com/projects/PROJECT_ID \
        --location=global
    

    ORGANIZATION_ID 替換為機構 ID,並將 PROJECT_ID 替換為要豁免的專案 ID。

    如要瞭解如何將標記繫結至其他資源,請參閱「將標記繫結至資源」。

  3. 更新政策:建立或更新政策 YAML 檔案 (例如 policy.yaml),加入條件式規則。

    name: projects/PROJECT_ID/policies/compute.managed.requireOsLogin
    spec:
      rules:
      - condition:
          expression: "resource.matchTag('ORGANIZATION_ID/osLoginOptional', 'true')"
        enforce: false
      - enforce: true
    

    更改下列內容:

    • PROJECT_ID:您的專案 ID。
    • ORGANIZATION_ID:您的機構 ID。
  4. 套用政策:使用下列 gcloud CLI 指令啟用設定:

    gcloud org-policies set-policy policy.yaml
    

從舊版限制遷移

遷移時請注意,代管限制會改善舊版政策的行為,但不會完全複製。代管限制只會在建立或修改資源的 API 要求期間檢查違規情形,因此可提供更高的預測性。如果要求違反限制,API 呼叫就會失敗,並顯示明確的錯誤訊息。這與舊版政策不同,舊版政策可在作業的各個階段強制執行,或做為資源屬性,因此強制執行行為較難預測。

從舊版 compute.* 限制條件改用現代化 compute.managed.* 等效限制條件時,請按照下列步驟操作,避免無意間加嚴限制:

  1. 探索:找出新的代管限制替代方案。
  2. 分析及驗證:如前文所述,使用 Policy Simulator 和模擬測試。
  3. 強制執行受管理限制:同時套用新舊受管理限制。
  4. 刪除舊版政策:
    • 前往 Cloud de Confiance 控制台中的「資產清單」,然後依orgpolicy.Policy和舊版限制名稱篩選,找出使用舊版限制的所有政策。
    • 刪除所有使用舊版限制的政策。刪除政策會將該政策重設為該限制的 Google 代管預設行為。

後續步驟