使用自訂限制管理 Dataproc 資源
Google Cloud 機構政策可讓您透過程式集中控管機構資源。身為機構政策管理員,您可以定義機構政策,也就是一組稱為限制的限制,適用於Google Cloud 資源和Google Cloud 資源階層中這些資源的子系。您可以在機構、資料夾或專案層級強制執行組織政策。
機構政策提供各種Google Cloud 服務的預先定義限制。不過,如要進一步自訂組織政策中受限制的特定欄位,也可以建立自訂限制,並在自訂組織政策中使用這些限制。
優點
您可以透過自訂機構政策,允許或拒絕對 Dataproc 叢集執行特定作業。舉例來說,如果建立或更新叢集的要求未通過機構政策設定的自訂限制驗證,要求就會失敗,並向呼叫端傳回錯誤。
政策繼承
根據預設,機構政策會由您強制執行政策的資源子系繼承。舉例來說,如果您對資料夾強制執行政策, Google Cloud 系統會對該資料夾中的所有專案強制執行政策。如要進一步瞭解這項行為及如何變更,請參閱「階層評估規則」。
定價
機構政策服務 (包括預先定義和自訂機構政策) 免費提供。
事前準備
- 設定專案
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
-
Install the Google Cloud CLI.
-
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Dataproc API.
-
Install the Google Cloud CLI.
-
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
如要初始化 gcloud CLI,請執行下列指令:
gcloud init
- 請確認您知道機構 ID。
-
機構政策管理員 (
roles/orgpolicy.policyAdmin
) 機構資源 -
如要建立或更新 Dataproc 叢集:
Dataproc 管理員或 Dataproc 編輯者 (
roles/dataproc.admin
或roles/dataproc.editor
) 專案資源 -
orgpolicy.constraints.list
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
ORGANIZATION_ID
:您的機構 ID,例如123456789
。CONSTRAINT_NAME
:新自訂限制的名稱。自訂限制條件必須以custom.
開頭,且只能包含大寫英文字母、小寫英文字母或數字,例如 custom.dataprocEnableComponentGateway。這個欄位的長度上限為 70 個字元,不含前置字元,例如organizations/123456789/customConstraints/custom
。METHOD
:建立叢集建立限制時,請指定CREATE
。建立叢集UPDATE
限制時,請一併指定這兩項,如下所示:methodTypes: - CREATE - UPDATE
CONDITION
:針對支援服務資源的代表項目編寫的 CEL 條件。這個欄位的長度上限為 1000 個字元。如要進一步瞭解可供撰寫條件的資源,請參閱「支援的資源」。例如:"resource.config.endpointConfig.enableHttpPortAccess==true"
。ACTION
:如果符合condition
,則要採取的動作。可以是ALLOW
或DENY
。DISPLAY_NAME
:限制的人性化名稱,例如「強制啟用 Dataproc 元件閘道」。這個欄位的長度上限為 200 個字元。DESCRIPTION
:違反政策時,要以錯誤訊息形式顯示的限制說明,例如「只有在啟用元件閘道時,才允許建立 Dataproc 叢集」。這個欄位的長度上限為 2000 個字元。- 前往 Google Cloud 控制台的「Organization policies」(機構政策) 頁面。
- 在專案選擇工具中,選取要設定機構政策的專案。
- 在「Organization policies」(機構政策) 頁面上的清單中選取限制條件,即可查看該限制條件的「Policy details」(政策詳情) 頁面。
- 如要設定資源的機構政策,請按一下「管理政策」。
- 在「編輯政策」頁面中,選取「覆寫上層政策」。
- 按一下「新增規則」。
- 在「Enforcement」(強制執行) 區段中,選取是否要強制執行這項機構政策。
- 選用:如要根據標記設定機構政策條件,請按一下「新增條件」。請注意,如果為組織政策新增條件式規則,您必須至少新增一項無條件規則,否則無法儲存政策。詳情請參閱「使用標記設定組織政策」。
- 按一下「測試變更」,模擬機構政策的影響。舊版受管理限制不支援政策模擬。詳情請參閱「 使用 Policy Simulator 測試組織政策變更」。
- 如要完成並套用機構政策,請按一下「設定政策」。這項政策最多需要 15 分鐘才會生效。
-
PROJECT_ID
:您要強制執行限制的專案。 -
CONSTRAINT_NAME
:您為自訂限制定義的名稱。例如:custom.dataprocEnableComponentGateway
。 - Compute Engine 網路設定 (networkUri、internalIpOnly、serviceAccount 和 metadata)
resource.config.gceClusterConfig.networkUri
resource.config.gceClusterConfig.internalIpOnly
resource.config.gceClusterConfig.serviceAccount
resource.config.gceClusterConfig.metadata
- Compute Engine 執行個體群組設定 (imageUri 和 machineTypeUri)
resource.config.masterConfig.imageUri
resource.config.masterConfig.machineTypeUri
resource.config.workerConfig.imageUri
resource.config.workerConfig.machineTypeUri
resource.config.secondaryWorkerConfig.imageUri
resource.config.secondaryWorkerConfig.machineTypeUri
- Compute Engine 執行個體群組磁碟設定 (bootDiskType、bootDiskSizeGb、numLocalSsds 和 localSsdInterface)
resource.config.masterConfig.diskConfig.bootDiskType
resource.config.workerConfig.diskConfig.bootDiskType
resource.config.secondaryWorkerConfig.diskConfig.bootDiskType
resource.config.masterConfig.diskConfig.bootDiskSizeGb
resource.config.workerConfig.diskConfig.bootDiskSizeGb
resource.config.secondaryWorkerConfig.diskConfig.bootDiskSizeGb
resource.config.masterConfig.diskConfig.numLocalSsds
resource.config.workerConfig.diskConfig.numLocalSsds
resource.config.secondaryWorkerConfig.diskConfig.numLocalSsds
resource.config.masterConfig.diskConfig.localSsdInterface
resource.config.workerConfig.diskConfig.localSsdInterface
resource.config.secondaryWorkerConfig.diskConfig.localSsdInterface
- 初始化動作 (executableFile)
resource.config.initializationActions.executableFile
- 軟體設定 (imageVersion、properties 和 optionalComponents)
resource.config.softwareConfig.imageVersion
resource.config.softwareConfig.properties
resource.config.softwareConfig.optionalComponents
- Kerberos 設定 (enableKerberos 和 crossRealmTrustKdc)
resource.config.securityConfig.kerberosConfig.enableKerberos
resource.config.securityConfig.kerberosConfig.crossRealmTrustKdc
- 元件閘道 (enableHttpPortAccess)
resource.config.endpointConfig.enableHttpPortAccess
- 中繼存放區設定 (dataprocMetastoreService)
resource.config.metastoreConfig.dataprocMetastoreService
- Persistent Disk CMEK (gcePdKmsKeyName)
resource.config.encryptionConfig.gcePdKmsKeyName
- 叢集標籤
resource.labels
- 叢集大小
resource.config.masterConfig.numInstances
resource.config.workerConfig.numInstances
resource.config.secondaryWorkerConfig.numInstances
- 自動調度資源
resource.config.autoscalingConfig.policyUri
必要的角色
如要取得管理機構政策所需的權限,請要求管理員授予下列 IAM 角色:
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義角色具備管理機構政策所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要管理組織政策,您必須具備下列權限:
建立自訂限制
自訂限制是在 YAML 檔案中定義,其中包含限制適用的資源、方法、條件和動作。Dataproc 支援套用至
CLUSTER
資源CREATE
和UPDATE
方法的自訂限制 (請參閱「資源和作業的 Dataproc 限制」)。如要為 Dataproc 自訂限制建立 YAML 檔案,請按照下列步驟操作:
name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - METHOD condition: "CONDITION" actionType: ACTION displayName: DISPLAY_NAME description: DESCRIPTION
更改下列內容:
如要進一步瞭解如何建立自訂限制,請參閱「定義自訂限制」。
設定自訂限制
為新的自訂限制建立 YAML 檔案後,您必須進行設定,才能在貴機構的機構政策中使用該檔案。如要設定自訂限制,請使用gcloud org-policies set-custom-constraint
指令: 將gcloud org-policies set-custom-constraint CONSTRAINT_PATH
CONSTRAINT_PATH
替換為自訂限制檔案的完整路徑。例如:/home/user/customconstraint.yaml
。 完成後,自訂限制就會顯示在 Google Cloud 機構政策清單中,做為機構政策使用。如要確認自訂限制條件是否存在,請使用gcloud org-policies list-custom-constraints
指令: 將gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
ORGANIZATION_ID
替換為機構資源的 ID。 詳情請參閱「查看組織政策」。強制執行自訂限制
如要強制執行限制,請建立參照該限制的機構政策,然後將該政策套用至 Google Cloud 資源。控制台
gcloud
如要建立含有布林值規則的機構政策,請建立參照限制的政策 YAML 檔案:
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
取代下列項目:
如要強制執行包含限制的機構政策,請執行下列指令:
gcloud org-policies set-policy POLICY_PATH
將
POLICY_PATH
替換為機構政策 YAML 檔案的完整路徑。這項政策最多需要 15 分鐘才會生效。測試自訂限制
以下叢集建立範例假設已建立自訂機構政策,並在叢集建立時強制執行,要求啟用元件閘道 (
resource.config.endpointConfig.enableHttpPortAccess==true
)。gcloud dataproc clusters create example-cluster \ --project=PROJECT_ID \ --zone=COMPUTE_ZONE
輸出內容範例 (根據預設,建立 Dataproc 叢集時不會啟用元件閘道):
Operation denied by custom org policies: ["customConstraints/custom.dataprocEnableComponentGateway": "Only allow Dataproc cluster creation if the Component Gateway is enabled"]
Dataproc 資源和作業的限制
建立或更新 Dataproc 叢集時,可以使用下列 Dataproc 自訂限制欄位。請注意,更新叢集時,系統只支援與可編輯叢集參數相關的限制 (請參閱「更新叢集」)。
常見用途的自訂限制範例
下表提供自訂限制的範例:
說明 限制語法 建立或更新叢集時,請將 Dataproc 工作站執行個體數量限制在 10 個以下。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocNoMoreThan10Workers resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE - UPDATE condition: "resource.config.workerConfig.numInstances + resource.config.secondaryWorkerConfig.numInstances > 10" actionType: DENY displayName: Total number of worker instances cannot be larger than 10 description: Cluster cannot have more than 10 workers, including primary and secondary workers.
防止應用程式主要執行個體在 Dataproc 叢集先占工作站上執行。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocAmPrimaryOnlyEnforced resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "('dataproc:am.primary_only' in resource.config.softwareConfig.properties) && (resource.config.softwareConfig.properties['dataproc:am.primary_only']==true)" actionType: ALLOW displayName: Application master cannot run on preemptible workers description: Property "dataproc:am.primary_only" must be "true".
禁止在 Dataproc 叢集上使用自訂 Hive 屬性。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocNoCustomHiveProperties resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.config.softwareConfig.properties.all(p, !p.startsWith('hive:'))" actionType: ALLOW displayName: Cluster cannot have custom Hive properties description: Only allow Dataproc cluster creation if no property starts with Hive prefix "hive:".
禁止 Dataproc 主機執行個體使用 n1-standard-2
機器類型。name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocMasterMachineType resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.config.masterConfig.machineTypeUri.contains('n1-standard-2')" actionType: DENY displayName: Master cannot use the n1-standard-2 machine type description: Prevent Dataproc cluster creation if the master machine type is n1-standard-2.
強制使用指定的初始化動作指令碼。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocInitActionScript resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.config.initializationActions.exists(action, action.executableFile=='gs://some/init-action.sh')" actionType: ALLOW displayName: Initialization action script "gs://some/init-action.sh" must be used description: Only allow Dataproc cluster creation if the "gs://some/init-action.sh" initialization action script is used.
強制使用指定的永久磁碟加密金鑰。 name: organizations/ORGANIZATION_ID/custom.dataprocPdCmek resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.config.encryptionConfig.gcePdKmsKeyName == 'projects/project-id/locations/global/keyRings/key-ring-name/cryptoKeys/key-name'" actionType: ALLOW displayName: Cluster PD must be encrypted with "key-name" from "key-ring-name" key-ring description: Only allow Dataproc cluster creation if the PD is encrypted with "key-name" from "key-ring-name" key-ring.
強制執行叢集標籤限制。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocEnvLabel resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE - UPDATE condition: "('env' in resource.labels) && (resource.labels.env=='test')" actionType: DENY displayName: Cluster cannot have the "env=test" label description: Deny Dataproc cluster creation or update if the cluster will be labeled "env=test".
強制使用非預設網路。 name: organizations/ORGANIZATION_ID/customConstraints/custom.dataprocNoDefaultNetwork resourceTypes: - dataproc.googleapis.com/Cluster methodTypes: - CREATE condition: "resource.config.gceClusterConfig.networkUri.contains('networks/default')" actionType: DENY displayName: Cluster cannot be created in the default network description: Deny Dataproc cluster creation if the cluster will be created in the default network.
後續步驟