在模擬測試模式下建立機構政策

本頁說明如何以模擬測試模式使用組織政策,在政策變更強制執行前,監控變更對工作流程的影響。

建立及強制執行模擬測試模式的機構政策,與其他機構政策類似,且系統會稽核記錄違反政策的行為,但不會拒絕這類行為。

事前準備

如要在模擬執行模式下使用機構政策,您必須為 Google Cloud 專案啟用計費功能。如要瞭解如何檢查專案是否已啟用帳單功能,請參閱「確認專案的帳單狀態」一文。

如要進一步瞭解機構政策和限制條件的定義和運作方式,請參閱「機構政策服務簡介」。

必要的角色

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

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

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

您可以將身分與存取權管理條件新增至機構政策管理員角色繫結,藉此委派機構政策的管理權。如要控管主體可管理組織政策的資源,您可以根據特定標記設定角色繫結條件。詳情請參閱「使用限制」。

限制

模擬測試組織政策只能使用下列機構政策限制:

如果嘗試使用任何其他限制,以模擬測試模式建立機構政策,就會發生錯誤。

使用清單參數建立模擬測試政策

您可以使用Google Cloud 控制台或 Google Cloud CLI,以模擬執行模式為限制條件建立機構政策。以下範例說明如何在試執行模式中建立機構政策,稽核 compute.managed.restrictProtocolForwardingCreationForTypes 管理限制的效果。

控制台

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

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

  2. 在專案選擇工具中,選取要設定組織政策的資源。

  3. 在「Organization policies」(機構政策) 頁面的清單中,選取「Restricts the use of protocol forwarding」(限制使用通訊協定轉送) 限制。

  4. 選取「試營運」分頁標籤。

  5. 按一下「管理模擬測試政策」

  6. 在「Edit dry-run policy」(編輯模擬測試政策) 頁面,選取「Override parent's policy」(覆寫上層政策)

  7. 按一下「Add rule」(新增規則)

  8. 在「Enforcement」(強制執行) 下方,選取「On」 (開啟)。

  9. 在「參數」下方,選取「編輯」圖示

  10. 在「編輯參數值」窗格中,選取「使用者定義」

  11. 在「User-defined values」(使用者定義的值) 方塊中輸入 EXTERNAL,然後按一下「Save」(儲存)

  12. 按一下「測試變更」,模擬這項機構政策的影響。詳情請參閱「使用 Policy Simulator 測試組織政策變更」。

  13. 如要在模擬測試模式下強制執行組織政策,請按一下「設定模擬測試政策」。你也可以點選「設定政策」設定直播政策。

如要驗證模擬測試模式下的組織政策狀態,請前往組織政策限制的「模擬測試」分頁。

如果專案強制執行模擬測試模式的機構政策,您可以按一下「查看模擬測試記錄」,查看專案的稽核記錄。對於這項機構政策,稽核記錄會顯示違規事項,就好像系統強制執行「限制使用通訊協定轉送」限制,只允許 EXTERNAL 通訊協定轉送部署作業。

gcloud

如要在模擬執行模式下建立組織政策,請建立定義限制的 YAML 檔案,並加入 dryRunSpec。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.restrictProtocolForwardingCreationForTypes
  dryRunSpec:
    rules:
    - enforce: true
      parameters:
       allowedSchemes:
        - EXTERNAL

更改下列內容:

  • RESOURCE_TYPE,搭配 organizationsfoldersprojects

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

這項機構政策不會強制執行 compute.managed.restrictProtocolForwardingCreationForTypes 限制,但稽核記錄會顯示違規事項,就好像政策已強制執行一樣。

如果您同時定義 specdryRunSpec,可以在同一個 YAML 檔案中設定正式和試營運的機構政策。例如:

name: RESOURCE_TYPE/RESOURCE_ID/policies/compute.managed.restrictProtocolForwardingCreationForTypes
spec:
  rules:
  - values:
      allowedValues:
      - INTERNAL
      - EXTERNAL

dryRunSpec:
  rules:
  - values:
      allowedValues:
      - INTERNAL

如要在模擬測試模式中強制執行機構政策,請使用 org-policies set policy 指令。如要使用新限制,以模擬執行模式更新現有的機構政策,請使用 --update-mask 旗標。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=UPDATE_MASK

