本頁面說明如何在 GKE 連結的叢集環境中啟用及使用自訂限制。 Google Cloud的 Organization Policy Service 可協助您管理資源設定,並在雲端環境中建立防護措施。
總覽
透過自訂機構政策,您可以在 GKE Multi-cloud 環境中建立精細的資源政策,滿足機構的特定安全性和法規遵循需求。您也可以在模擬測試模式下建立機構政策,測試新政策,不會影響正式環境工作負載。
如要進一步瞭解機構政策,請參閱機構政策服務簡介。
事前準備
開始之前,請務必瞭解下列主題:
政策繼承
根據預設,您強制執行的政策會由資源的子系繼承。舉例來說,如果您在機構中強制執行政策, Google Cloud 系統就會在機構中的所有專案強制執行該政策。如要進一步瞭解政策沿用方式和如何變更評估規則,請參閱「階層評估規則」。
限制
建立自訂限制前,請注意以下限制:
- 自訂限制只能針對 GKE 附加叢集資源的
CREATE
或UPDATE
方法強制執行。 - 新強制執行的自訂限制不會自動套用至現有資源。您必須更新現有資源,才能套用限制。 如要找出需要更新的現有資源,可以強制執行模擬測試機構政策。
- 如要建立限制並強制執行機構政策,您必須具備 Google Cloud 機構的機構政策管理員 (
roles/orgpolicy.policyAdmin
) IAM 角色。如要進一步瞭解使用自訂限制管理機構組織政策所需的權限,請參閱「必要角色」。
定價
機構政策和自訂限制免費提供。
建立自訂限制
自訂限制必須使用 AttachedCluster API 資源規格中的欄位指定,但「僅限輸出」欄位除外。
建立自訂限制
如要建立新的自訂限制,請在 YAML 檔案中定義限制,然後使用 Google Cloud CLI 在機構中套用自訂限制。這項限制必須封裝您想在 GKE 連結叢集資源中強制執行的特定政策。
建立自訂限制的 YAML 檔案:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - gkemulticloud.googleapis.com/AttachedCluster 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
:針對附加叢集資源的表示法編寫的條件。條件是以一般運算語言 (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/AttachedCluster 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-
測試政策
在受限專案中註冊符合 CNCF 標準的叢集,測試機構政策。
在受限專案中註冊符合 CNCF 標準的叢集。
gcloud container attached clusters register CLUSTER_NAME \ --location=GOOGLE_CLOUD_REGION \ --fleet-project=PROJECT_NUMBER \ --platform-version=PLATFORM_VERSION \ --distribution=generic \ --issuer-url=ISSUER_URL \ --context=KUBECONFIG_CONTEXT \ --kubeconfig=KUBECONFIG_PATH
輸出結果會與下列內容相似:
ERROR: (gcloud.container.attached.clusters.register) 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