プライベート インスタンスからパブリック ソースへの接続

このページでは、パイプラインを開発するときに、プライベート Cloud Data Fusion インスタンスから Salesforce などの Software as a Service(SaaS)アプリケーションや Amazon S3 などのサードパーティのクラウド サービスに接続する方法について説明します。

このガイドでは、下り(外向き)下り(外向き)の制御という用語を使用しています。

  • 下り(外向き)とは、パブリック インターネット経由で Google Cloud から出るネットワーク トラフィックを意味します。これは通常、Salesforce などの SaaS サービス、または Amazon S3 などのパブリック クラウド サービスを読み書きするパイプラインを作成するときに発生します。

  • 下り(外向き)の制御では、プロキシ VM を使用する下り(外向き)トラフィック用のガードレールを定義します。これにより、事前構成されたドメインのセットへの下り(外向き)トラフィックが成功し、その他はすべて失敗します。下り(外向き)トラフィックのセキュリティ境界を強化し、プライベート インスタンスからの不要な下り(外向き)を防止できます。

以下のシステムのアーキテクチャ図は、プライベート Cloud Data Fusion インスタンスがパイプラインを開発する際にパブリック インターネットに接続する方法を示しています。

プライベート インスタンスのアーキテクチャ図

このシナリオでパイプラインを設計すると、Cloud Data Fusion は、Cloud Data Fusion Preview または Wrangler の顧客プロジェクトを通じて下り(外向き)トラフィックをルーティングします。このプロセスでは、次のリソースを使用します。

  • カスタム VPC ネットワーク ルート: カスタム VPC ネットワークは、インポートされたカスタムルートを介してゲートウェイ VM にトラフィックをルーティングします。これにより、VPC ピアリングを使用してテナント プロジェクトの VPC にエクスポートされます。

  • ゲートウェイ VM: ゲートウェイ VM は、Google Cloud からの下り(外向き)トラフィックを、パブリック インターネットを介して、Cloud Data Fusion テナント プロジェクトから SaaS またはサードパーティ クラウドへルーティングします。この VM は顧客プロジェクトで管理します。内部ロードバランサ(ILB)を使用して高可用性(HA)環境で構成することもできます。同じ VPC 内の複数のプライベート Cloud Data Fusion インスタンスに VM を再利用することをおすすめします。

開発環境および実行環境での下り(外向き)の制御の詳細については、プライベート インスタンスでの下り(外向き)の制御をご覧ください。

始める前に

インターネット接続の設定

次の手順では、Wrangler のプライベート Cloud Data Fusion インスタンスから Amazon S3 バケットにアクセスする方法について説明します。Preview または Wrangler でパイプラインを設計する際に、パブリック インターネットを介してデータソースにアクセスする場合にも同様の手順を適用します。

このガイドでは 1 つの VM のみを使用していますが、ミッション クリティカルなアプリケーションの場合は負荷分散された VM を作成することをおすすめします。詳細については、高可用性の VM の設定をご覧ください。

NAT ゲートウェイの作成

Cloud Data Fusion プライベート インスタンスと同じリージョンと VPC ネットワークに Cloud NAT ゲートウェイを作成します。

Cloud NAT ページに移動

ゲートウェイ VM インスタンスとファイアウォール ルールを作成する

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。(外部 IP を持たない VM を使用することをおすすめします)。

  3. プライベート Cloud Data Fusion インスタンスでネットワーク ピアリングが設定されているのと同じ VPC を使用します。このシナリオの VPC ネットワーク ピアリングの詳細については、始める前にをご覧ください。

  4. Cloud Data Fusion インスタンスと同じネットワーク内で、インスタンスの IP 転送を有効にします

  5. [起動スクリプト] フィールドに、次のスクリプトを入力します。

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    詳細については、起動スクリプトの実行をご覧ください。

    Cloud Data Fusion インスタンスに割り当てられた IP 範囲を取得するには、Cloud Data Fusion の [インスタンスの詳細] ページに移動します。

    下り(外向き)インターフェースのステージング

gcloud

ゲートウェイ VM とファイアウォール ルールを作成するには、gcloud コマンドライン ツールで次のスクリプトを実行します。

export CDF_PROJECT=CDF_PROJECT
export GATEWAY_VM=GATEWAY_VM_NAME
export ZONE=VM_ZONE
export SUBNET=SUBNET
export VPC_NETWORK=VPC_NETWORK
export COMPUTE_ENGINE_SA=COMPUTE_ENGINE_SA