更改下列內容:

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

  • UPDATE_MASK,並使用 spec 僅更新即時政策,或使用 dryRunSpec 僅以模擬執行模式更新機構政策。您也可以使用 * 同時更新 specdryRunSpec 欄位。如果更新現有機構政策時未設定這個欄位,這項指令會導致錯誤,且機構政策不會更新。

您可以使用 org-policies describe 指令,確認模擬測試模式中的機構政策是否已設定。只有在機構政策中存在 dryRunSpec 欄位時,才會顯示該欄位。

這項機構政策會強制執行 compute.managed.restrictProtocolForwardingCreationForTypes 限制,允許所有值。不過,稽核記錄會顯示違規事項,彷彿只允許 INTERNAL 通訊協定轉送部署作業。

使用布林規則建立模擬測試政策

您可以使用 Google Cloud 控制台或 Google Cloud CLI,為含有布林值規則的限制條件,以模擬執行模式建立機構政策。下列範例說明如何在模擬執行模式下建立機構政策,稽核自訂機構政策的影響。

控制台

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

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

  2. 在專案選擇工具中,選取要設定組織政策的資源。

  3. 在「Organization policies」(機構政策) 頁面的清單中,選取要強制執行的自訂機構政策。

  4. 選取「試營運」分頁標籤。

  5. 按一下「管理模擬測試政策」

  6. 在「Edit dry run policy」(編輯模擬測試政策) 頁面,選取「Override parent's policy」(覆寫上層政策)

  7. 按一下「Add rule」(新增規則)

  8. 在「Enforcement」(強制執行) 下方,選取「On」(開啟),然後按一下「Done」(完成)

  9. 如要在模擬測試模式下強制執行組織政策,請按一下「設定模擬測試政策」。確認機構政策在模擬執行模式中運作正常後,即可按一下「設定政策」,設定正式政策。

如要驗證模擬測試模式下的組織政策狀態,請前往組織政策限制的「模擬測試」分頁。

如果專案套用了模擬測試模式的機構政策,您可以按一下「查看拒絕記錄」,查看稽核記錄。對於這項機構政策,稽核記錄會顯示違規事項,就好像強制執行自訂機構政策一樣。

gcloud

如要在模擬執行模式下建立組織政策,請建立定義限制的 YAML 檔案,並加入 dryRunSpec。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/CONSTRAINT_NAME
  dryRunSpec:
    rules:
    - enforce: true

更改下列內容:

  • RESOURCE_TYPE,搭配 organizationsfoldersprojects

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

  • CONSTRAINT_NAME 替換為自訂限制的名稱。例如:custom.disableGkeAutoUpgrade

這項機構政策不會強制執行自訂限制,但稽核記錄會顯示違規事項,就好像政策已強制執行限制一樣。

如果您同時定義 specdryRunSpec,可以在同一個 YAML 檔案中設定正式機構政策和模擬執行模式的機構政策。例如:

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

dryRunSpec:
  rules:
  - enforce: true

如要在模擬測試模式中強制執行機構政策,請使用 org-policies set policy 指令。如要使用新限制,以模擬執行模式更新現有的機構政策,請使用 --update-mask 旗標。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=UPDATE_MASK

更改下列內容:

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

  • UPDATE_MASK,並使用 spec 僅更新即時政策,或使用 dryRunSpec 僅以模擬執行模式更新機構政策。您也可以使用 * 同時更新 specdryRunSpec 欄位。如果更新現有機構政策時未設定這個欄位,這項指令會導致錯誤,且機構政策不會更新。

如要確認是否已設定模擬測試模式的機構政策,請使用 org-policies describe 指令。只有在機構政策中存在 dryRunSpec 欄位時,才會顯示該欄位。

這項機構政策不會強制執行自訂限制。 不過,稽核記錄會顯示違反自訂限制的項目。

從現行政策建立模擬測試模式的組織政策

您可以將現有的機構政策做為起點,在模擬測試模式中建立機構政策。您可能想這麼做,瞭解變更現有政策對環境的影響。

您可以使用 Google Cloud 控制台或 Google Cloud CLI,根據現有政策在模擬執行模式下建立機構政策。

