このページでは、Dataproc クラスタのネットワーク構成の要件とオプションについて説明します。
Dataproc の接続要件
Google API やその他のリソースに安全にアクセスするには、ルートとファイアウォールの要件を満たす Dataproc クラスタを Virtual Private Cloud ネットワーク内に配置する必要があります。
ルートの要件
クラスタ VM で実行されている Dataproc エージェントは、プライベート Google アクセスを使用して Dataproc Control API にアクセスし、ジョブを取得してステータスを報告します。プライベート Google アクセスにより、Dataproc コントロール API へのトラフィックが公共のインターネットを通過せず、Google データセンターから離れないようにします。デフォルトのインターネット ゲートウェイを介して特別なルーティング パスを使用します。したがって、クラスタ VM で実行されている Dataproc エージェントと Dataproc Control API 間の通信を確立するには、Dataproc クラスタの VPC ネットワークにインターネット ゲートウェイへのルートが必要です。これは、内部 IP 専用クラスタでも必要です。
作成した VPC ネットワークには、デフォルトのインターネット ゲートウェイへのシステム生成のデフォルト ルートが含まれます。
ルール | タイプ | 送信先 IP 範囲 | 優先度 | スコープの上限 | ネクストホップ |
---|---|---|---|---|---|
default-route-[id] |
静的 | 0.0.0.0/0 |
1000 |
- | デフォルト インターネット ゲートウェイ |
インターネット ゲートウェイへのデフォルト ルートを削除することはおすすめしません。インターネットへのネットワーク アクセスを制御する場合は、代わりにファイアウォール ルールまたはポリシーを使用してください。
インターネット ゲートウェイへのデフォルト ルートを削除した場合は、デフォルト ルートを追加する必要があります。Dataproc Control API の IP 範囲は静的ではないため、宛先 IP 範囲は 0.0.0.0/0
にする必要があります。
ファイアウォールの要件
Dataproc クラスタの VPC ネットワークで、次のトラフィックを明示的に許可する必要があります。
Dataproc クラスタ VM から Dataproc Control API および他の Dataproc クラスタ VM に送信されるトラフィック。このトラフィックは、VPC ネットワークの下り(外向き)のすべて許可の暗黙ルールによってデフォルトで許可されます。オーバーライドする下り(外向き)拒否ファイアウォール ルールを追加した場合は、下り(外向き)許可ファイアウォール ルールを作成します。
VPC ネットワーク ファイアウォールのステートフル性により、Dataproc Control API から Dataproc クラスタ VM へのレスポンス トラフィックはデフォルトで許可されます。
他の Dataproc クラスタ VM から Dataproc クラスタ VM が受信したトラフィック。このトラフィックは、VPC ネットワークの上り(内向き)をすべて拒否する暗黙のファイアウォール ルールによってデフォルトで拒否されます。上り(内向き)許可ファイアウォール ルールを作成する必要があります。
- Dataproc クラスタ VM にネットワーク タグを使用して、必要なファイアウォール ルールの適用範囲を Dataproc クラスタ VM のみに制限できるようにします。ネットワーク タグを使用しない場合は、クラスタ VM に使用されるサービス アカウントでターゲットを指定できます。それ以外の場合は、VPC ネットワーク内のすべての VM に適用されるようにファイアウォール ルールを構成できます。
- ネットワーク アクセスと接続のセキュリティを強化するには、ネットワーク タグの代わりにセキュアタグを使用して、ファイアウォール ルールの送信元とターゲットを定義します。
上り(内向き)許可ファイアウォール ルールを作成する
ユーザーまたはネットワーク管理者またはセキュリティ管理者が、Dataproc クラスタの VPC ネットワークに適用する上り(内向き)ファイアウォール ルールを作成する場合は、次の特性が必要です。
sources パラメータは、パケットの送信元を指定します。すべての Dataproc クラスタ VM が相互に通信できる必要があります。クラスタ内の VM は、IP アドレス範囲(Dataproc クラスタ サブネットのプライマリ範囲)、ネットワーク タグ、または VM に関連付けられたサービス アカウントによって識別できます。
ルールのターゲットは、クラスタ VM を識別する必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、ターゲット ネットワーク タグまたはターゲット サービス アカウントによって特定することもできます。
このルールには、次のプロトコルとポートを含める必要があります。
- TCP(すべてのポート、0 ~ 65535)
- UDP(すべてのポート、0 ~ 65535)
- ICMP
Dataproc は複数のポートで実行されるサービスを使用します。すべてのポートを指定すると、サービスの正常な実行に役立ちます。
ルールの優先度は、同じ送信元とターゲットに適用される上り(内向き)拒否ファイアウォール ルールの優先度よりも高くする必要があります。
下り(外向き)許可ファイアウォール ルールを作成する
ユーザーまたはネットワーク管理者またはセキュリティ管理者が、Dataproc クラスタの VPC ネットワークに適用する下り(外向き)ファイアウォール ルールを作成する場合は、次の特性が必要です。
destinations パラメータは、パケットの宛先を指定します。すべての Dataproc クラスタ VM は、相互にトラフィックを開始し、Dataproc Control API にトラフィックを開始できる必要があります。コントロール API の IP アドレスは静的ではないため、宛先は IP 範囲
0.0.0.0/0
で指定する必要があります。ルールのターゲットは、クラスタ VM を識別する必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、ターゲット ネットワーク タグまたはターゲット サービス アカウントによって特定することもできます。
このルールには、次のプロトコルとポートを含める必要があります。
- TCP(すべてのポート、0 ~ 65535)
- UDP(すべてのポート、0 ~ 65535)
- ICMP
Dataproc は複数のポートで実行されるサービスを使用します。すべてのポートを指定すると、サービスの正常な実行に役立ちます。
ルールの優先度は、同じ宛先とターゲットに適用される下り(外向き)拒否ファイアウォール ルールの優先度よりも高くする必要があります。
VPC ネットワーク ファイアウォール ルールを診断する
優先度の高いファイアウォール ルールによって処理されないパケットを監査するには、次の 2 つの優先度の低い(65534)拒否ファイアウォール ルールを作成します。暗黙のファイアウォール ルールとは異なり、これらの優先度の低いルールごとにファイアウォール ルール ロギングを有効にできます。
上り(内向き)拒否ルール(送信元
0.0.0.0/0
、すべてのプロトコル、VPC ネットワークのすべてのターゲット)下り(外向き)拒否ルール(宛先
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 クラスタが作成されるプロジェクトは、サービス プロジェクトと呼ばれます。
Dataproc クラスタ プロジェクトのプロジェクト番号を確認します。
- Google Cloud コンソールで [IAM と管理] > [設定] ページを開きます。Dataproc クラスタを作成するプロジェクトを選択します。プロジェクト ID をコピーします。
共有 VPC 管理者のロールを持つプリンシパルは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。
共有 VPC ホスト プロジェクトが有効になっていることを確認します。
ホスト プロジェクトに Dataproc クラスタを持つプロジェクトをアタッチします。
ホスト プロジェクトのネットワーク ユーザーのロールを持つように、Dataproc サービス エージェントのサービス アカウント(
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
)を構成します。Google Cloud コンソールで [IAM と管理] ページを開きます。
プロジェクト セレクタを使用して新しいホスト プロジェクトを選択します。
[アクセス権を付与] をクリックします。
[アクセス権の付与] フォームに記入します。
プリンシパルを追加: サービス アカウントを入力します。
ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」と入力し、Compute ネットワーク ユーザーのロールを選択します。
[保存] をクリックします。
サービス アカウントにホスト プロジェクトの
Network User
ロールが付与されたら、共有 VPC ネットワークを使用するクラスタを作成します。
別のプロジェクトでの VPC サブネットワークを使用するクラスタの作成
Dataproc クラスタは、ホスト プロジェクトで定義されている共有 VPC サブネットワークを使用できます。Dataproc クラスタが作成されるプロジェクトは、サービス プロジェクトと呼ばれます。
Dataproc クラスタ プロジェクトのプロジェクト番号を確認します。
- Google Cloud コンソールで [IAM と管理] > [設定] ページを開きます。Dataproc クラスタを作成するプロジェクトを選択します。プロジェクト ID をコピーします。
共有 VPC 管理者のロールを持つプリンシパルは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。
共有 VPC ホスト プロジェクトが有効になっていることを確認します。
ホスト プロジェクトに Dataproc クラスタを持つプロジェクトをアタッチします。
Dataproc サービス エージェントのサービス アカウント(
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
)に、ホスト プロジェクトのネットワーク ユーザーのロールを付与します。Google Cloud コンソールで [VPC ネットワーク] ページを開きます。
プロジェクト セレクタを使用してホスト プロジェクトを選択します。
Dataproc クラスタが使用するサブネットワークを含むネットワークをクリックします。
[VPC ネットワークの詳細] ページで、クラスタが使用するサブネットワーク名の横にあるチェックボックスをオンにします。
情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。
サービス アカウントごとに次の操作を行います。
情報パネルで [プリンシパルを追加] をクリックします。
[アクセス権を付与] フォームに記入します。
プリンシパルを追加: サービス アカウントを入力します。
ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」と入力し、Compute ネットワーク ユーザーのロールを選択します。
[保存] をクリックします。
サービス アカウントにホスト プロジェクトの
Network User
ロールが付与されたら、共有 VPC サブネットワークを使用するクラスタを作成します。
内部 IP のみのクラスタを作成する
このセクションは、2.2
より前のイメージ バージョンのクラスタに適用されます。2.2 以降のイメージ バージョンで Dataproc クラスタを作成すると、内部 IP アドレスのみを持つクラスタ VM がデフォルトで有効になります。
内部 IP アドレスのみを持つクラスタを作成するには、 Google Cloud コンソール、gcloud CLI、または Dataproc API を使用します。内部 IP のみが有効になっている場合、Dataproc はクラスタのリージョン サブネットで限定公開の Google アクセスを自動的に有効にして、Google API とサービスへの接続を許可します。
コンソール
Google Cloud コンソールの Dataproc の [クラスタの作成] ページから、内部 IP アドレスのみを持つ Dataproc クラスタを作成できます。[クラスタのカスタマイズ] パネルで [内部 IP のみ] をクリックし、この機能をクラスタで有効にします。
gcloud CLI
‑‑no-address
フラグを指定した gcloud dataproc clusters create
コマンドを使用するだけで、内部 IP アドレスを持つクラスタを作成できます。
gcloud dataproc clusters create CLUSTER_NAME \ --no-address \ --network NETWORK_NAME \ --region=REGION \ ... other args ...
自動ネットワークの作成時には、各リージョンで自動ネットワークと同じ名前のサブネットワークも作成されるため、自動ネットワーク名を ‑‑network flag
に渡して、クラスタのリージョンで自動サブネットワークを使用するクラスタを作成できます。
または、‑‑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
リクエストの一部として GceClusterConfig.internalIpOnly
フィールドを使用して、内部 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 専用クラスタで依存関係をダウンロードする
デフォルトでは、内部 IP 専用クラスタはインターネットにアクセスできません。したがって、インターネットから依存関係をダウンロードするジョブ(Maven Central からの Spark 依存関係パッケージのダウンロードなど)は失敗します。この問題の回避策は、複数あります。
Cloud NAT を使用して、クラスタがインターネットにアクセスできるようにします。
依存関係(
/usr/lib/spark/jars/
の Spark 依存関係パッケージなど)を含むカスタム イメージを作成します。依存関係を Cloud Storage バケットにアップロードしてから、初期化アクションを使用して、クラスタを作成する際にバケットから依存関係をダウンロードします。
Dataproc ネットワークと VPC Service Controls ネットワーク
VPC Service Controls を使用すると、Google マネージド サービスのリソースにセキュリティ境界を定義し、これらのサービス間の通信を制御できます。
Dataproc クラスタで VPC Service Controls ネットワークを使用する際の制限事項と戦略に注意してください。
VPC Service Controls 境界の外部にコンポーネントをインストールするには、コンポーネントをプリインストールする Dataproc カスタム イメージを作成して、カスタム イメージを使用するクラスタを作成します。
次のステップ
- Dataproc クラスタの作成に関する問題のトラブルシューティングについては、クラスタ作成に関する問題のトラブルシューティングをご覧ください。