gcloud beta compute --project=$CDF_PROJECT instances create $GATEWAY_VM --zone=$ZONE --machine-type=e2-medium --subnet=$SUBNET --network-tier=PREMIUM --metadata=startup-script=\#\!\ /bin/bash$'\n'echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward$'\n'iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf$'\n'iptables-save  --can-ip-forward --no-address --maintenance-policy=MIGRATE --service-account=$COMPUTE_ENGINE_SA --scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append --tags=http-server,https-server --image=debian-10-buster-v20210316 --image-project=debian-cloud --boot-disk-size=10GB --boot-disk-type=pd-balanced --boot-disk-device-name=$GATEWAY_VM --no-shielded-secure-boot --shielded-vtpm --shielded-integrity-monitoring --reservation-affinity=any

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-http --direction=INGRESS --priority=1000 --network= --action=ALLOW --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create egress-allow-https --direction=INGRESS --priority=1000 --network= --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=https-server
  • CDF_PROJECT はプロジェクトのカスタマイズ可能な一意の ID に置き換えます。
  • GATEWAY_VM は構成したい VM の名前に置き換えます。
  • ZONE は VM のゾーンに置き換えます。
  • SUBNET は、サブネットに置き換えます。
  • VPC_NETWORK は実際の VM 名に置き換えます。
  • COMPUTE_ENGINE_SA は Compute Engine サービス アカウント名に置き換えます。

共有 VPC の使用

共有 VPC を使用してプライベート Cloud Data Fusion インスタンスをパブリック インターネット上のソースに接続する場合は、テナント プロジェクトで VPC ネットワーク ピアリングが設定されているホスト プロジェクトにゲートウェイ VM を作成します。

カスタムルートを作成する

カスタム ルートを作成して、作成したゲートウェイ VM インスタンスに接続します。

Console

Cloud Console でルートを作成するには、静的ルートの追加をご覧ください。

次の手順でルートを構成します。

  • 1001 と等しいかそれ以上で [優先度] を設定します。 宛先を 0.0.0.0/0 に設定します。
  • プライベート Cloud Data Fusion インスタンスと同じプロジェクトと VPC を使用します。
  • VPC ネットワーク ピアリング構成でルートのエクスポートが許可されていることを確認してください。これにより、Cloud Data Fusion テナント プロジェクト VPC は、VPC ネットワーク ピアリングを介してこのカスタムルートをインポートできます。

gcloud

gcloud ツールでルートを作成する場合:

export ROUTE=ROUTE
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
    --network=$VPC_NETWORK --priority=1001 \
    --destination-range=0.0.0.0/0 \
    --next-hop-instance=$GATEWAY_VM \
    --next-hop-instance-zone=$ZONE

ROUTE はカスタムルートの名前に置き換えます。

設定を確認する

上記の手順を実行した後、Preview と Wrangler で S3 バケット サービス(または他の Saas かパブリック クラウド サービス)にアクセスできることを確認します。

高可用性ゲートウェイの設定

推奨: ミッション クリティカルなアプリケーションの場合は、負荷分散された VM を作成することをおすすめします。

ヘルスチェック用のファイアウォール ルールを作成する

ファイアウォール ルールを作成し、以下を許可します。

  • すべてのソース範囲のポート 80(HTTP)とポート 443(HTTPS)。
  • ヘルスチェックプローバーの IP アドレスからの TCP、UDP、ICMP トラフィック。例: 130.211.0.0/22,35.191.0.0/16

Console

すべてのソース範囲のポートを許可するファイアウォール ルールと、130.211.0.0/22,35.191.0.0/16 などのヘルスチェック プローバーの IP アドレスからの TCP、UDP、ICMP トラフィックを許可するファイアウォール ルールを作成します。

ヘルスチェックの作成をご覧ください。

gcloud

ヘルスチェック用のファイアウォール ルールを作成します。

export CDF_PROJECT=PROJECT_ID
export VPC_NETWORK=VPC_NETWORK

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-http \
    --direction=INGRESS --priority=1000  \
    --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:80  \
    --source-ranges=0.0.0.0/0  \
    --target-tags=http-server

gcloud compute --project=$CDF_PROJECT firewall-rules create vpc-allow-https \
    --direction=INGRESS --priority=1000 --network=$VPC_NETWORK \
    --action=ALLOW --rules=tcp:443 --source-ranges=0.0.0.0/0 \
    --target-tags=https-server

gcloud compute --project=$CDF_PROJECT firewall-rules create allow-health-checks \
    --network=$VPC_NETWORK \
    --action=allow --direction=ingress \
    --target-tags=allow-health-checks \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp,udp,icmp

ゲートウェイ VM インスタンス テンプレートを作成する

Console

次の手順で、Console にインスタンス テンプレートを作成します。

  • Cloud Data Fusion インスタンスと同じ VPC に作成します。
  • 推奨: プライベート IP アドレスを持つ VM を使用します。
  • HTTP / HTTPS ポートを有効にします。
  • IP 転送を有効化
  • [起動スクリプト] フィールドに、次のスクリプトを入力します。

    #! /bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -j MASQUERADE
    echo net.ipv4.ip_forward=1 > /etc/sysctl.d/11-gce-network-security.conf
    iptables-save
    

    詳細については、起動スクリプトの実行をご覧ください。

    Cloud Data Fusion インスタンスに割り当てられた IP 範囲を取得するには、Cloud Data Fusion の [インスタンスの詳細] ページに移動します。