控制台

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

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

  2. 在專案選擇工具中,選取已設定「Restrict Resource Service Usage」(限制資源服務用量)限制的資源。

  3. 在「Organization policies」(機構政策) 頁面的清單中,選取「Restrict Resource Service Usage」(限制資源服務用量) 限制。

  4. 選取「直播」分頁標籤。

  5. 按一下「Manage Policy」(管理政策)

  6. 按一下「Add rule」(新增規則)

  7. 在「政策值」部分,選取「自訂」

  8. 從「政策類型」選取「拒絕」

  9. 在「Custom values」(自訂值) 方塊中輸入 appengine.googleapis.com

  10. 按一下「完成」,然後「設定試營運政策」

gcloud

如要根據現有的有效機構政策,在模擬執行模式中建立機構政策,請使用 org-policies describe 指令取得資源的現行政策。例如:

gcloud org-policies describe gcp.restrictServiceUsage \
  --project=PROJECT_ID

PROJECT_ID 替換為設定此機構政策的專案 ID 或專案編號。

輸出內容應如下所示:

  name: projects/123456789012/policies/gcp.restrictServiceUsage
  spec:
    etag: CJy93KEGEKCJw/QB
    rules:
    - values:
        allowedValues:
        - compute.googleapis.com
  updateTime: '2023-04-12T21:11:56.512804Z'

將這項指令的輸出內容複製到暫存檔案。編輯這個檔案,移除 etagupdateTime 欄位,並將 spec 欄位變更為 dryRunSpec。在模擬測試模式下,對組織政策中的條件約束設定進行任何變更,以利測試。

完成的 YAML 檔案應類似下列內容:

  name: projects/123456789012/policies/gcp.restrictServiceUsage
  dryRunSpec:
    rules:
    - values:
        allowedValues:
        - compute.googleapis.com
        - appengine.googleapis.com

如要在模擬測試模式下強制執行機構政策,請使用 org-policies set policy--update-mask 旗標。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=dryRunSpec

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

刪除模擬測試模式下的組織政策

您可以使用 Google Cloud 控制台或 Google Cloud CLI,以試執行模式刪除機構政策。

控制台

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

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

  2. 在專案選擇工具中,選取要設定組織政策的資源。

  3. 在「Organization policies」(機構政策) 頁面的清單中,選取「Restrict Resource Service Usage」(限制資源服務用量) 限制。

  4. 選取「試營運」分頁標籤。

  5. 按一下「刪除模擬測試政策」

gcloud

如要刪除模擬測試模式下的組織政策,請建立定義組織政策的 YAML 檔案,但不要指定模擬測試。例如:

  name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.restrictServiceUsage
  spec:
    rules:
    - values:
        allowedValues:
        - container.googleapis.com

更改下列內容:

  • RESOURCE_TYPE 搭配 organizationsfoldersprojects

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

然後使用 org-policies set policy 指令,並將 --update-mask 旗標設為 dryRunSpec。例如:

gcloud org-policies set-policy POLICY_PATH \
  --update-mask=dryRunSpec

這會更新現有組織政策,移除試營運規格,並忽略規格的正式部分。

如要同時刪除正式版和試執行模式的組織政策,請使用 org-policies delete 指令。例如:

gcloud org-policies delete CONSTRAINT_NAME \
  --RESOURCE_TYPE=RESOURCE_ID

更改下列內容:

  • CONSTRAINT_NAME 替換為要刪除的限制名稱。例如:gcp.restrictServiceUsage

  • RESOURCE_TYPE 搭配 organizationsfoldersprojects

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

有效評估模擬測試模式下的機構政策

模擬測試模式中的機構政策,會以與其他機構政策類似的方式繼承。如果機構資源設有處於試執行模式的機構政策,所有子系資源都會繼承該政策,除非在階層的較低層級覆寫政策。

有效政策評估會顯示合併至該資源的機構政策結果。因此,如果模擬測試模式政策是繼承而來,而非在本機設定,則對即時機構政策所做的調整,會反映在模擬測試模式的有效機構政策中。

修改專案的有效組織政策時,模擬測試模式中的有效組織政策也會一併修改。

舉例來說,假設機構資源 Organization A 的有效機構政策設為 enforced: false,而機構政策的試執行模式設為 enforced: true。子項資源 Folder B 也會將正式機構政策設為 enforced: false,並沿用模擬測試模式的機構政策。在 Folder B 上,設定的正式政策表示模擬測試模式中組織政策的有效政策評估結果也是 enforce: false,會覆寫上層機構中設定的模擬測試模式組織政策。

