使用 Policy Simulator 測試機構政策變更

機構政策的政策模擬器可讓您預先瞭解新自訂限制或機構政策的影響,並在正式環境強制執行自訂或受管理限制前,先瞭解相關影響。Policy Simulator 會列出違反提議政策的資源 (政策尚未強制執行),方便您重新設定這些資源、要求例外狀況,或變更機構政策範圍,完全不會中斷開發人員作業或導致環境停機。

本頁說明如何使用 Policy Simulator 測試組織政策的變更。此外,本文也會說明如何解讀模擬結果,以及如何套用測試過的機構政策 (如果選擇這麼做)。

事前準備

  • 如果您使用 Google Cloud CLI,請設定要用於發出 API 呼叫的專案:

    gcloud config set project PROJECT_ID

    PROJECT_ID 替換為專案名稱或 ID。

  • Enable the Policy Simulator and Resource Manager APIs.

    Enable the APIs

  • 選用: 瞭解機構政策服務簡介

必要的角色

如要取得執行及存取模擬作業所需的權限,請要求管理員授予您機構的 OrgPolicy 模擬工具管理員 (roles/policysimulator.orgPolicyAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備執行及存取模擬作業所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要執行及存取模擬作業,必須具備下列權限:

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.get
  • orgpolicy.policies.list
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.listResource
  • cloudasset.assets.listOrgPolicy
  • policysimulator.orgPolicyViolationsPreviews.list
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolations.list

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

測試政策變更

您可以同時測試自訂限制和/或強制執行自訂或受管理限制的機構政策。

測試自訂限制的變更

控制台

  1. 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。

    前往「機構政策」

  2. 從機構選取器中選取機構資源。

  3. 執行下列其中一個步驟:

    • 如要測試新的自訂限制,請按一下「自訂限制」

    • 如要變更現有的自訂限制,請在「機構政策」頁面從清單中選取限制,然後按一下 「編輯限制」

  4. 建立或更新要測試的自訂限制。

    1. 在「顯示名稱」方塊中,輸入容易理解的限制名稱。這個欄位的長度上限為 200 個字元。 請勿在顯示名稱中使用 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。

    2. 在「Constraint ID」(限制條件 ID) 方塊中,輸入新自訂限制條件的名稱。自訂限制必須以 custom. 開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.disableGkeAutoUpgrade。這個欄位的長度上限為 70 個字元,不含前置字元,例如 organizations/123456789/customConstraints/custom.。請勿在限制 ID 中輸入 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。

      自訂限制建立後,限制 ID 就無法變更。

    3. 在「Description」方塊中,輸入限制的易讀說明,違反政策時會以錯誤訊息形式顯示。 這個欄位的長度上限為 2000 個字元。 請勿在說明中輸入 PII 或機密資料,因為錯誤訊息可能會顯示上述資訊。

    4. 在「Resource type」方塊中,選取包含要限制物件和欄位的 Google CloudREST 資源名稱,例如 container.googleapis.com/NodePool。大多數資源類型最多可為每個資源設定 20 項自訂限制。如果您嘗試為已達自訂限制數上限的資源建立自訂限制,作業就會失敗。

    5. 在「強制執行方式」部分,選取要對 REST CREATE 方法強制執行限制,還是對 CREATEUPDATE 方法都強制執行限制。並非所有 Google Cloud 服務都支援這兩種方法。如要查看各項服務支援的方法,請在「支援的服務」中找出該服務。

    6. 如要定義條件,請按一下「編輯條件」

    7. 在「新增條件」面板中,建立參照支援服務資源的 CEL 條件,例如 resource.management.autoUpgrade == false。這個欄位的長度上限為 1000 個字元。如要瞭解如何使用 CEL,請參閱「一般運算語言」。如要進一步瞭解可在自訂限制中使用的服務資源,請參閱「自訂限制支援的服務」。

    8. 按一下 [儲存]

    9. 在「動作」部分中,選取是否允許或拒絕評估方法 (如果符合您編寫的條件)。

      如果條件評估結果為 true,系統就會封鎖建立或更新資源的作業。

      允許動作是指只有在條件評估為 true 時,才允許建立或更新資源的操作。除了條件中明確列出的情況外,所有其他情況都會遭到封鎖。

  5. 按一下「測試限制」

  6. 如果是新限制,系統會顯示「設定機構政策」窗格。如要定義組織政策來強制執行自訂限制,請按照下列步驟操作:

    1. 在「選取範圍」方塊中,選取要測試自訂限制的資源。

    2. 按一下「覆寫上層政策」

    3. 點選「新增規則」

    4. 在「強制執行」部分,選取「開啟」

    5. 如要根據標記為機構政策設定條件,請按一下「新增條件」。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

    6. 依序點選「完成」和「繼續」

系統隨即顯示「模擬記錄」頁面,其中列出您在過去 14 天執行的模擬作業。詳情請參閱本頁面的「政策模擬工具結果」。

gcloud

  1. 如要測試強制執行新的或更新的自訂限制,請建立 JSON 或 YAML 檔案,定義要測試的自訂限制。

    如要測試現有自訂限制的變更,可以使用 organizations.customConstraints.get gcloud CLI 指令擷取自訂限制的目前 JSON 或 YAML 表示法,然後編輯該檔案。

    定義自訂限制的 YAML 檔案類似於下列內容:

    name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
    resourceTypes:
    - RESOURCE_NAME
    methodTypes:
    - METHOD1
    - METHOD2
    condition: "CONDITION"
    actionType: ACTION
    displayName: DISPLAY_NAME
    description: DESCRIPTION
    

    更改下列內容:

    • ORGANIZATION_ID:您的機構 ID,例如 123456789

    • CONSTRAINT_NAME:新自訂限制的名稱。自訂限制必須以 custom. 開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.disableGkeAutoUpgrade。這個欄位的長度上限為 70 個字元,不含前置字元,例如 organizations/123456789/customConstraints/custom.

    • RESOURCE_NAME:Google Cloud REST 資源的完整名稱,其中包含您要限制的物件和欄位。例如 container.googleapis.com/NodePool。大多數資源類型每項資源最多可有 20 項自訂限制。如果您嘗試為已達自訂限制數上限的資源建立自訂限制,作業就會失敗。如要進一步瞭解可在自訂限制中使用的服務資源,請參閱「自訂限制支援的服務」。

    • METHOD1,METHOD2:要強制執行限制的 RESTful 方法清單。可以是 CREATECREATEUPDATE。並非所有 Google Cloud 服務都支援這兩種方法。如要查看各項服務支援的方法,請在「支援的服務」中找到該服務。

    • CONDITION:參照支援服務資源的 CEL 條件,例如 "resource.management.autoUpgrade == false"。這個欄位的長度上限為 1000 個字元。如要進一步瞭解如何使用 CEL,請參閱「一般運算語言」。

    • ACTION:如果符合 condition,則要採取的動作。可以是 ALLOWDENY

      • 如果條件評估結果為 true,系統會封鎖建立或更新資源的操作。

      • 允許動作表示如果條件評估結果為 true,系統會允許建立或更新資源的作業。這也表示系統會封鎖條件中明確列出的案例以外的所有其他案例。

    • DISPLAY_NAME:限制條件的易記名稱。這個欄位的長度上限為 200 個字元。

    • DESCRIPTION:違反政策時,要以錯誤訊息形式顯示的限制說明。這個欄位的長度上限為 2000 個字元。如要進一步瞭解如何建立自訂限制,請參閱「建立及管理自訂限制」。

  2. 建立或修改機構政策,強制執行自訂限制。

    • 如要測試強制執行新的或更新的自訂限制,請建立 JSON 或 YAML 檔案,定義要測試的機構政策:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
      

      更改下列內容:

      • ORGANIZATION_ID,例如 1234567890123

      • CONSTRAINT_NAME 改成要測試的自訂限制名稱。例如:custom.EnforceGKEBinaryAuthz

    • 如要測試根據特定標記是否存在,有條件地強制執行自訂限制,請建立定義機構政策的 JSON 或 YAML 檔案:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - condition:
            expression: CONDITION
          enforce: false
        - enforce: true
      

      更改下列內容:

      • ORGANIZATION_ID,例如 1234567890123

      • CONSTRAINT_NAME 改成要測試的自訂限制名稱。例如:custom.EnforceGKEBinaryAuthz

      • CONDITION,並使用參照支援服務資源的 CEL 條件,例如 "resource.matchTag('env', 'dev')"

      如要進一步瞭解有條件的機構政策,請參閱「使用標記設定機構政策」。

    • 如要測試刪除強制執行自訂限制的機構政策,請建立 JSON 或 YAML 檔案,定義機構政策,但除了從上層資源沿用政策外,不設定任何規則:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        inheritFromParent: true
      

      更改下列內容:

      • ORGANIZATION_ID,例如 1234567890123

      • CONSTRAINT_NAME 改成要測試的自訂限制名稱。例如:custom.EnforceGKEBinaryAuthz

  3. 如要模擬變更自訂限制、機構政策或兩者,請執行 policy-intelligence simulate orgpolicy 指令:

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --custom-constraints=CONSTRAINT_PATH \
      --policies=POLICY_PATH
    

    更改下列內容:

    • ORGANIZATION_ID:您的機構 ID,例如 1234567890123。系統不支援模擬多個機構的變更。

    • CONSTRAINT_PATH:您建立或更新的自訂限制條件完整路徑。例如:tmp/constraint.yaml。如果您設定 --policies 旗標,則不需要設定 --custom-constraints 旗標。

    • POLICY_PATH:您建立或更新的機構政策完整路徑。舉例來說,tmp/policy.yaml。如果您設定 --custom-constraints 旗標,則不必設定 --policies 旗標。

幾分鐘後,指令會列印資源清單,其中包含違反自訂限制、機構政策或兩者變更的資源。

您也可以在 Google Cloud 控制台的「模擬記錄」頁面查看結果。請參閱本頁面的「政策模擬器結果」,瞭解如何解讀結果。

以下是機構政策模擬的回應範例。 這項模擬作業會使用自訂限制,禁止建立未啟用二進位授權的 Google Kubernetes Engine 叢集資源。在本例中,如果套用建議的變更,會有兩個叢集資源違反政策:專案 orgpolicy-test-cluster 下的 simulator-test-project,以及專案 autopilot-cluster-1 下的 orgpolicy-test-0

Waiting for operation [organizations/012345678901/locations/global/orgPolic
yViolationsPreviews/85be9a2d-8c49-470d-a65a-d0cb9ffa8f83/operations/1883a83
c-c448-42e5-a7c5-10a850928f06] to complete...done.
---
customConstraint:
  actionType: ALLOW
  condition: resource.binaryAuthorization.enabled == true
  methodTypes:
  - CREATE
  name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
  resourceTypes:
  - container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/b9fd23a5-7163-46de-9fec-7b9aa6af1113
resource:
  ancestors:
  - organizations/012345678901
  - projects/456789012345
  assetType: container.googleapis.com/Cluster
  resource: //container.googleapis.com/projects/simulator-test-project/locations/us-central1/clusters/orgpolicy-test-cluster
---
customConstraint:
  actionType: ALLOW
  condition: resource.binaryAuthorization.enabled == true
  methodTypes:
  - CREATE
  name: organizations/012345678901/customConstraints/custom.EnforceGKEBinaryAuthz
  resourceTypes:
  - container.googleapis.com/Cluster
name: organizations/012345678901/locations/global/orgPolicyViolationsPreviews/3dd47fd3-6df1-4156-8f10-413a3fc0ed83/orgPolicyViolations/e73896e6-7613-4a8d-8436-5df7a6455121
resource:
  ancestors:
  - organizations/012345678901
  - folders/789012345678
  - projects/456789012345
  assetType: container.googleapis.com/Cluster
  resource: //container.googleapis.com/projects/orgpolicy-test-0/locations/us-central1/clusters/autopilot-cluster-1

測試代管限制的變更

控制台

  1. 前往 Google Cloud 控制台的「Organization policies」(組織政策) 頁面。

    前往「機構政策」

  2. 按一下「選取專案」,然後選取要編輯機構政策的機構、資料夾或專案資源。

  3. 從清單中選取要更新機構政策的受管理限制。在「政策詳細資料」頁面中,您可以查看這項機構政策的來源、這項資源的有效政策評估,以及受管理限制的詳細資料。

  4. 如要更新資源的機構政策,請按一下「管理政策」

  5. 在「編輯政策」頁面中,選取「覆寫上層政策」

  6. 點選「新增規則」

  7. 在「Enforcement」(強制執行) 區段中,選取是否要強制執行這項機構政策。

  8. 如要根據標記為機構政策設定條件,請按一下「新增條件」。如果您在組織政策中新增條件規則,就必須新增至少一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

  9. 按一下「測試變更」

系統隨即顯示「模擬記錄」頁面,其中列出您在過去 14 天執行的模擬作業。詳情請參閱本頁面的「政策模擬工具結果」。

gcloud

  1. 建立或修改機構政策,強制執行受管理限制。

    • 如要測試建立或更新強制執行受管理限制的機構政策,請建立定義機構政策的 JSON 或 YAML 檔案。

      name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: ENFORCEMENT_STATE
      

      更改下列內容:

      • RESOURCE_TYPE,搭配 organizationsfoldersprojects

      • RESOURCE_ID,視 RESOURCE_TYPE 中指定的資源類型而定,可以是機構 ID、資料夾 ID、專案 ID 或專案編號。

      • CONSTRAINT_NAME,其中包含您要測試的受管理限制名稱。例如:iam.managed.disableServiceAccountKeyCreation

      • ENFORCEMENT_STATE,在設定時強制執行這項機構政策,或在設定時停用這項政策。truefalse

      (選用) 如要根據標記設定機構政策條件,請在 rules 中新增 condition 區塊。如果為組織政策新增條件規則,至少須新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

    • 如要測試刪除強制執行受管理限制的機構政策,請建立 JSON 或 YAML 檔案,定義機構政策,但除了從上層資源繼承政策外,不設定任何規則:

      name: organizations/ORGANIZATION_ID/policies/CONSTRAINT_NAME
      spec:
        inheritFromParent: true
      

    更改下列內容:

    • ORGANIZATION_ID 改成您的機構 ID。

    • CONSTRAINT_NAME,並輸入要刪除的受管理限制名稱。例如:iam.managed.disableServiceAccountKeyCreation

  2. 請執行 policy-intelligence simulate orgpolicy 指令。

    gcloud policy-intelligence simulate orgpolicy \
      --organization=ORGANIZATION_ID \
      --policies=POLICY_PATH
    

    更改下列內容:

    • ORGANIZATION_ID 替換為您的機構 ID,例如 1234567890123。系統不支援模擬多個機構的變更。

    • POLICY_PATH,並提供機構政策 YAML 檔案的完整路徑。

    幾分鐘後,這項指令會列印資源清單,其中包含違反自訂限制、機構政策或兩者變更的資源。

    您也可以在 Google Cloud 控制台的「模擬記錄」頁面查看結果。請參閱本頁面的「政策模擬器結果」,瞭解如何解讀結果。

政策模擬器結果

Policy Simulator 會將自訂限制或機構政策變更的結果,以模擬政策違規清單的形式回報。Google Cloud 控制台會儲存您在過去 14 天內產生的模擬結果。

如要查看模擬結果,請前往「模擬記錄」頁面。

前往「模擬記錄」

選取模擬即可查看詳細資料。在「模擬報表」頁面中,您可以查看違規預覽,其中列出因新的自訂限制或機構政策而造成的違規總數、模擬範圍內檢查的資源數量,以及模擬完成時間。

如果您模擬了自訂限制,可以按一下「限制詳細資料」,查看模擬的特定設定。如果您模擬了機構政策,「政策詳細資料」分頁會顯示模擬的設定。

資源表格中會列出所有違規事項。系統會列出違反新自訂限制或機構政策的每個資源,並提供 Cloud Asset Inventory 中資源項目的連結。專案、資料夾和機構資源會顯示資源總數,這些資源位於階層結構中,違反新的自訂限制或機構政策。

套用測試過的政策變更

測試完自訂限制和/或組織政策後,即可設定自訂限制並強制執行組織政策。無論政策模擬器結果的產生方式為何,您都可以在 Google Cloud 控制台中查看所有結果。如果模擬報表包含的組織政策變更不超過一項,您可以直接透過模擬結果強制執行組織政策。如要強制執行多項機構政策的測試變更,請使用 Google Cloud CLI。

主控台

  1. 如要強制執行自訂限制政策模擬器結果,請前往「模擬記錄」頁面。

    前往「模擬記錄」

  2. 選取要套用的自訂限制或機構政策的模擬報表。

  3. 如果這份模擬報表包含自訂限制,請按一下「儲存限制」

  4. 如果這份模擬報表包含最多一項組織政策的變更,您可以點選「設定模擬測試政策」,將該組織政策套用為模擬測試政策,監控正式環境中的運作情形,避免帶來風險。系統會顯示新機構政策的「政策詳細資料」頁面。

    如要立即強制執行機構政策,請按一下 ,然後點選「設定政策」

gcloud

  1. 如要強制執行自訂限制,您必須進行設定,讓機構政策可使用該限制。如要設定自訂限制,請使用 gcloud org-policies set-custom-constraint 指令:

    gcloud org-policies set-custom-constraint CONSTRAINT_PATH
    

    CONSTRAINT_PATH 替換為自訂限制檔案的完整路徑。例如:/home/user/customconstraint.yaml

    完成後,自訂限制就會顯示在機構政策清單中。 Google Cloud

  2. 如要設定機構政策,請使用 gcloud org-policies set-policy 指令:

    gcloud org-policies set-policy POLICY_PATH
    

    POLICY_PATH 替換為機構政策 YAML 檔案的完整路徑。

    政策最多需要 15 分鐘才會生效。

儲存模擬結果

主控台

如果您使用 Google Cloud 控制台,可以將政策模擬器結果儲存為 CSV 檔案。

  1. 如要儲存 Policy Simulator 結果,請前往「模擬記錄」頁面。

    前往「模擬記錄」

  2. 選取要儲存的模擬報表。

  3. 按一下 「匯出完整結果」

gcloud

如果您使用 gcloud CLI,可以將政策模擬器結果儲存為 JSON 或 YAML 檔案。

根據預設,Google Cloud CLI 中的測試結果會以 YAML 格式輸出。如要將測試結果儲存為 YAML 檔案,請在執行模擬時重新導向 simulate orgpolicy 指令的輸出內容:

> FILENAME

FILENAME 替換為輸出檔案的名稱。

如要將測試結果儲存為 JSON 檔案,請在執行模擬時,將下列標記新增至 simulate orgpolicy 指令:

--format=json > FILENAME

FILENAME 替換為輸出檔案的名稱。

後續步驟