カスタム制約を使用して Dataproc リソースを管理する
Google Cloud 組織ポリシーを使用すると、組織のリソースをプログラムで一元管理できます。組織のポリシー管理者は組織のポリシーを定義できます。組織のポリシーは、Google Cloud のリソース階層内の Google Cloud リソースやそれらのリソースの子孫に適用される、制約と呼ばれる一連の制限です。組織のポリシーは、組織レベル、フォルダレベル、またはプロジェクト レベルで適用できます。
組織のポリシーは、さまざまな Google Cloud サービスに事前に定義された制約を提供します。ただし、組織のポリシーで制限されている特定のフィールドをきめ細かくカスタマイズ可能な方法で制御する必要がある場合は、カスタム制約を作成して、組織のポリシーでそれらのカスタム制約を使用することもできます。
利点
カスタムの組織のポリシーを使用して、Dataproc クラスタでの特定のオペレーションを許可または拒否できます。たとえば、クラスタの作成または更新を行うリクエストが、組織のポリシーによって設定されたカスタム制約検証を満たしていない場合、リクエストは失敗し、エラーが呼び出し元に返されます。
ポリシーの継承
デフォルトでは、組織のポリシーは、そのポリシーを適用したリソースの子孫に継承されます。たとえば、フォルダにポリシーを適用した場合、そのフォルダ内のすべてのプロジェクトにそのポリシーが適用されます。この動作とその変更方法の詳細については、階層評価ルールをご覧ください。
料金
事前に定義された制約やカスタム制約を含む組織のポリシー サービスは無料です。
制限事項
- プレビュー中に、たとえば組織ポリシー サーバーがダウンしている場合など、カスタム制約を評価できない場合、カスタム制約は無視され、ユーザーは、その成約が設定されていない場合と同じようにリソースを作成できます。Common Expression Language(CEL)条件の構文エラーは無視されず、制約の作成または適用は失敗します。詳しくは、CEL エラーのトラブルシューティングをご覧ください。
始める前に
- プロジェクトを設定する
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Dataproc API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Dataproc API を有効にします。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
- 組織 ID を確実に把握します。
必要なロール
組織のポリシーを管理するために必要な権限を取得するには、 次の IAM ロールを付与するように管理者に依頼してください。
-
組織リソースの組織ポリシー管理者(
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
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
カスタム制約を作成する
カスタム制約は、適用先のリソース、メソッド、条件、アクションによって 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
次のように置き換えます。
ORGANIZATION_ID
: 組織 ID(123456789
など)。CONSTRAINT_NAME
: 新しいカスタム制約に付ける名前。このフィールドの最大長は 100 文字で、接頭辞(organizations/123456789/customConstraints/
など)はカウントされません。カスタム制約の先頭はcustom.
にする必要があります。例:custom.dataprocEnableComponentGateway
。
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 CLI を使用して新しいカスタム制約を作成したら、組織内の組織のポリシーで使用できるように設定する必要があります。カスタム制約を設定するには、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 リソースに適用します。コンソール
ブール型制約を適用するには、次のようにします。
-
Google Cloud コンソールで [
組織のポリシー ] ページを開きます。 - ページの上部にある
プロジェクト選択ツール を選択します。 プロジェクト選択ツール から、組織のポリシーを設定するプロジェクトを選択します。-
[
組織のポリシー ] ページのリストから制約を選択します。その制約の [ポリシーの詳細 ] ページが表示されます。 -
このリソースの組織ポリシーをカスタマイズするには、[
ポリシーを管理 ] をクリックします。 - [
編集 ] ページで、[カスタマイズ ] を選択します。 - [
ルールを追加 ] をクリックします。 -
[
適用 ] で、この組織のポリシーの適用を有効にするかどうかを選択します。 -
タグで組織のポリシーに条件を設定するには、[
条件を追加 ] をクリックします。組織のポリシーに条件付きルールを追加する場合は、少なくとも 1 つは無条件のルールを追加する必要があります。そうしないとポリシーを保存できないのでご注意ください。詳細については、タグを使用した組織のポリシーの設定をご覧ください。 -
組織のポリシーを完成させて適用するには、[
保存 ] をクリックします。ポリシーが有効になるまでに最大 15 分かかります。
gcloud
ブール型制約を適用する組織のポリシーを作成するには、制約を参照するポリシー YAML ファイルを作成します。
name: projects/PROJECT_ID/policies/CONSTRAINT_NAME spec: rules: - enforce: true
次のように置き換えます。
-
PROJECT_ID
: 制約を適用するプロジェクト。 -
CONSTRAINT_NAME
: カスタム制約に定義した名前。たとえば、custom.dataprocEnableComponentGateway
のようにします。
制約を含む組織のポリシーを適用するには、次のコマンドを実行します。
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 クラスタを作成または更新する際に使用できます。 クラスタを更新するときは、編集可能なクラスタ パラメータに関連する制約のみがサポートされます(クラスタの更新をご覧ください)。
- 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
- 初期化アクション(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
- Metastore 構成(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
一般的なユースケースのカスタム制約の例
次の表に、役立つ可能性があるカスタム制約の構文を示します。
説明 | 制約の構文 |
---|---|
クラスタを作成または更新するときに、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. |
指定した PD 暗号鍵の使用を適用する |
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". |
次のステップ
- 組織のポリシーの詳細について、組織のポリシー サービスの概要を確認する。
- 組織のポリシーの作成と管理の方法について学習する。
- 事前定義された組織のポリシーの制約の完全なリストを確認する。