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

概要

Dataproc クラスタ内の Compute Engine 仮想マシン インスタンスは、マスター VM とワーカー VM で構成され、ICMP、TCP(すべてのポート)および UDP(すべてのポート)を使用して相互に通信できる必要があります。

ファイアウォール ルールの要件

Dataproc では、次の特性を持つ上り(内向き)許可ファイアウォール ルールを作成する必要があります。

  • ルールのソースには、クラスタの VM が含まれている必要があります。IP アドレス範囲を使用してソースを定義することも、ソースタグまたはソース サービス アカウントを使用して VM を識別することもできます。ソースの仕様を省略すると、ファイアウォール ルールでは範囲 0.0.0.0/0(任意の IP アドレス)がソースとして使用されます。Dataproc VM に外部 IP アドレスがある場合、インターネット上の任意の場所のトラフィックを受け入れることができることになります。したがって、ニーズを満たしてクラスタを保護するには、できるだけ狭い範囲でソースを定義する必要があります。

  • ルールのターゲットがクラスタの VM を識別している必要があります。ターゲットは、VPC ネットワーク内のすべての VM にすることも、ターゲットタグやターゲット サービス アカウントを使用して特定のターゲット VM を指定することもできます。

  • このルールには、プロトコルとポートの TCP(すべてのポート、0~65535)、UDP(すべてのポート、0~65535)、ICMP を含める必要があります。

    gcloud compute firewall-rules create my-subnet-firewall-rule --allow tcp
    
    上り(内向き)許可ファイアウォール ルールを特定のソース範囲で指定するか、ネットワーク タグまたはサービス アカウントを使用して Google Cloud VM を識別することをおすすめします。詳細については、ファイアウォール ルールの概要をご覧ください。

ソース IP 範囲の設定方法

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

Console

Cloud 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"

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

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

デフォルト ネットワーク

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

クラスタが作成されると、Google Cloud Console の [VM インスタンス] → [ネットワークの詳細] ページに、クラスタ内のインスタンスに適用されるファイアウォール ルールが表示されます。[デフォルト ネットワーク](/vpc/docs/vpc#default-network)を使用する場合、10.128.0.0/9 ソース範囲からの上り(内向き)を許可する事前入力 default-allow-internal ファイアウォール ルールが含まれます。事前入力されているファイアウォール ルールを削除するか、デフォルト ネットワーク以外の VPC ネットワークを使用すると、上り(内向き)トラフィックが暗黙の上り(内向き)拒否ルールによってブロックされます。このような場合、クラスタ内のインスタンスのすべての TCP ポートと UDP ポートにトラフィックを許可する上り(内向き)許可ファイアウォール ルールを作成する必要があります。ネットワーク管理者とセキュリティ管理者は、ファイアウォール ルールの概要で詳細を確認できます。

VPC ネットワークの作成

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

VPC ネットワークの作成

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

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

自動

次の Cloud Console のスクリーンショットは、サブネットワークの自動作成時(自動モード VPC ネットワーク)に入力される Cloud 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 ポートを開くファイアウォール ルールを選択または作成します(以下の Cloud Console のスクリーンショットをご覧ください)。

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

gcloud コマンド

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

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

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

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

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

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

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

Console

ネットワークを作成し、ネットワークのプライベート IP アドレス範囲内の VM 間で完全なアクセスを可能にするファイアウォール ルールを設定したら、Cloud Console → [クラスタの作成] ページでクラスタを作成し、ネットワーク セレクタからこのネットワークを選択します(セレクタにアクセスするには、[プリエンプティブル ワーカー、バケット、ネットワーク、バージョン、初期化オプション、アクセス オプション] を展開します)。

ネットワークを選択すると、[サブネットワーク] セレクタに、クラスタの作成対象として選択したリージョン内で使用可能なサブネットワークが表示されます。このリージョンでサブネットワークを使用できない場合、[サブネットワーク] セレクタには「このリージョンにはサブネットワークがありません」と表示されます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

両方のサービス アカウントにホスト プロジェクトのネットワーク ユーザー役割が設定されたら、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 フラグ(‑‑network auto-net-name)に渡して、クラスタのリージョンで自動サブネットワークを使用するクラスタを作成できます。

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

Console

Dataproc の [クラスタの作成] Cloud Console ページから、限定公開の Google アクセスが有効な Dataproc クラスタを作成できます。ページの下部にある [プリエンプティブル ワーカー、バケット、ネットワーク、バージョン、初期化オプション、アクセス オプション] リンクを展開し、[内部 IP のみ] をクリックしてこの機能をクラスタで有効にします。

Dataproc ネットワークと VPC-SC ネットワーク

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

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