本頁面說明如何在 GKE on AWS 環境中啟用及使用自訂限制。 Google Cloud「組織政策服務」可協助您管理資源設定,並在雲端環境中建立防護措施。
總覽
透過自訂機構政策,您可以在 GKE Multi-cloud 環境中建立精細的資源政策,滿足機構的特定安全性和法規遵循需求。您也可以在模擬測試模式下建立機構政策,測試新政策,不會影響正式環境工作負載。
如要進一步瞭解機構政策,請參閱機構政策服務簡介。
事前準備
開始之前,請務必瞭解下列主題。
政策繼承
根據預設,您強制執行的政策會由資源的子系繼承。舉例來說,如果您在機構中強制執行政策, Google Cloud 系統就會在機構中的所有專案強制執行該政策。如要進一步瞭解政策沿用方式和如何變更評估規則,請參閱「階層評估規則」。
限制
建立自訂限制前,請注意以下限制:
- 自訂限制只能針對 AWS 上的 GKE 資源,透過
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