Dataproc クラスタ ネットワークの構成

このページでは、Dataproc クラスタ ネットワークの構成要件とオプションについて説明します。

Dataproc の接続要件

Dataproc クラスタの仮想マシン(VM)は、ICMP プロトコル、TCP(すべてのポート)プロトコル、UDP(すべてのポート)プロトコルを使用して相互に通信できる必要があります。

default VPC ネットワークの default-allow-internal ファイアウォール ルールは、Dataproc クラスタの接続要件を満たしており、次に示すように、VPC ネットワーク上のすべての VM からの 10.128.0.0/9 ソース範囲からの上り(内向き)を許可します。

ルール ネットワーク 送信 / 受信 優先度 ソース範囲 プロトコル:ポート
default-allow-internal default 上り 65534 10.128.0.0/9 tcp:0-65535,udp:0-65535,icmp
  • default-allow-internal ファイアウォール ルールを削除すると、default ネットワークの上り(内向き)トラフィックは、暗黙の上り(内向き)拒否ルールによってブロックされます。

  • default-allow-internal ファイアウォール ルールを削除するか、default VPC ネットワークを使用しない場合は、Dataproc 接続要件を満たす独自のルールを作成して、クラスタの VPC ネットワークに適用する必要があります。

ベスト プラクティス: ソース IP 範囲を使用するか、ネットワーク タグまたはサービス アカウントでクラスタ VM を特定することにより、クラスタ VM 間の上り(内向き)接続のみを許可するクラスタ VPC ネットワークの上り(内向き)ファイアウォール ルールを作成します。

上り(内向き)ファイアウォール ルールを作成する

ユーザーまたはネットワーク管理者またはセキュリティ管理者が Dataproc クラスタ VPC ネットワークに適用する上り(内向き)ファイアウォール ルールを作成する場合は、次の特性が必要です。

  • sources パラメータは、パケットの送信元を指定します。Dataproc クラスタ VM はすべて、相互に通信できる必要があります。クラスタ内の VM は、IP アドレス範囲、ソースタグまたは VM に関連付けられたサービス アカウントによって識別できます。

  • ルールのターゲットは、クラスタ VM を識別する必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、IP アドレス範囲、ターゲットタグ、ターゲット サービス アカウントによって特定することもできます。

  • ルールには、次のプロトコルとポートを含める必要があります。

    • TCP(すべてのポート、0 ~ 65535)
    • UDP(すべてのポート、0 ~ 65535)
    • ICMP

    Dataproc は複数のポートで実行されるサービスを使用します。すべてのポートを指定すると、サービスの正常な実行に役立ちます。

VPC ファイアウォール ルールを診断する

優先度の高いファイアウォール ルールによって処理されないパケットを監査するには、2 つの優先度の低い(65534)拒否ファイアウォール ルールを作成します。暗黙のファイアウォール ルールとは異なり、これらの優先度の低いルールごとにファイアウォール ルール ロギングを有効にできます。

  1. 上り(内向き)拒否ルール(送信元 0.0.0.0/0、すべてのプロトコル、VPC ネットワークのすべてのターゲット)

  2. 下り(外向き)拒否ルール(宛先 0.0.0.0/0、すべてのプロトコル、VPC ネットワーク内のすべてのターゲット)

  • これらの優先度の低いルールとファイアウォール ルールのロギングを使用すると、優先度が高く、場合によってはより限定されたファイアウォール ルールで処理されないパケットをログに記録できます。この 2 つの優先度の低いルールは、「最終ドロップ パケット」戦略を実装することで、セキュリティのベスト プラクティスとも一致します。

  • ファイアウォール ルールのログを調べて、パケットを許可する優先度の高いルールを作成または修正する必要があるかどうかを判断します。たとえば、Dataproc クラスタ VM 間で送信されたパケットが破棄された場合、ファイアウォール ルールの調整が必要である可能性があります。

VPC ネットワークの作成

default VPC ネットワークを使用する代わりに、独自の自動モードまたはカスタム VPC ネットワークを作成できます。その上でクラスタを作成し、このネットワークをクラスタに関連付けます。

Assured Workloads 環境: 規制遵守のために Assured Workloads 環境を使用する場合、クラスタ、その VPC ネットワーク、その Cloud Storage バケットは Assured Workloads 環境に含まれている必要があります。

VPC ネットワークを使用するクラスタの作成

