インターネット アクセスとファイアウォール ルールの構成

このドキュメントでは、インターネット アクセス用に Dataflow 仮想マシン(VM)インスタンスを構成する方法、ネットワーク タグを作成する方法、Dataflow ジョブに関連付けられたネットワークにファイアウォール ルールを定義する方法について説明します。

このドキュメントでは、Google Cloud ネットワークに関する基本的な知識が必要になります。Dataflow ジョブにネットワークを定義する方法については、ネットワークとサブネットワークの指定をご覧ください。

Dataflow 用のインターネット アクセス

Dataflow ワーカー仮想マシン(VM)は、Google Cloud APIs とサービスに到達できる必要があります。ユースケースによっては、VM が Google Cloud の外部にあるリソースが必要になることがあります。Dataflow にインターネット アクセスを構成するには、次のいずれかの方法を使用します。

  • インターネット アクセスの要件を満たすように、外部 IP アドレスを使用してワーカー VM を構成します。

  • 限定公開の Google アクセスを構成します。限定公開の Google アクセスを使用すると、内部 IP アドレスのみを持つ VM が Google Cloud とサービスの IP アドレスにアクセスできます。

  • Google Cloud APIs とサービスにアクセスできるように Private Service Connect エンドポイントの IP アドレスを構成します。

  • Cloud NAT などの NAT ソリューションを構成します。このオプションは、インターネット アクセスを必要とする Google Cloud 以外の API とサービスにアクセスするジョブに使用します。たとえば、Python SDK ジョブは、パイプラインの依存関係をダウンロードするために Python Package Index(PyPI)にアクセスしなければならないことがあります。この場合は、ワーカー VM に外部 IP アドレスを構成するか、Cloud NAT を使用する必要があります。ジョブの送信中に Python パイプラインの依存関係を指定することもできます。たとえば、カスタム コンテナを使用して Python パイプラインの依存関係を指定すると、実行時に PyPI にアクセスする必要がなくなります。

    詳細については、Apache Beam ドキュメントの Python パイプラインの依存関係の管理をご覧ください。

外部 IP アドレスをオフにする

デフォルトでは、Dataflow サービスはワーカーに外部 IP アドレスと内部 IP アドレスの両方を割り振ります。外部 IP アドレスをオフにすると、Dataflow パイプラインは次の場所のリソースにのみアクセスできます。

外部 IP アドレスがなくても、管理タスクやモニタリング タスクは実行できます。上記のリストにあるオプションで SSH を使用することで、ワーカーにアクセスできます。ただし、パイプラインはインターネットにアクセスできず、インターネット ホストは Dataflow ワーカーにアクセスできません。

外部 IP アドレスを使用しないと、データ処理インフラストラクチャのセキュリティを強化できます。また、Google Cloud プロジェクトの割り当てに対して使用される外部 IP アドレスの数を減らすこともできます。

外部 IP アドレスをオフにすると、Dataflow ジョブでインターネット アクセスを必要とする Google Cloud の外部の API やサービスにアクセスできなくなります。

内部 IP アドレスを持つジョブのインターネット アクセスを設定する方法については、前のセクションをご覧ください。

外部 IP アドレスを無効にするには、次のいずれかを行います。

Java

  1. ネットワークまたはサブネットワークで限定公開の Google アクセスを有効にします。
  2. Dataflow ジョブのパラメータに、--usePublicIps=false--network=NETWORK-NAME または --subnetwork=SUBNETWORK-NAME を指定します。

    選択した内容に応じて、次のいずれかを置き換えます。

    • NETWORK-NAME: Compute Engine ネットワークの名前
    • SUBNETWORK-NAME: Compute Engine サブネットワークの名前

Python

  1. すべての Python パッケージ依存関係をステージングするには、Apache Beam のパイプライン依存関係の手順を行ってください。
  2. ネットワークまたはサブネットワークで限定公開の Google アクセスを有効にします。
  3. Dataflow ジョブのパラメータに、--no_use_public_ips--network=NETWORK または --subnetwork=SUBNETWORK を指定します。
  4. 選択した内容に応じて、次のいずれかを置き換えます。

    • NETWORK-NAME: Compute Engine ネットワークの名前
    • SUBNETWORK-NAME: Compute Engine サブネットワークの名前

Go

  1. ネットワークまたはサブネットワークで限定公開の Google アクセスを有効にします。
  2. Dataflow ジョブのパラメータに、--no_use_public_ips--network=NETWORK または --subnetwork=SUBNETWORK を指定します。
  3. 選択した内容に応じて、次のいずれかを置き換えます。

    • NETWORK-NAME: Compute Engine ネットワークの名前
    • SUBNETWORK-NAME: Compute Engine サブネットワークの名前

Dataflow のネットワーク タグ

