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

このドキュメントでは、次のタスクを行う方法について説明します。

  • インターネット アクセス用に Dataflow 仮想マシン(VM)インスタンスを構成する
  • ネットワーク タグを作成する
  • Dataflow ジョブに関連付けられたネットワークのファイアウォール ルールを定義する

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

Dataflow 用の Google Cloud APIs へのアクセス

Dataflow ワーカー仮想マシン(VM)は、Google Cloud APIs とサービスに到達できる必要があります。依存する Google Cloud エンドポイントのセットは時間の経過とともに変更される可能性がありますが、すべて VPC Service Controls をサポートしています。Google Cloud APIs へのアクセスを構成するには、次のいずれかの方法を使用します。

デフォルトでは、ファイアウォール ルールと DNS 構成により、Google Cloud APIs へのアクセスが許可されています。ただし、VPC Service Controls を使用している場合など、Google Cloud APIs のサブセットへのアクセスを積極的に制限している場合があります。この場合、少なくとも restricted.googleapis.com へのアクセス権を付与します。Private Service Connect を使用している場合は、vpc-sc バンドルへのアクセス権を付与します。private.googleapis.com などのより許容度の高いドメインへのアクセス権を付与すると、必要な機能も提供されます。

特定のドメインから必要な Google Cloud API へのアクセスを許可するには、環境が次の要件を満たしている必要があります。

  • ファイアウォール ルールでは、選択したドメイン内のすべてのアドレス範囲への下り(外向き)を許可する必要があります。

  • DNS は *.googleapis.com を選択したドメインに解決する必要があります。

たとえば、ファイアウォール ルールで下り(外向き)を restricted.googleapis.com アドレス範囲に制限している場合、*.googleapis.com はその範囲内のアドレスに解決する必要があります。詳細については、googleapis.com の DNS を構成するをご覧ください。

同様に、Private Service Connect を使用している場合は、vpc-sc バンドル内のすべてのサービスにアクセスできるように、googleapis.com デフォルト ドメインの DNS レコードを作成する必要があります。

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

ユースケースによっては、VM が Google Cloud の外部にあるリソースが必要になることがあります。Dataflow にインターネット アクセスを構成するには、次のいずれかの方法を使用します。

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

  • 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 アドレスを無効にするには、次のいずれかを行います。

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;... のように各タグを ; で区切ります。

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 を使用する場合は、ファイアウォール ルールで Google Cloud APIs へのアクセスが許可されていることを確認するだけです。それ以外の場合は、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 \
    --source-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 を実行します。詳細については、Linux Foundation ウィキの iproute2 ページをご覧ください。

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

次のステップ