Google Cloud CLI

gcloud dataproc clusters create‑‑network フラグまたは ‑‑subnet フラグとともに使用して、ネットワーク内のサブネットにクラスタを作成します。‐‐network フラグを使用すると、クラスタは、クラスタが作成されたリージョン内の指定されたネットワークと同じ名前のサブネットワークを使用します。

--network example。自動ネットワークは各リージョンのサブネットを使用して作成され、各サブネットにネットワーク名が付けられます。そのため、自動モードの VPC ネットワーク名を ‑‑network フラグに渡すことができます。クラスタでは、‐‐region フラグで指定されたリージョンで自動モードの VPC サブネットワークが使用されます。

gcloud dataproc clusters create CLUSTER_NAME \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

--subnet example‑‑subnet フラグを使用すると、クラスタ リージョンで自動モードまたはカスタム VPC ネットワーク サブネットを使用するクラスタを作成できます。サブネットの完全なリソースパスを指定します。

gcloud dataproc clusters create CLUSTER_NAMEW \
    --subnet projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \
    --region=REGION \
    ... other args ...

REST API

clusters.create リクエストの一部として networkUri or subnetworkUri GceClusterConfig 項目を指定できます。

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "PROJECT_ID",
  "clusterName": CLUSTER_NAME,
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": SUBNET_NAME,
    },
    ...

コンソール

[クラスタのカスタマイズ] パネルの [ネットワークの構成] セクションで、[ネットワーク] を選択します。ネットワークを選択すると、[サブネットワーク] セレクタに、クラスタに対して選択したリージョン内で使用可能なサブネットワークが表示されます。

別のプロジェクトでの VPC ネットワークを使用するクラスタの作成

Dataproc クラスタでは、ホスト プロジェクトで定義された共有 VPC ネットワークを使用できます。Dataproc クラスタが作成されるプロジェクトは、サービス プロジェクトと呼ばれます。

  1. Dataproc クラスタのプロジェクト番号を確認します。

    1. Google Cloud コンソールで [IAM と管理] の [設定] ページを開きます。Dataproc クラスタを作成するプロジェクトを選択します。プロジェクト ID をコピーします。
  2. 共有 VPC 管理者のロールを持つプリンシパルは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。

    1. 共有 VPC ホスト プロジェクトが有効になっていることを確認します。

    2. ホスト プロジェクトに Dataproc クラスタを持つプロジェクトをアタッチします。

    3. このサブステップの手順に沿って、ホスト プロジェクトのネットワーク ユーザーのロールを持つように、次の両方のサービス アカウントを構成します。

      1. Google Cloud コンソールで [IAM と管理] ページを開きます。

      2. プロジェクト セレクタを使用して新しいホスト プロジェクトを選択します。

      3. [アクセス権を付与] をクリックします。

      4. アクセス権付与フォームに入力します。両方のサービス アカウントを追加するには、次の手順を繰り返します。

        1. プリンシパルの追加: サービス アカウントを入力します。

        2. ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」と入力し、Compute ネットワーク ユーザーのロールを選択します。

        3. [保存] をクリックします。

  3. 両方のサービス アカウントにホスト プロジェクトの Network User ロールが付与されたら、共有 VPC ネットワークを使用するクラスタを作成します。

別のプロジェクトでの VPC サブネットワークを使用するクラスタの作成

Dataproc クラスタでは、ホスト プロジェクトで定義された共有 VPC サブネットワークを使用できます。Dataproc クラスタが作成されるプロジェクトは、サービス プロジェクトと呼ばれます。

  1. Dataproc クラスタのプロジェクト番号を確認します。

    1. Google Cloud コンソールで [IAM と管理] の [設定] ページを開きます。Dataproc クラスタを作成するプロジェクトを選択します。プロジェクト ID をコピーします。
  2. 共有 VPC 管理者のロールを持つプリンシパルは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。

    1. 共有 VPC ホスト プロジェクトが有効になっていることを確認します。

    2. ホスト プロジェクトに Dataproc クラスタを持つプロジェクトをアタッチします。

    3. このステップの手順に沿って、ホスト プロジェクトのネットワーク ユーザーロールを持つように、次の両方のサービス アカウントを構成します。

      1. Google Cloud コンソールで [VPC ネットワーク] ページを開きます。

      2. プロジェクト セレクタを使用してホスト プロジェクトを選択します。

      3. Dataproc クラスタが使用するサブネットワークを含むネットワークをクリックします。

      4. [VPC ネットワークの詳細] ページで、クラスタが使用するサブネットワーク名の横にあるチェックボックスをオンにします。

      5. 情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。

      6. 各サービス アカウントに対して、次の手順を行います。

        1. 情報パネルで [プリンシパルを追加] をクリックします。

        2. アクセス権付与フォームに入力します。

          1. プリンシパルの追加: サービス アカウントを入力します。

          2. ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」と入力し、Compute ネットワーク ユーザーのロールを選択します。

          3. [保存] をクリックします。

  3. 両方のサービス アカウントにホスト プロジェクトの Network User ロールが付与されたら、共有 VPC サブネットワークを使用するクラスタを作成します。

