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

本頁面說明如何使用組織政策服務,要求 GKE 叢集使用一或多項以持續驗證 (CV) 檢查為基礎的平台政策。您可以在自訂限制中指定必要的檢查平台政策。接著,您會在組織政策中強制執行自訂限制。

費用

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

  • 二進位授權,但持續驗證在預先發布版階段可無須支付費用使用
  • 組織政策和限制免付費。

事前準備

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

必要的角色

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

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

建立 CV 自訂限制

控制台

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

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

  2. 在「Organization policies」(組織政策) 頁面,按一下「 Custom constraint」(自訂限制)。

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

  4. 在「Constraint details」(限制詳細資料) 的欄位中輸入下列資訊:

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

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

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

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

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

    2. 在「Enforcement method」(強制執行方法) 中,選取「Enforce on create and update」(在建立及更新時強制執行)。

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

      1. 按一下 「Edit condition」(編輯條件)。

      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. 如要建立自訂限制,請按一下「Create Constraint」(建立限制)。

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 平台政策。這個欄位的長度上限為 1,500 個字元。如果條件評估結果為 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 時採取動作。可以是 ALLOW 或 DENY。

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

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

  2. 選取專案挑選器,然後選取組織。

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

  4. 在該限制的「Policy details」(政策詳細資料) 頁面中,按一下「Manage policy」(管理政策)。

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

  6. 點選「新增規則」。

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

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

  9. 如要完成並套用組織政策,請按一下「Set policy」(設定政策)。

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

    前往「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]

刪除自訂限制後,使用該限制建立的所有政策仍會存在,但會遭到忽略。您無法建立與已刪除自訂限制同名的新自訂限制。

後續步驟