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

概要

Cloud Dataproc クラスタ内の Compute Engine 仮想マシン インスタンスは、マスター VM とワーカー VM で構成され、相互に対する完全な内部 IP ネットワーク アクセスを必要とします。

レガシー ネットワークの場合、10.0.0.0/8 のソース IP 範囲が指定されたデフォルトのファイアウォール ルールを使用してクラスタ内の通信を可能にしますが、新しいサブネットワーク対応のデフォルト ネットワークでは、リージョンのサブネットワークごとに IP 範囲が制限されているため、より厳密な 10.128.0.0/9 のソース IP 範囲を使用します。

このソース IP 範囲を使用することに加え、Cloud Dataproc クラスタの Compute Engine ネットワークの標準(および default-allow-internal)ファイアウォール ルールを使用すると、udp:0-65535;tcp:0-65535;icmp ポートが開きます。

サブネット ファイアウォール ルールのソース IP 範囲の指定

サブネット ファイアウォール ルールが次のように TCP トラフィックを許可(allows TCP traffic)しているとします。

gcloud compute firewall-rules create my-subnet-firewall-rule --allow tcp
ただし、--source-ranges または --source-tags フラグを使用して、サブネットへの接続が許可されているソース IP アドレスまたはソース インスタンスを指定しないでください。デフォルトでは、ルールのソース IP 範囲は 0.0.0.0/0 となっており、サブネットをすべての IP アドレスに開放します。これは重大なセキュリティ上の脆弱性です。

ソース IP 範囲の設定方法

ソース IP 範囲は、Google Cloud Platform Console または gcloud コマンドライン ツールでサブネット ファイアウォール ルールを作成するときに設定できます。

Console

GCP Console の [ファイアウォール ルールの作成] ページを使用して、特定のソース IP 範囲を持つファイアウォール ルールを作成します。

gcloud コマンド

特定のソース IP 範囲を持つファイアウォール ルールを作成するには、gcloud compute firewall-rules create コマンドを使用します。
gcloud compute firewall-rules create "tcp-rule" --allow tcp:80 \
    --source-ranges="10.0.0.0/22,10.0.0.0/14" \
    --description="Narrowing TCP traffic"

Cloud Dataproc クラスタのデフォルトのネットワーク構成

Cloud Dataproc クラスタを作成するときに、クラスタにデフォルト ネットワークを使用できます。

デフォルト ネットワーク

以下の Google Cloud Platform Console のスナップショットでは、Cloud Dataproc の [クラスタの作成] ページでデフォルトのネットワークが選択されています。

クラスタを作成すると、GCP Console の [VM インスタンス] → [ネットワークの詳細] ページに、クラスタのインスタンスに適用されるデフォルトのファイアウォール ルールが表示されます。このルールには、udp:0-65535;tcp:0-65535;icmp ポートを開く default-allow-internal ファイアウォール ルールも含まれています。レガシー ネットワークのファイアウォール ルールでは、IP アドレス範囲には 10.0.0.0/8 が指定されますが、新しいサブネットワーク対応のネットワークではさらに制限された、リージョナルな IP アドレス範囲を使用しています(下の default-allow-internal ルールでは 10.128.0.0/9 の IP アドレス範囲が指定されています)。

VPC ネットワークの作成

Cloud Dataproc クラスタを作成するときに、独自の Virtual Private Cloud(VPC)ネットワークを指定できます。この操作を行う前に、ファイアウォール ルールが適用された VPC ネットワークを作成しておく必要があります。その上でクラスタを作成し、このネットワークをクラスタに関連付けます。

VPC ネットワークの作成

GCP Console から、または gcloud compute networks create コマンドライン ツールを使用して、VPC ネットワークを作成できます。作成できるのは、自動モードの VPC ネットワークまたはカスタムモードの VPC ネットワーク(以下それぞれ「自動」および「カスタム」ネットワークと呼びます)です。自動ネットワークには、各 Compute Engine リージョンでサブネットが自動的に構成されます。カスタム ネットワークでは、サブネットが自動的には構成されません。カスタム ネットワークの作成時に、1 つ以上の Compute Engine リージョンに 1 つ以上のサブネットを作成する必要があります。詳細については、VPC ネットワークの種類をご覧ください。

GCP Console から自動およびカスタム ネットワークを作成する際に利用できるオプションを見てみましょう。

自動

次の GCP Console のスクリーンショットは、サブネットワークの自動作成時(自動モード VPC ネットワーク)に入力される GCP Console の項目を示しています。1 つ以上のファイアウォール ルールを選択する必要があります。ネットワーク内の VM インスタンス間で完全な内部 IP ネットワーク アクセスを可能にするには、udp:0-65535;tcp:0-65535;icmp ポートを開く network-name-allow-internal ルールを選択する必要があります。また、network-name-allow-ssh ルールを選択して標準の SSH ポート 22 を開き、ネットワークへの SSH 接続を許可することもできます。

カスタム

