為所有 GKE 叢集啟用以持續驗證檢查為基礎的平台政策

本頁說明如何使用 Organization Policy Service,要求 GKE 叢集採用一或多項以連續驗證 (CV) 檢查為基礎的平台政策。您可以在自訂限制條件中指定必要的檢查式平台政策。然後在機構政策中強制執行自訂限制。

費用

本指南使用下列 Google Cloud 服務:

  • 二進位授權,但 CV 在預先發布版階段免費提供
  • 機構政策和限制免費提供。

事前準備

  1. 啟用二進位授權
  2. 設定以檢查為準的 CV 平台政策,以及至少一項以檢查為準的 CV 平台政策

必要的角色

如要取得建立限制和強制執行組織政策所需的權限,請要求管理員為您授予組織的組織政策管理員 (roles/orgpolicy.policyAdmin) 身分與存取權管理角色。 Google Cloud 如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

建立 CV 自訂限制

控制台

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

    前往「機構政策」

  2. 在「機構政策」頁面,按一下「自訂限制」

  3. 如果系統提示,請按一下「切換至上層機構」。如要進一步瞭解機構,請參閱機構政策服務簡介

  4. 在「限制詳細資料」中,於欄位中輸入下列資訊:

    1. 顯示名稱:限制的顯示名稱,例如 Require a Binary Authorization continuous validation policy for all GKE clusters。儲存限制後,您可以使用顯示名稱查詢限制。 顯示名稱欄位的長度上限為 200 個字元

    2. 限制 ID:限制的限制 ID,例如 RequireBinAuthzCVPolicy

    3. 說明 (選填):違反政策時,要以錯誤訊息形式顯示的限制說明。說明欄位的長度上限為 2000 個字元。

  5. 在「強制執行」中,執行下列操作:

    1. 在「Resource types」(資源類型) 中輸入 container.googleaips.com/Cluster

    2. 在「強制執行方式」中,選取「在建立及更新時強制執行」

    3. 在「Condition」(條件) 欄位中輸入運算式。 這個欄位的長度上限為 1000 個字元。當條件評估結果為 true 時,系統會強制執行自訂限制。條件是一般運算語言 (CEL) 語法中的運算式。您可以使用 and (&&) 和 or (||) 結合運算式,建立複雜條件。CEL 是一種類似 C 的運算式語言,如要進一步瞭解 CEL 的語法和語意,請參閱 https://github.com/google/cel-spec。 如要輸入條件,請執行下列步驟:

      1. 按一下「編輯條件」

      2. 輸入運算式,檢查是否有 CV 平台政策。 下列條件規定必須存在 CV 平台政策繫結,且平台政策必須具有特定名稱:

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
        

        更改下列內容:

        • PROJECT_ID:平台政策的專案 ID。專案必須位於同一個機構。
        • POLICY_ID:平台政策的政策 ID。

        下列條件要求存在兩個 CV 平台政策繫結,且每個繫結都有特定的平台政策名稱。

        resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
        
        • PROJECT_ID1:第一個平台政策的專案 ID。專案必須位於同一個機構。
        • POLICY_ID1:第一個平台政策的政策 ID。
        • PROJECT_ID2:第二個平台政策的專案 ID。
        • POLICY_ID2:第二個平台政策的政策 ID。

        • 按一下 [儲存]

    4. 在「動作」中選取「允許」

  6. 如要建立自訂限制,請按一下「建立限制」