Folder B 的子項資源 Project X 會將即時政策設為 enforced: true。與 Folder B 上的行為類似,由於已設定即時政策,因此 Project X 模擬測試模式中組織政策的有效評估結果為 enforced: true

Folder B 的另一個子項資源 Project Y 會將機構政策設為模擬測試模式 enforced: true。該資源會沿用父項資源的機構政策,因此有效評估結果為:有效政策為 enforced: false,模擬測試模式下的機構政策為 enforced: true

資源 設定即時機構政策 有效的即時機構政策 在模擬測試模式下設定機構政策 模擬測試模式下的有效組織政策
機構 A enforced: false enforced: false enforced: true enforced: true
資料夾 B enforced: false enforced: false enforced: false
資料夾 C enforced: false enforced: true
Project X enforced: true enforced: true enforced: true
Project Y enforced: false enforced: true enforced: true

在模擬測試模式下分析機構政策的影響

模擬測試模式下的機構政策在強制執行時,不會封鎖任何作業。如要查看機構政策的影響,請查看機構政策稽核記錄

系統會根據特定資源強制執行的政策是否允許或拒絕作業,產生實際機構政策和模擬測試模式機構政策的機構政策稽核記錄。下表說明系統何時會產生機構政策稽核記錄:

有效的機構政策 模擬測試模式下的組織政策 產生稽核記錄
允許 允許
允許 拒絕 僅限模擬測試模式的稽核記錄
拒絕 允許 即時和模擬測試模式的稽核記錄
拒絕 拒絕 即時和模擬測試模式的稽核記錄

模擬測試模式下的組織政策違規事項,會與稽核記錄中的即時模式違規事項一併顯示。例如:

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 7,
      "message": "PERMISSION_DENIED"
    },
    "authenticationInfo": {},
    "requestMetadata": {
      "callerIp": "1.2.3.4",
      "requestAttributes": {},
      "destinationAttributes": {}
    },
    "serviceName": "appengine.googleapis.com",
    "methodName": "google.api.appengine.v1.appengine.apps.services.get",
    "resourceName": "projects/sur-project-test-3",
    "metadata": {
      "constraint": "constraints/gcp.restrictServiceUsage",
      "checkedValue": "appengine.googleapis.com",
      "liveResult": "ALLOWED",
      "@type": "type.googleapis.com/google.cloud.audit.OrgPolicyDryRunAuditMetadata",
      "dryRunResult": "DENIED"
    }
  },
  "insertId": "1f2bvoxcmg1",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "sur-project-test-3",
      "service": "appengine.googleapis.com",
      "method": "google.api.appengine.v1.appengine.apps.services.get"
    }
  },
  "timestamp": "2022-06-16T19:42:58.244990928Z",
  "severity": "WARNING",
  "logName": "projects/sur-project-test-3/logs/cloudaudit.googleapis.com%2Fpolicy",
  "receiveTimestamp": "2022-06-16T19:42:59.572025716Z"
}

您可以使用 Logs Explorer,只查詢處於模擬執行模式的組織政策違規事項。

控制台

在 Google Cloud 控制台中,可以使用 Logs Explorer 擷取 Google Cloud 專案、資料夾或組織的稽核記錄項目:

  1. 前往 Google Cloud 控制台的「記錄」>「記錄檔探索工具」頁面。

    前往 Logs Explorer

  2. 選取現有的 Google Cloud 專案、資料夾或組織。

  3. 在「查詢建立工具」窗格中,執行下列操作:

    • 在「Resource type」(資源類型) 中,選取要查看稽核記錄的 Google Cloud 資源。

    • 在「記錄檔名稱」中,選取「政策」稽核記錄類型。

    • 在「Query」(查詢) 窗格中,輸入下列內容: protoPayload.metadata.dryRunResult = "DENIED" AND \ protoPayload.metadata.liveResult = "ALLOWED"

    如果無法在 Logs Explorer 中查看記錄檔,請參閱疑難排解資訊。

    如要進一步瞭解如何使用 Logs Explorer 查詢,請參閱「透過 Logs Explorer 建構查詢」。

gcloud

Google Cloud CLI 提供 Logging API 的指令列介面,並在每個記錄檔名稱中提供有效的資源 ID。舉例來說,如果查詢包含專案 ID,則您提供的專案 ID 必須參照目前選取的專案名稱。

如要讀取模擬測試模式下組織政策違規事項的稽核記錄項目,請執行下列指令:

