本頁面說明如何在 GKE on AWS 環境中啟用及使用自訂限制。 Google Cloud「組織政策服務」可協助您管理資源設定,並在雲端環境中建立防護措施。
總覽
透過自訂組織政策,您可以在 GKE Multi-Cloud 環境中建立精細的資源政策,滿足機構的特定安全性和法規遵循需求。您也可以在模擬測試模式中建立組織政策,測試新政策,不會影響正式環境工作負載。
如要進一步瞭解組織政策,請參閱「機構政策服務簡介」。
事前準備
開始之前,請務必瞭解下列主題。
政策繼承
根據預設,您強制執行政策的資源子系會繼承組織政策。舉例來說,如果您對機構強制執行政策, Google Cloud 會對該機構中的所有專案強制執行政策。如要進一步瞭解政策沿用方式和如何變更評估規則,請參閱階層評估規則。
限制
建立自訂限制前,請注意以下限制:
- 自訂限制只能對 GKE on AWS 資源的
CREATE或UPDATE方法強制執行。 - 新強制執行的自訂限制不會自動套用至現有資源。您必須更新現有資源,才能套用限制。如要找出需要更新的現有資源,可以強制執行模擬測試組織政策。
- 如要建立限制並強制執行組織政策,您必須具備 Google Cloud 組織的組織政策管理員 (
roles/orgpolicy.policyAdmin) IAM 角色。如要進一步瞭解使用自訂限制管理組織政策所需的權限,請參閱「必要的角色」。
定價
組織政策和自訂限制免費提供。
建立自訂限制條件
自訂限制必須使用 AwsCluster 和 AwsNodepool 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:符合條件時採取的動作。可以是ALLOW或DENY。DISPLAY_NAME:限制的顯示名稱。這個欄位的長度上限為 200 個字元。DESCRIPTION:違反政策時,要以錯誤訊息形式顯示的限制說明,例如「這個欄位的長度上限為 2,000 個字元」。"Allow new clusters only when certain annotations are set."
如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。
將限制與資源建立關聯
為新的自訂限制建立 YAML 檔案後,您必須加以設定,才能用於組織政策。
如要設定自訂限制,請使用
gcloud org-policies set-custom-constraint指令:gcloud org-policies set-custom-constraint PATH_TO_FILE將
PATH_TO_FILE替換為自訂限制 YAML 定義的路徑。如要確認自訂限制是否已建立,請使用
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.
強制執行自訂限制
如要強制執行新的自訂限制,請建立參照該限制的組織政策,然後套用該政策。
建立組織政策的 YAML 檔案:
name: RESOURCE_HIERARCHY/policies/POLICY_NAME spec: rules: - enforce: true更改下列內容:
RESOURCE_HIERARCHY:新政策的位置,這會影響強制執行的範圍。請參考 Google Cloud 資源階層。舉例來說,如要在特定專案中強制執行政策,請使用projects/PROJECT_ID。如要在特定機構中強制執行政策,請使用organizations/ORGANIZATION_ID。POLICY_NAME:新政策的名稱。
強制執行政策:
gcloud org-policies set-policy PATH_TO_POLICY請將
PATH_TO_POLICY替換為政策定義檔案的路徑。確認政策是否存在:
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 叢集,測試機構政策。在受限制的專案中建立 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"輸出結果會與下列內容相似:
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