内部 IP アドレスのみで Dataproc クラスタを作成する

公開のインターネットから隔離された Dataproc クラスタを作成できます。このクラスタでは、VM インスタンスはプライベート IP サブネットワーク経由で通信します(クラスタ VM にはパブリック IP アドレスが割り当てられません)。これを行うには、クラスタノードが内部 IP から Cloud Storage などの Google API やサービスにアクセスできるように、サブネットワークで限定公開の Google アクセスを有効にする必要があります。

gcloud CLI

‑‑no-address フラグを指定した gcloud dataproc clusters create コマンドを使用するだけで、内部 IP アドレスを持つ Dataproc クラスタを作成できます。

‑‑no-address フラグと ‑‑network フラグの使用: ‑‑no-address フラグと ‑‑network フラグを使用すると、クラスタが作成されるリージョンのネットワークと同じ名前のサブネットワークを使用するクラスタを作成できます。

gcloud dataproc clusters create CLUSTER_NAME \
    --no-address \
    --network NETWORK_NAME \
    --region=REGION \
    ... other args ...

たとえば、自動ネットワークの作成時には、各リージョンで自動ネットワークと同じ名前のサブネットワークも作成されるため、自動ネットワーク名を ‑‑network flag に渡して、クラスタのリージョンで自動サブネットワークを使用するクラスタを作成できます。

‑‑no-address フラグと ‑‑subnet フラグの使用: ‑‑no-address フラグと ‑‑subnet フラグを使用すると、クラスタが作成されるリージョンで自動サブネットワークまたはカスタム サブネットワークを使用するクラスタを作成できます。‑‑subnet フラグにサブネットの完全なリソースパスを渡します。

gcloud dataproc clusters create cluster-name \
    --no-address \
    --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \
    --region=region \
    ... other args ...

REST API

clusters.create リクエストの一部として、GceClusterConfiginternalIpOnly フィールドを true に設定して、内部 IP アドレスのみを有効にできます。

例:

POST /v1/projects/my-project-id/regions/us-central1/clusters/
{
  "projectId": "my-project-id",
  "clusterName": "example-cluster",
  "config": {
    "configBucket": "",
    "gceClusterConfig": {
      "subnetworkUri": "custom-subnet-1",
      "zoneUri": "us-central1-b",
      "internalIpOnly": true
    },
    ...

コンソール

Google Cloud コンソールで Dataproc の [クラスタの作成] ページから、限定公開の Google アクセスが有効な Dataproc クラスタを作成できます。[クラスタのカスタマイズ] パネルで [内部 IP のみ] をクリックし、この機能をクラスタで有効にします。

デフォルトでは、内部 IP 専用クラスタはインターネットにアクセスできないため、インターネットから依存関係をダウンロードするジョブ(Maven Central から Spark 依存関係パッケージをダウンロードするジョブなど)は失敗します。この問題の回避策は、複数あります。

  1. Cloud NAT を使用して、クラスタがインターネットにアクセスできるようにします。

  2. 依存関係(/usr/lib/spark/jars/ の Spark 依存関係パッケージなど)を含むカスタム イメージを作成します。

  3. 依存関係を Cloud Storage バケットにアップロードしてから、初期化アクションを使用して、クラスタを作成する際にバケットから依存関係をダウンロードします。

Dataproc ネットワークと VPC Service Controls ネットワーク

VPC Service Controls を使用すると、Google マネージド サービスのリソースにセキュリティ境界を定義し、これらのサービス間の通信を制御できます。

Dataproc クラスタで VPC Service Controls ネットワークを使用する際の制限事項と戦略に注意してください。