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

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

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

  • Egressとは、パブリック インターネット経由で 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 は、Cloud Data Fusion テナント プロジェクトの Google Cloud からの下り(外向き)トラフィックを、パブリック インターネット経由で 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 とファイアウォール ルールを作成するには、Google Cloud CLI で次のスクリプトを実行します。

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=$VPC_NETWORK --action=ALLOW --rules=tcp:80 --source-ranges=CDF_IP_RANGE --target-tags=http-server

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

以下を置き換えます。

  • CDF_PROJECT: プロジェクトのカスタマイズ可能な固有識別子
  • GATEWAY_VM: 構成する VM の名前
  • ZONE: VM のゾーン
  • SUBNET: サブネット
  • VPC_NETWORK: VM の名前
  • COMPUTE_ENGINE_SA: Compute Engine サービス アカウントの名前。
  • CDF_IP_RANGE: Cloud Data Fusion インスタンスに割り当て振られた IP 範囲

共有 VPC の使用

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

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

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

Console

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

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

  • 1001 と等しいかそれ以上で [優先度] を設定します。宛先を、Cloud Data Fusion インスタンスに割り当てられた IP 範囲に設定します。
  • プライベート Cloud Data Fusion インスタンスと同じプロジェクトと VPC を使用します。
  • Cloud Data Fusion テナント プロジェクト VPC が VPC ネットワーク ピアリングを介してこのカスタムルートをインポートできるように、VPC ネットワーク ピアリング構成でルートをエクスポートできるようにします。

gcloud

gcloud CLI でルートを作成するには:

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=CDF_IP_RANGE \
    --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=CDF_IP_RANGE \
    --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

以下を置き換えます。

  • PROJECT_ID: プロジェクトのカスタマイズ可能な一意の ID。
  • VPC_NETWORK: VPC ネットワークの名前。
  • CDF_IP_RANGE: Cloud Data Fusion に割り当てられた IP アドレス範囲。

ゲートウェイ 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 を有効化します。

次のステップ