建立及管理自訂限制

本頁面說明如何在 GKE on AWS 環境中啟用及使用自訂限制。 Google Cloud「組織政策服務」可協助您管理資源設定,並在雲端環境中建立防護措施。

總覽

透過自訂機構政策,您可以在 GKE Multi-cloud 環境中建立精細的資源政策,滿足機構的特定安全性和法規遵循需求。您也可以在模擬測試模式下建立機構政策,測試新政策,不會影響正式環境工作負載。

如要進一步瞭解機構政策,請參閱機構政策服務簡介

事前準備

開始之前,請務必瞭解下列主題。

政策繼承

根據預設,您強制執行的政策會由資源的子系繼承。舉例來說,如果您在機構中強制執行政策, Google Cloud 系統就會在機構中的所有專案強制執行該政策。如要進一步瞭解政策沿用方式和如何變更評估規則,請參閱「階層評估規則」。

限制

建立自訂限制前,請注意以下限制:

  • 自訂限制只能針對 AWS 上的 GKE 資源,透過 CREATEUPDATE 方法強制執行。
  • 新強制執行的自訂限制不會自動套用至現有資源。您必須更新現有資源,才能套用限制。 如要找出需要更新的現有資源,可以強制執行模擬測試機構政策
  • 如要建立限制並強制執行機構政策,您必須具備 Google Cloud 機構的機構政策管理員 (roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解使用自訂限制管理機構組織政策所需的權限,請參閱「必要角色」。

定價

機構政策和自訂限制免費提供。

建立自訂限制

自訂限制必須使用 AwsClusterAwsNodepool API 資源規格中的欄位指定,但「僅限輸出」欄位除外。

建立自訂限制

如要建立新的自訂限制,請在 YAML 檔案中定義限制,然後使用 Google Cloud CLI 在機構中套用自訂限制。這項限制必須封裝您要在 GKE on AWS 資源中強制執行的特定政策。

建立 YAML 檔案,在叢集上定義自訂限制:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsCluster
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

如要在節點集區上定義自訂限制,請使用下列 YAML 設定:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- gkemulticloud.googleapis.com/AwsNodePool
methodTypes:
- CREATE
condition: CONDITION
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

更改下列內容:

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

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

  • CONDITION:針對資源表示法編寫的條件。 Google Cloud 條件是以一般運算語言 (CEL) 編寫。這個欄位的長度上限為 1,000 個字元。 舉例來說,條件:"key" in resource.annotations && resource.annotations.key == "created-by"

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

  • DISPLAY_NAME:限制的顯示名稱。這個欄位的長度上限為 200 個字元。

  • DESCRIPTION:在違反政策時,要以錯誤訊息形式顯示的限制說明,例如「這個欄位的長度上限為 2,000 個字元」"Allow new clusters only when certain annotations are set."

如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。

將限制與資源建立關聯

為新的自訂限制建立 YAML 檔案後,您必須進行設定,才能在機構政策中使用該限制。

  1. 如要設定自訂限制,請使用 gcloud org-policies set-custom-constraint 指令:

    gcloud org-policies set-custom-constraint PATH_TO_FILE
    

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

  2. 如要確認是否已建立自訂限制,請使用 gcloud org-policies list-custom-constraints 指令:

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

    輸出內容會列出建立的政策:

    CUSTOM_CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    ACTION_TYPE: ALLOW
    METHOD_TYPES: CREATE
    RESOURCE_TYPES: gkemulticloud.googleapis.com/AwsCluster
    DISPLAY_NAME: Allow new clusters only when certain annotations are set.
    

強制執行自訂限制

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

  1. 建立機構組織政策的 YAML 檔案:

    name: RESOURCE_HIERARCHY/policies/POLICY_NAME
    spec:
      rules:
      - enforce: true
    

    更改下列內容:

    • RESOURCE_HIERARCHY:新政策的位置,這會影響強制執行的範圍。請參考 Google Cloud 資源階層。舉例來說,如要在特定專案中強制執行政策,請使用 projects/PROJECT_ID。如要在特定機構中強制執行政策,請使用 organizations/ORGANIZATION_ID

    • POLICY_NAME:新政策的名稱。

  2. 強制執行政策:

    gcloud org-policies set-policy PATH_TO_POLICY
    

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

  3. 確認政策存在:

    gcloud org-policies list --RESOURCE_FLAG=RESOURCE_ID
    

    更改下列內容:

    • RESOURCE_FLAG:您強制執行政策的 Google Cloud 資源。例如專案或機構。

    • RESOURCE_ID:您強制執行政策的資源 ID。例如專案 ID 或機構 ID。

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

    CONSTRAINT: custom.allowClusterCreateIfAnnotationPresent
    LIST_POLICY: -
    BOOLEAN_POLICY: SET
    ETAG: CPjb27wGEOijhL4B-
    

測試政策

在受限專案中建立新的 AWS 叢集,測試機構政策。

  1. 在受限制的專案中建立 AWS 叢集。

    gcloud container aws clusters create CLUSTER_NAME \
      --aws-region AWS_REGION \
      --location GOOGLE_CLOUD_LOCATION \
      --cluster-version CLUSTER_VERSION \
      --fleet-project FLEET_PROJECT \
      --vpc-id VPC_ID \
      --subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
      --pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
      --service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
      --role-arn API_ROLE_ARN \
      --database-encryption-kms-key-arn DB_KMS_KEY_ARN \
      --admin-users ADMIN_USERS_LIST \
      --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
      --iam-instance-profile CONTROL_PLANE_PROFILE \
      --tags "Name=CLUSTER_NAME-cp"
    
  2. 輸出結果會與下列內容相似:

    FAILED_PRECONDITION: Operation denied by org policy on resource 'projects/PROJECT_NUMBER/locations/GOOGLE_CLOUD_REGION': ["customConstraints/custom.allowClusterCreateIfAnnotationPresent": "Allow new clusters only when certain annotations are set."]
    
    '@type': type.googleapis.com/google.rpc.ErrorInfo
    domain: googleapis.com
    metadata:
      customConstraints: customConstraints/custom.allowClusterCreateIfAnnotationPresent
    service: gkemulticloud.googleapis.com
    reason: CUSTOM_ORG_POLICY_VIOLATION