ネットワーク タグは、Compute Engine VM に付加できるテキスト属性です。ネットワーク タグを使用すると、VPC ネットワーク ファイアウォール ルールと特定のカスタム静的ルートを特定の VM インスタンスに適用できます。Dataflow では、特定の Dataflow ジョブを実行するすべてのワーカー VM にネットワーク タグを追加できます。

ネットワーク パラメータを使用しない場合でも、Dataflow は、作成するすべてのワーカー VM にデフォルトのネットワーク タグ dataflow を常に追加します。

ネットワーク タグを有効にする

ネットワーク タグは、Dataflow ジョブ テンプレートを実行してジョブを作成する場合にのみ指定できます。ジョブの開始後に、ジョブにネットワーク タグを追加することはできません。ジョブに他のネットワーク タグを適用するには、必要なネットワーク タグを指定してジョブ テンプレートを再作成する必要があります。

Java と Python のどちらで実行しているかにかかわらず、パイプラインのコードに以下を追加します。

--experiments=use_network_tags=TAG-NAME

TAG-NAME はタグの名前に置き換えます。複数のタグを追加する場合は、TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;... のように各タグを ; で区切ります。

このパラメータを使用しない場合でも、Dataflow は、作成するすべてのワーカー VM にネットワーク タグ dataflow を常に追加します。

Flex テンプレート VM のネットワーク タグを有効にする

Flex テンプレートを使用するときに、Dataflow ワーカー VM のネットワーク タグを有効にするには、次の例のように --additional-experiments オプションを使用します。

--additional-experiments=use_network_tags=TAG-NAME

ワーカー VM とランチャー VM の両方のネットワーク タグを有効にするには、次の 2 つのオプションを使用する必要があります。

--additional-experiments=use_network_tags=TAG-NAME
--additional-experiments=use_network_tags_for_flex_templates=TAG-NAME

TAG-NAME はタグの名前に置き換えます。複数のタグを追加する場合は、TAG-NAME-1;TAG-NAME-2;TAG-NAME-3;... のように各タグを ; で区切ります。

ネットワーク タグを有効にすると、タグが解析され、VM に付加されます。

ネットワーク タグに適用される制限をご確認ください。

Dataflow のファイアウォール ルール

ファイアウォール ルールを使用すると、VM との間のトラフィックを許可または拒否できます。Dataflow ジョブで Dataflow Shuffle または Streaming Engine を使用する場合、ファイアウォール ルールを構成する必要はありません。それ以外の場合は、Dataflow VM がストリーミング ジョブの場合は TCP ポート 12345 で、バッチジョブの場合は TCP ポート 12346 でネットワーク トラフィックを送受信できるようにファイアウォール ルールを構成する必要があります。プロジェクト オーナー、編集者、またはセキュリティ管理者は、Dataflow VM で使用される VPC ネットワークに必要なファイアウォール ルールを作成する必要があります。

Dataflow にファイアウォール ルールを構成する前に、次のドキュメントをご覧ください。

Dataflow のファイアウォール ルールを作成する場合は、Dataflow ネットワーク タグを指定します。作成しない場合、ファイアウォール ルールは VPC ネットワーク内のすべての VM に適用されます。

該当する場合、階層型ファイアウォール ポリシーが最初に評価され、これらのルールによって VPC ファイアウォール ルールがプリエンプトされます。階層型ファイアウォール ポリシーが使用されているフォルダまたは組織の一部であるプロジェクトに Dataflow ジョブが含まれている場合、ポリシーを変更するには compute.orgFirewallPolicyAdmin ロールが必要です。

パイプライン コードの実行時にカスタム ネットワーク タグを作成しなかった場合、Dataflow VM はデフォルトの dataflow タグを使用します。カスタム ネットワーク タグがない場合は、デフォルトの dataflow タグを使用してファイアウォール ルールを作成します。

パイプライン コードの実行時にカスタム ネットワーク タグを作成した場合、Dataflow VM はそのタグを使用します。カスタムタグを使用してファイアウォール ルールを作成します。

自動的に作成される default ネットワークなど、一部の VPC ネットワークには Dataflow のファイアウォール要件を満たす default-allow-internal ルールが含まれています。

上り(内向き)ファイアウォール ルールの例

上り(内向き)ファイアウォール ルールにより、Dataflow VM 間のパケット受信が許可されます。下り(外向き)ルールでこのようなトラフィックが許可される場合でも、上り(内向き)許可ファイアウォール ルールを作成する必要があります。作成しないと、トラフィックは常にブロックされます。

次の例では、Dataflow にファイアウォール上り(内向き)ルールが作成され、すべてのワーカー VM にデフォルトのネットワーク タグ dataflow が設定されています。プロジェクト所有者、編集者、またはセキュリティ管理者は、次の gcloud コマンドを使用して、TCP ポート 12345 および 12346 で、ネットワーク タグ dataflow を持つ VM から同じタグを持つ他の VM へのトラフィックを許可する上り(内向き)許可ルールを作成できます。