gcloud

  1. 建立自訂限制的 YAML 檔案:

    name: organizations/ORGANIZATION_ID/customConstraints/custom.CONSTRAINT_ID
    resource_types: container.googleapis.com/Cluster
    method_types:
      - CREATE
      - UPDATE
    condition: >-
      CONDITION
    action_type: ACTION
    display_name: DISPLAY_NAME
    description: DESCRIPTION
    

    更改下列內容:

    • ORGANIZATION_ID:貴機構的 ID,例如 123456789
    • CONSTRAINT_ID:限制 ID,例如 RequireBinAuthzCVPolicy
    • CONDITION:輸入運算式,檢查是否有 CV 平台政策。 這個欄位的長度上限為 1000 個字元。當條件評估結果為 true 時,系統會強制執行自訂限制。條件是一般運算語言 (CEL) 語法中的運算式。您可以使用 and (&&) 和 or (||) 結合運算式,建立複雜條件。CEL 是一種類似 C 的運算式語言,如要進一步瞭解 CEL 的語法和語意,請參閱 https://github.com/google/cel-spec。 下列條件規定必須存在 CV 平台政策繫結,且平台政策具有特定名稱:

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID/platforms/gke/policies/POLICY_ID")
      

      更改下列內容:

      • PROJECT_ID:平台政策的專案 ID。專案必須位於同一個機構。
      • POLICY_ID:平台政策的政策 ID。

      下列條件要求存在兩個 CV 平台政策繫結,且每個繫結都有特定的平台政策名稱。

      resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID1/platforms/gke/policies/POLICY_ID1") && resource.binaryAuthorization.policyBindings.exists(policy, policy.name == "projects/PROJECT_ID2/platforms/gke/policies/POLICY_ID2")
      
      • PROJECT_ID1:第一個平台政策的專案 ID。專案必須位於同一個機構。
      • POLICY_ID1:第一個平台政策的政策 ID。
      • PROJECT_ID2:第二個平台政策的專案 ID。
      • POLICY_ID2:第二個平台政策的政策 ID。

      • ACTION:符合 condition 時要採取的動作。可以是 ALLOWDENY

      • DISPLAY_NAME:限制的人性化名稱,例如 Require a Binary Authorization continuous validation policy for all GKE clusters。 顯示名稱欄位的長度上限為 200 個字元

      • DESCRIPTION:違反政策時,要以錯誤訊息形式顯示的限制說明。說明欄位的長度上限為 2000 個字元。

    • 套用自訂限制:

      gcloud org-policies set-custom-constraint CUSTOM_CONSTRAINT_PATH
      

      CUSTOM_CONSTRAINT_PATH 替換為自訂限制定義的路徑。

    • 確認自訂限制是否存在:

      gcloud org-policies list-custom-constraints \
          --organization=ORGANIZATION_ID
      

      輸出結果會與下列內容相似:

      CUSTOM_CONSTRAINT: custom.RequireBinAuthzCVPolicy
      ACTION_TYPE: ALLOW
      METHOD_TYPES: CREATE,UPDATE
      RESOURCE_TYPES: container.googleapis.com/Cluster
      DISPLAY_NAME: This cluster requires the continuous validation policy: projects/my-project/platforms/gke/policies/my-policy
      

如要強制執行您建立的自訂限制,請建立機構政策

使用機構政策強制執行自訂限制

如要強制執行新的自訂限制,請建立參照該限制的機構政策,然後套用該政策。

控制台

如要強制執行限制,請按照下列步驟操作:

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

    前往「機構政策」

  2. 選取專案選擇工具,然後選取機構。

  3. 在清單中搜尋並選取限制。

  4. 在該限制的「政策詳細資料」頁面中,按一下「管理政策」

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

  6. 點選「新增規則」

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

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

  9. 如要完成並套用機構政策,請按一下「設定政策」

gcloud

  1. 建立 YAML 政策定義檔案:

    name: organizations/ORGANIZATION_ID/policies/custom.CONSTRAINT_ID
    spec:
      rules:
      - enforce: true
    

    更改下列內容:

    • ORGANIZATION_ID:機構 ID
    • CONSTRAINT_ID:限制 ID
  2. 強制執行政策:

    gcloud org-policies set-policy ORG_POLICY_PATH
    

    請將 ORG_POLICY_PATH 替換為政策定義檔案的路徑。

  3. 確認政策存在:

    gcloud org-policies list \
        --organization=ORGANIZATION_ID
    

    ORGANIZATION_ID 替換為機構 ID。

    如需引數清單,請參閱 gcloud org-policies list

    輸出結果會與下列內容相似:

    CONSTRAINT: custom.RequireBinAuthzCVPolicy
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CN622LIGEIDXnpMB-
    

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

如要對以 CV 檢查為依據的平台政策強制執行多項限制,請按照下列步驟操作:

  • 每個 CV 檢查型政策建立一個自訂限制
  • 如要使用每個自訂限制條件更新機構政策,請參閱本節說明。

刪除自訂限制

您可以使用 Google Cloud 控制台或 Google Cloud CLI 刪除自訂限制。

控制台

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

    前往「機構政策」

  2. 選取頁面頂端的專案挑選器。

  3. 在專案選擇工具中選取機構。

  4. 在清單中搜尋並選取限制。

  5. 在「Constraint details」(限制詳細資料) 中,按一下 「Delete」(刪除)

  6. 按一下「刪除」,確認要刪除限制。

gcloud

如要刪除自訂限制,請使用 org-policies delete-custom-constraint gcloud CLI 指令:

gcloud org-policies delete-custom-constraint custom.CONSTRAINT_ID \
  --organization=ORGANIZATION_ID

更改下列內容:

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

  • CONSTRAINT_NAME:自訂限制的名稱

輸出結果會與下列內容相似:

Deleted custom constraint [organizations/123456789/customConstraints/CONSTRAINT_NAME]

刪除自訂限制後,使用該限制建立的任何政策都會繼續存在,但系統會忽略這些政策。您無法建立與已刪除自訂限制條件同名的自訂限制條件。

後續步驟