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

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

Dataproc の接続要件

Google API やその他のリソースに安全にアクセスするには、ルートとファイアウォールの要件を満たす Dataproc クラスタを VPC ネットワーク内に配置する必要があります。

ルートの要件

クラスタ VM で実行されている Dataproc エージェントから Dataproc Control API にアクセスしてジョブを取得し、ステータスを報告するには、インターネットへのルートが必要です。作成した VPC ネットワークには、インターネットへのシステム生成のデフォルト ルートが含まれます。インターネットへのデフォルト ルートを削除することはおすすめしません。代わりに、ファイアウォールを使用してネットワーク アクセスを制御してください。内部 IP 専用クラスタから Dataproc Control API や他の Google サービス(Cloud Storage など)にアクセスする場合も、このインターネットへのデフォルト ルートが必要ですが、Google のデータセンターからトラフィックが送信されることはありません。

ファイアウォールの要件

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 ネットワークを使用するクラスタの作成

Console

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

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. ホスト プロジェクトのネットワーク ユーザーロールを持つように Dataproc サービス エージェント サービス アカウントservice-[project-number]@dataproc-accounts.iam.gserviceaccount.com)を構成します。

      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. ホスト プロジェクトのネットワーク ユーザーロールを持つように Dataproc サービス エージェント サービス アカウントservice-[project-number]@dataproc-accounts.iam.gserviceaccount.com)を構成します。

      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 アクセスを有効にする必要があります。

Console

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

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
    },
    ...

デフォルトでは、内部 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 ネットワークを使用する際の制限事項と戦略に注意してください。