gcloud

インスタンス テンプレートの作成:

export TEMPLATE_NAME=TEMPLATE_NAME
export REGION=REGION
export SUBNET=SUBNET
export SERVICE_ACCOUNT=SERVICE_ACCOUNT

gcloud beta compute --project=$CDF_PROJECT instance-templates create $TEMPLATE_NAME \
--machine-type=e2-medium \
--subnet=projects/$CDF_PROJECT/regions/$REGION/subnetworks/$SUBNET \
--network-tier=PREMIUM --metadata=startup-script=sudo\ bash\ -c\ \"echo\ 1\ \>\ /proc/sys/net/ipv4/ip_forward\"$'\n'sudo\ iptables\ -t\ nat\ -A\ POSTROUTING\ -s\ 0.0.0.0/0\ -j\ MASQUERADE$'\n'sudo\ bash\ -c\ \"echo\ net.ipv4.ip_forward=1\ \>\ /etc/sysctl.d/11-gce-network-security.conf\"$'\n'sudo\ iptables-save \
--can-ip-forward --no-address --maintenance-policy=MIGRATE \
--service-account=$SERVICE_ACCOUNT \
--scopes=https://www.googleapis.com/auth/devstorage.read_only,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/trace.append \
--region=$REGION --tags=http-server,https-server,allow-health-checks \
--image=debian-10-buster-v20210316 \
--image-project=debian-cloud --boot-disk-size=10GB \
--boot-disk-type=pd-balanced \
--boot-disk-device-name=$TEMPLATE_NAME \
--no-shielded-secure-boot --no-shielded-vtpm \
--no-shielded-integrity-monitoring \
--reservation-affinity=any

ヘルスチェックの作成

このゲートウェイ VM インスタンスではサービスが実行されないため、ヘルスチェックにポート 22 を使用できます。

Console

ヘルスチェックの作成をご覧ください。

gcloud

ヘルスチェックを作成します。

export HEATH_CHECK=HEALTH_CHECK_NAME

gcloud beta compute health-checks create tcp $HEATH_CHECK --project=$CDF_PROJECT \
--port=22 --proxy-header=NONE --no-enable-logging \
--check-interval=5 --timeout=5 \
--unhealthy-threshold=2 --healthy-threshold=2

インスタンス グループの作成

前の手順で作成したヘルスチェックを使用して、インスタンス グループを作成します。

Console

マネージド インスタンス グループの作成をご覧ください。

gcloud

インスタンス グループの作成:

export INSTANCE_GROUP=INSTANCE_GROUP
gcloud beta compute --project=$CDF_PROJECT instance-groups managed create $INSTANCE_GROUP \
--base-instance-name=$INSTANCE_GROUP \
--template=$TEMPLATE_NAME --size=1 --zone=$ZONE \
--health-check=test --initial-delay=300

gcloud beta compute --project "$CDF_PROJECT" instance-groups managed set-autoscaling "$INSTANCE_GROUP" \
--zone "$ZONE" --cool-down-period "60" \
--max-num-replicas "10" --min-num-replicas "1" \
--target-cpu-utilization "0.6" --mode "on"

ロードバランサを作成

前の手順で作成したインスタンス グループから TCP ロードバランサ(ILB)を作成します。

ロードバランサへのカスタムルートの追加

Cloud Data Fusion インスタンスと同じ VPC の内部ロードバランサ(ILB)にカスタムルートを追加します。

Console

[VPC ネットワーク] ページに移動します。

[VPC ネットワーク] ページに移動

[ルート] タブで [ルートを作成] をクリックします。

カスタムルートの追加

gcloud

カスタムルートを内部ロードバランサに追加します。

export ROUTE=ROUTE_NAME
export ILB_FRONTEND=<ip_of_ilb_frontend>
gcloud beta compute routes create $ROUTE --project=$CDF_PROJECT \
--network=$VPC_NETWORK --priority=1001 \
--destination-range=0.0.0.0/0 \
--next-hop-ilb=$ILB_FRONTEND \
--next-hop-ilb-region=$REGION

トラブルシューティング

Preview または Wrangler の接続タイムアウト エラーが発生する

下り(外向き)の制御の設定中に、Connection Timeout エラーが発生することがあります。

問題を解決するには、次の設定が適用されていることを確認してください。

インスタンス グループのヘルスチェックが失敗する

130.211.0.0/22,35.191.0.0/16 ソース範囲からの TCP、UDP、ICMP トラフィックを許可するファイアウォール ルールがあることを確認します。

Dataproc での実行中にパイプラインが失敗する

Dataproc クラスタと同じリージョンとネットワークで Cloud NAT を有効化し、実行時にパブリック インターネットにアクセスします。

次のステップ