Dataproc の接続要件
Dataproc クラスタ内の Compute Engine 仮想マシン インスタンス(VM)は、マスター VM とワーカー 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 ネットワークに適用する必要があります。
上り(内向き)ファイアウォール ルールを作成する
ユーザーまたはネットワーク管理者またはセキュリティ管理者が、クラスタの VPC ネットワークに適用する上り(内向き)ファイアウォール ルールを作成する場合は、次の特性が必要です。
sources パラメータは、パケットの送信元を指定します。Dataproc では、クラスタ内のすべての VM が相互に通信できる必要があります。クラスタ内の VM は、IP アドレス範囲、または VM に関連付けられたソースタグまたはサービス アカウントによって識別できます。
ルールのターゲットは、クラスタの VM を識別する必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、IP アドレス範囲、ターゲットタグ、ターゲット サービス アカウントによって特定することもできます。
このルールには、次のプロトコルとポートを含める必要があります。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 クラスタ インスタンス間で送信されたパケットが破棄された場合、ファイアウォール ルールの調整が必要である可能性があります。
VPC ネットワークの作成
default
VPC ネットワークを使用する代わりに、独自の自動モードまたはカスタム VPC ネットワークを作成できます。その上でクラスタを作成し、このネットワークをクラスタに関連付けます。
VPC ネットワークを使用するクラスタの作成
gcloud コマンド
gcloud dataproc clusters create
を ‑‑network
フラグまたは ‑‑subnet
フラグとともに使用して、ネットワーク内のサブネットにクラスタを作成します。‐‐network フラグを使用すると、クラスタは、クラスタが作成されたリージョン内の指定されたネットワークと同じ名前のサブネットワークを使用します。
--network example
。自動ネットワークは各リージョンのサブネットを使用して作成され、各サブネットにネットワーク名が付けられます。そのため、自動モードのネットワーク名を ‑‑network
フラグに渡すことができます。クラスタでは、‐‐region フラグで指定されたリージョンで自動モードのサブネットワークが使用されます。
gcloud dataproc clusters create my-cluster \ --network network-name \ --region=region \ ... other args ...
--subnetwork example
。 ‑‑subnet
フラグを使用すると、‑‑region
フラグで指定されたリージョンで自動モードまたはカスタム ネットワーク サブネットを使用するクラスタを作成できます。サブネットの完全なリソースパスを指定します。
gcloud dataproc clusters create cluster-name \ --subnet projects/project-id/regions/region/subnetworks/subnetwork-name \ --region=region \ ... other args ...CLI または API REST リクエストを作成します。
REST API
clusters.create リクエストの一部として networkUri or subnetworkUri GceClusterConfig
項目を指定できます。
例
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" }, ...CLI または API REST リクエストを作成します。
コンソール
[クラスタのカスタマイズ] パネルの [ネットワークの構成] セクションで、[ネットワーク] を選択します。ネットワークを選択すると、[サブネットワーク] セレクタに、クラスタの作成対象として選択したリージョン内で使用可能なサブネットワークが表示されます。
別のプロジェクトでの VPC ネットワークを使用するクラスタの作成
Dataproc クラスタでは、ホスト プロジェクトで定義されている共有 VPC ネットワークを使用できます。Dataproc クラスタを作成するプロジェクトは、サービス プロジェクトと呼ばれます。
Dataproc クラスタのプロジェクト番号を探します。
- Google Cloud コンソールで [IAM と管理] の [設定] ページを開きます。Dataproc クラスタを作成するプロジェクトを選択します。プロジェクト ID をコピーします。
共有 VPC 管理者のロールを持つプリンシパルは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。
共有 VPC ホスト プロジェクトが有効になっていることを確認します。
ホスト プロジェクトに Dataproc クラスタを持つプロジェクトをアタッチします。
このサブステップの手順に沿って、ホスト プロジェクトのネットワーク ユーザー役割を持つように、次の両方のサービス アカウントを構成します。
- Dataproc サービス エージェントのサービス アカウント:
service-[project-number]@dataproc-accounts.iam.gserviceaccount.com
- Google API サービス アカウント:
[project-number]@cloudservices.gserviceaccount.com
Google Cloud コンソールで [IAM と管理] ページを開きます。
プロジェクト セレクタを使用して新しいホスト プロジェクトを選択します。
[アクセス権を付与] をクリックします。
[アクセス権の付与] フォームに入力します。両方のサービス アカウントを追加するには、次の手順を繰り返します。
プリンシパルを追加: サービス アカウントを入力します。
ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」を挿入し、[Compute ネットワーク ユーザー] ロールを選択します。
[保存] をクリックします。
- Dataproc サービス エージェントのサービス アカウント:
両方のサービス アカウントにホスト プロジェクトの
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 API サービス アカウント:
[project-number]@cloudservices.gserviceaccount.com
Google Cloud コンソールで [VPC ネットワーク] ページを開きます。
プロジェクト セレクタを使用してホスト プロジェクトを選択します。
Dataproc クラスタが使用するサブネットワークを含むネットワークをクリックします。
[VPC ネットワークの詳細] ページで、クラスタが使用するサブネットワークの名前の横にあるチェックボックスをオンにします。
情報パネルが表示されていない場合は、[情報パネルを表示] をクリックします。
各サービス アカウントに対して次の手順を実行します。
情報パネルで [プリンシパルを追加] をクリックします。
[アクセス権を付与] フォームに情報を入力します。
プリンシパルを追加: サービス アカウントを入力します。
ロールの割り当て: フィルタ ボックスに「Compute ネットワーク」を挿入し、[Compute ネットワーク ユーザー] ロールを選択します。
[保存] をクリックします。
- Dataproc サービス エージェントのサービス アカウント:
両方のサービス アカウントにホスト プロジェクトの
Network User
ロールが付与されたら、共有 VPC サブネットワークを使用するクラスタを作成します。
内部 IP アドレスのみで Dataproc クラスタを作成する
公開のインターネットから隔離された Dataproc クラスタを作成できます。このクラスタでは、VM インスタンスはプライベート IP サブネットワーク経由で通信します(VM インスタンスにはパブリック IP アドレスは設定されません)。これを行うには、クラスタノードが内部 IP から Cloud Storage などの Google API やサービスにアクセスできるように、クラスタのサブネットワークで限定公開の Google アクセスを有効にする必要があります。
gcloud コマンド
‑‑no-address
フラグを指定した gcloud dataproc clusters create
コマンドを使用するだけで、内部 IP アドレスを持つ Cloud Dataproc クラスタを作成できます。
‑‑no-address フラグと ‑‑network フラグを使用する
‑‑no-address
フラグと ‑‑network
フラグを使用すると、クラスタが作成されるリージョンのネットワークと同じ名前のサブネットワークを使用するクラスタを作成できます。
gcloud dataproc clusters create my-cluster \ --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 ...CLI または API REST リクエストを作成します。
REST API
clusters.create リクエストの一部として、GceClusterConfig
の internalIpOnly フィールドを 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 依存関係パッケージのダウンロードなど)は失敗します。この問題の回避策は、複数あります。
Cloud NAT を使用して、クラスタがインターネットにアクセスできるようにします。
依存関係(
/usr/lib/spark/jars/
の Spark 依存関係パッケージなど)を含むカスタム イメージを作成します。依存関係を Cloud Storage バケットにアップロードしてから、初期化アクションを使用して、クラスタを作成する際にバケットから依存関係をダウンロードします。
Dataproc ネットワークと VPC-SC ネットワーク
VPC Service Controls を使用すると、Google マネージド サービスのリソースにセキュリティ境界を定義し、これらのサービス間の通信を制御できます。
Dataproc クラスタで VPC-SC ネットワークを使用する際の制限事項と戦略に注意してください。
VPC-SC 境界の外部にコンポーネントをインストールするには、コンポーネントをプリインストールする Dataproc カスタム イメージを作成して、カスタム イメージを使用するクラスタを作成します。