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

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

本頁面說明如何使用 Policy Simulator 測試組織政策變更,以及如何解讀模擬結果,並視需要套用測試過的組織政策。

事前準備

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

    gcloud config set project PROJECT_ID

    PROJECT_ID 替換為專案名稱或 ID。

  • 啟用 Policy Simulator 和 Resource Manager API。

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    啟用 API

  • 選用: 瞭解組織政策服務簡介

必要的角色

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

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

所需權限

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

  • 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」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

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

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

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

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

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

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

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

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

    3. 在「說明」方塊中,輸入違反政策時要以錯誤訊息形式顯示的限制說明。這個欄位的長度上限為 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. 選用:如要根據標記設定組織政策的條件,請按一下「Add condition」(新增條件)。如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定機構政策」。

    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 替換成您的機構 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 替換成您的機構 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 替換成您的機構 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 控制台的「模擬記錄」頁面查看結果。請參閱本頁面的「政策模擬工具結果」一節,瞭解如何解讀結果。

以下是機構政策模擬的範例回應。這項模擬涉及一項自訂限制,可限制建立未啟用 Binary Authorization 的 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」(組織政策) 頁面。

    前往「Organization policies」(組織政策)

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

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

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

  5. 在「Edit policy」(編輯政策) 頁面,選取「Override parent's policy」(覆寫上層政策)

  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 中指定的資源類型。

      • 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 結果

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

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

前往「模擬記錄」

頁面會列出每項模擬作業的機構政策、模擬作業開始日期和模擬作業狀態。

模擬作業可能處於下列狀態:

  • 處理中:模擬作業正在執行,但尚未完成。最多可有 50 項進行中的模擬。
  • 已完成:模擬作業已完成。
  • 錯誤:發生錯誤,因此無法完成模擬作業。

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

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

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

套用測試過的政策變更

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

控制台

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

    前往「模擬記錄」

  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 控制台,可以將 Policy Simulator 結果儲存為 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 替換為輸出檔案的名稱。

錯誤

下列錯誤可能會導致模擬失敗:

  • 超過並行模擬作業數量上限:使用者目前有 50 項模擬作業正在進行中,已達上限。如要解決這個問題,請等待其中一項模擬作業完成,然後再試一次。
  • 逾時:模擬作業執行時間過長,因此逾時。如果模擬時間超過 4 小時,系統會自動逾時。如要解決這個問題,請嘗試再次執行模擬,或縮小模擬大小。
  • 模擬作業建構無效:提議的機構政策無效。舉例來說,提議的政策含有無效的條件運算式。如要解決這個問題,請修正政策並重試。
  • 權限遭拒:您沒有執行模擬的權限。如要解決這個問題,請確認您已獲派必要角色,然後再試一次。

後續步驟