gcloud compute firewall-rules create FIREWALL_RULE_NAME_INGRESS \
    --action=allow \
    --direction=ingress \
    --network=NETWORK  \
    --target-tags=CUSTOM_TAG \
    --source-tags=CUSTOM_TAG \
    --priority=PRIORITY_NUM \
    --rules tcp:12345-12346

次のように置き換えます。

  • FIREWALL_RULE_NAME_INGRESS: ファイアウォール ルールの名前

  • NETWORK: ワーカー VM が使用するネットワークの名前

  • CUSTOM_TAG: ネットワーク タグのカンマ区切りリスト

    ネットワーク タグを使用する際のガイドラインは次のとおりです。

    • --target-tags を省略すると、VPC ネットワーク内のすべての VM にルールが適用されます。

    • --source-tags と他のすべての送信元仕様を省略すると、任意の送信元からのトラフィックが許可されます。

    • カスタム ネットワーク タグを指定せずに、ルールを Dataflow VM に固有のルールにする場合は、ネットワーク タグとして dataflow を使用します。

    • カスタム ネットワーク タグを指定していて、ルールを Dataflow VM に固有のルールにする場合は、カスタム ネットワーク タグを使用します。

  • PRIORITY_NUM: ファイアウォール ルールの優先度

    数字が小さいほど優先度は高く、0 が最も優先度が高くなります。

下り(外向き)ファイアウォール ルールの例

下り(外向き)ファイアウォール ルールを使用すると、Dataflow VM 間のパケット送信を許可できます。下り(外向き)拒否のファイアウォール ルールを作成した場合は、VPC ネットワークでカスタム下り(外向き)許可ファイアウォール ルールの作成が必要になることがあります。

この例では、Dataflow 用の下り(外向き)ファイアウォール ルールが作成され、すべてのワーカー VM に dataflow というデフォルトのネットワーク タグが設定されています。プロジェクト所有者、編集者、またはセキュリティ管理者は、次の gcloud コマンドを使用して、ネットワーク タグ dataflow を持つ VM の TCP ポート 12345 および 12346 から同じタグを持つ他の VM へのトラフィックを許可する下り(外向き)許可ルールを作成できます。

gcloud compute firewall-rules create FIREWALL_RULE_NAME_EGRESS \
    --network=NETWORK \
    --action=allow \
    --direction=egress \
    --target-tags=CUSTOM_TAG \
    --destination-ranges=DESTINATION-RANGES\
    --priority=PRIORITY_NUM  \
    --rules tcp:12345-12346

次のように置き換えます。

  • FIREWALL_RULE_NAME_EGRESS: ファイアウォール ルールの名前

  • NETWORK: ワーカー VM が使用するネットワークの名前

  • CUSTOM_TAG: ネットワーク タグのカンマ区切りリスト

    ネットワーク タグを使用する際のガイドラインは次のとおりです。

    • --target-tags を省略すると、VPC ネットワーク内のすべての VM にルールが適用されます。

    • --source-tags と他のすべての送信元仕様を省略すると、任意の送信元からのトラフィックが許可されます。

    • カスタム ネットワーク タグを指定せずに、ルールを Dataflow VM に固有のルールにする場合は、ネットワーク タグとして dataflow を使用します。

    • カスタム ネットワーク タグを指定していて、ルールを Dataflow VM に固有のルールにする場合は、カスタム ネットワーク タグを使用します。

  • DESTINATION-RANGES: CIDR のカンマ区切りリスト

    選択したサブネットワークのプライマリ IP アドレス範囲を含めます。

  • PRIORITY_NUM: ファイアウォール ルールの優先度

    数字が小さいほど優先度は高く、0 が最も優先度が高くなります。

Dataflow で使用される特定の TCP ポートについては、プロジェクト コンテナ マニフェストで確認できます。コンテナ マニフェストは、ホストのポートをコンテナにマッピングするため、ポートを明示的に指定します。

ワーカー VM への SSH アクセス

Dataflow では SSH は必要ありませんが、SSH はトラブルシューティングに役立ちます。

ワーカー VM に外部 IP アドレスがある場合、Google Cloud コンソールまたは Google Cloud CLI を使用して VM に接続できます。SSH を使用して接続するには、少なくとも、gcloud を実行しているシステムか、Google Cloud コンソールへのアクセスに使用するウェブブラウザを実行しているシステムの IP アドレスから、TCP ポート 22 での受信接続を許可するファイアウォール ルールが必要です。

ネットワークの構成とアクティビティを表示するには、いずれかのワーカーで SSH セッションを開いて iproute2 を実行します。詳細については、iproute2 ページをご覧ください。

内部 IP アドレスのみを持つワーカー VM に接続する必要がある場合は、内部専用 VM の接続オプションを選択するをご覧ください。