ネットワークの作成時にカスタム サブネットワークを選択した場合(カスタムモード VPC ネットワーク)、サブネットワークごとにリージョンとプライベート IP アドレス範囲を指定する必要があります。ネットワーク内の VM 間で完全な内部アクセスを可能にするには、10.0.0.0/8 の IP アドレス範囲を指定します(必要であれば、10.128.0.0/16 のように、より制限された範囲を使用します)。
カスタム サブネットワークのファイアウォール ルールは、ネットワークを作成したに適用してください。前述のとおり、ネットワーク内の VM 間で完全なネットワーク アクセスを可能にするには、udp:0-65535;tcp:0-65535;icmp ポートを開くファイアウォール ルールを選択または作成します(以下の GCP Console のスクリーンショットをご覧ください)。

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

gcloud コマンド

Cloud SDK の gcloud dataproc clusters create コマンドで ‑‑network または ‑‑subnet フラグを使用すると、自動サブネットワークまたはカスタム サブネットワークを使用するクラスタを作成できます。

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

gcloud dataproc clusters create my-cluster \
    --network network-name \
    ... other args ...

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

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

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

REST API

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

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

Console

VPC ネットワークを作成し、ネットワークのプライベート IP アドレス範囲内の VM 間で完全なアクセスを可能にするファイアウォール ルールを設定したら、GCP Console の [クラスタの作成] ページでクラスタを作成し、ネットワーク セレクタからこのネットワークを選択します(セレクタにアクセスするには、[プリエンプティブ ワーカー、バケット、ネットワーク、バージョン、初期化オプション、アクセス オプション] を展開します)。ネットワークを選択すると、[サブネットワーク] セレクタに、クラスタの作成対象として選択したリージョン内で使用可能なサブネットワークが表示されます。このリージョンでサブネットワークを使用できない場合、[サブネットワーク] セレクタには「このリージョンにはサブネットワークがありません」と表示されます。

以下のスクリーンショットは、Cloud Dataproc の [クラスタの作成] GCP Console ページの [ネットワーク] および [サブネットワーク] セレクタを示しています。図のように、カスタム ネットワーク内のカスタム サブネットワークが選択されています。

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

Cloud Dataproc クラスタは、サービス プロジェクトとして参加することで、共有 VPC ネットワークを使用できます。共有 VPC では、共有 VPC ネットワークは、ホスト プロジェクトと呼ばれる別のプロジェクトで定義されます。ホスト プロジェクトは、IAM メンバーが接続されたサービス プロジェクトで使用できるようになっています。背景情報については、共有 VPC の概要をご覧ください。

プロジェクト内に Cloud Dataproc クラスタを作成します。共有 VPC シナリオでは、このプロジェクトはサービス プロジェクトになります。このプロジェクトのプロジェクト番号を参照する必要があります。プロジェクト番号を探す方法の 1 つは次のとおりです。

  1. [IAM と管理] ページの [設定] タブに移動します。

  2. ページの上部にあるプロジェクトのプルダウン リストから、Cloud Dataproc クラスタの作成に使用するプロジェクトを選択します。

  3. プロジェクト番号を書き留めます。

共有 VPC 管理者である IAM メンバーは、次の手順を実行する必要があります。背景情報については、共有 VPC の設定手順をご覧ください。

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

  2. ホスト プロジェクトに Cloud Dataproc プロジェクトを接続します

  3. ホスト プロジェクトのネットワーク ユーザー役割を持つように、次のサービス アカウントのいずれかまたは両方を構成します。Cloud Dataproc は最初のサービス アカウントを使用しようとしますが、必要に応じて Google API サービス アカウントにフォールバックします

  4. [IAM と管理] ページの [IAM] タブに移動します。

  5. ページの上部にあるプロジェクト プルダウン リストを使用して、ホスト プロジェクトを選択します。

  6. [追加] をクリックします。両方のサービス アカウントを追加するには、次の手順を繰り返します。

    1. [メンバー] 項目にサービス アカウントを追加します。

    2. [役割] メニューから [Compute Engine] > [Compute ネットワーク ユーザー ] を選択します。

    3. [追加] をクリックします。

両方のサービス アカウントにホスト プロジェクトのネットワーク ユーザー役割が設定されたら、VPC ネットワークを使用するクラスタを作成できます。

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

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

gcloud コマンド

内部 IP アドレスのみで Cloud Dataproc クラスタを作成するには、‑‑no-address フラグを指定した gcloud dataproc clusters create コマンドを使用します。

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

gcloud dataproc clusters create my-cluster \
    --no-address \
    --network network-name \
    ... other args ...

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

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

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

REST API

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

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

Console

Cloud Dataproc の [クラスタの作成] GCP Console ページから、プライベート Google アクセスが有効な Cloud Dataproc クラスタを作成できます。ページの下部にある [プリエンプティブ ワーカー、バケット、ネットワーク、バージョン、初期化オプション、アクセス オプション] リンクを展開し、[内部 IP のみ] をクリックしてこの機能をクラスタで有効にします。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Dataproc ドキュメント
ご不明な点がありましたら、Google のサポートページをご覧ください。