gcloud logging read protoPayload.metadata.dryRunResult = "DENIED" AND \
      protoPayload.metadata.liveResult = "ALLOWED" \
    --RESOURCE_TYPE=RESOURCE_ID \

更改下列內容:

  • RESOURCE_TYPE 搭配 organizationfolderproject

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

在指令中加入 --freshness 旗標,即可讀取超過 1 天的記錄檔。

如要進一步瞭解如何使用 gcloud CLI,請參閱 gcloud logging read

匯總稽核記錄項目

如果機構底下有許多專案,可以使用匯總接收器,將機構底下所有專案的稽核記錄項目匯總並傳送至 BigQuery 資料表。

  1. 如要建立匯總接收器,請使用 logging sinks create 指令。

    使用下列指令前,請先替換以下項目:

    • SINK_NAME:記錄接收器的名稱。接收器名稱一經建立即無法變更。

    • PROJECT_ID:BigQuery 資料集所在專案的 ID。

    • DATASET_ID:可寫入的 BigQuery 資料集 ID。

    • ORGANIZATION_ID:組織 ID。

    執行 gcloud logging sinks create 指令:

    gcloud logging sinks create SINK_NAME \
      bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID \
      --include-children \
      --organization=ORGANIZATION_ID \
      --log-filter='logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy" AND protoPayload.metadata.@type:OrgPolicyDryRunAuditMetadata'
    
  2. 如要轉送記錄項目,您必須授予與接收器相關聯的服務帳戶,將記錄項目轉送至目的地的權限。

    如要找出需要授予權限的服務帳戶,請使用 gcloud logging sinks describe 指令。

    使用下列指令前,請將 SINK_NAME 替換為先前建立的記錄接收器名稱。

    執行 gcloud logging sinks describe 指令:

    gcloud logging sinks describe SINK_NAME
    
  3. 如果接收器詳細資料包含標示為 writerIdentity 的欄位,請繼續下一個步驟。如果詳細資料不包含 writerIdentity 欄位,則不需要為接收器設定目的地權限。

  4. 將接收器的寫入者身分複製到剪貼簿。以下說明寫入者身分:

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  5. 使用 gcloud projects add-iam-policy-binding 指令,授予接收器的寫入者身分將記錄資料寫入目的地的權限。

    使用下列指令前,請先替換以下項目:

    • PROJECT_ID:儲存匯總接收器目的地的專案 ID。

    • PRINCIPAL_ID:您先前複製的接收器寫入者身分。

    執行 gcloud projects add-iam-policy-binding 指令:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=PRINCIPAL_ID \
      --role=roles/bigquery.dataEditor
    

    如要進一步瞭解如何建立匯總接收器,請參閱「將機構層級記錄檔彙整並轉送至支援的目的地」。

  6. 如要查看已傳送至 BigQuery 的記錄檔,請按照下列步驟操作:

    1. 前往 Google Cloud 控制台的「BigQuery」BigQuery頁面:

      前往 BigQuery Studio

      您也可以透過搜尋列找到這個頁面。

    2. 在「Explorer」面板中展開專案並選取資料集。

      您可以在「Details」(詳細資料) 分頁中看到記錄項目,也可以查詢資料表以傳回資料。

    3. 建立查詢,分析模擬測試機構政策。舉例來說,下列查詢會傳回過去七天內產生的拒絕項目,以及乾式執行的機構政策稽核記錄。

    SELECT protopayload_auditlog.serviceName as serviceName,
        protopayload_auditlog.methodName as methodName,
        JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.constraint') as constraint,
        JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.dryRunResult') as dryRunResult,
        JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.liveResult') as liveResult
    FROM {PROJECT_ID}.{DATASET_ID}.cloudaudit_googleapis_com_policy_*
    WHERE JSON_EXTRACT_SCALAR(protopayload_auditlog.metadataJson, '$.dryRunResult') = "DENIED"
    AND `timestamp` > DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY)
    LIMIT 1000

    更改下列內容:

    • PROJECT_ID:包含 BigQuery 資料集的專案 ID。

    • DATASET_ID:可寫入的 BigQuery 資料集 ID。

    詳情請參閱查看已傳送至 BigQuery 的記錄

後續步驟

如要進一步瞭解如何建立及管理機構政策限制,請參閱「使用限制」。