Google Cloud マネージド サービスのネットワーク接続
このページでは、Integration Connectors からバックエンド サービス(CloudSQL for MySQL、CloudSQL for PostgreSQL、CloudSQL for SQL Server など)へのプライベート接続を設定する方法について説明します。このページでは、次のコンセプトを理解していることを前提としています。
考慮事項
PSC サービス アタッチメントを作成する場合は、次の重要な点に留意してください。
- PSC サービス アタッチメントとロードバランサは、同じ VPC 内の異なるサブネット内に作成されます。具体的には、サービス アタッチメントが常に NAT サブネット内に作成されます。
- SOCKS5 プロキシ サーバーは
0.0.0.0:<port>
IP アドレスにバインドする必要があります。これは、ロードバランサとヘルスチェック プローブからの受信トラフィックに必要です。詳細については、ヘルスチェックをご覧ください。 - ロードバランサとヘルスチェック プローブからのトラフィックは、同じポートに送信する必要があります。
- ファイアウォール ルールを構成して、トラフィック フローを促進します。
上り(内向き)ルール
- PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達する必要があります。
- ILB のサブネット内で、ILB が SOCKS5 プロキシ サーバーにトラフィックを送信できる必要があります。
- ヘルスチェック プローブは、SOCKS5 プロキシ サーバーにアクセスできる必要があります。Google Cloud ヘルスチェック プローブには固定の IP 範囲(
35.191.0.0/16, 130.211.0.0/22
)があります。そのため、これらの IP は SOCKS プロキシ サーバーにトラフィックを送信できます。
下り(外向き)ルール
特定の拒否ルールが構成されていない限り、Google Cloud プロジェクトで下り(外向き)トラフィックはデフォルトで有効になっています。
- PSC サービス アタッチメントやロードバランサなど、すべての Google Cloud コンポーネントは同じリージョンに存在する必要があります。
- 次のシナリオでは、SOCKS5 プロキシ サーバーがトラフィックを受け入れるようにしてください。
- パススルー ロードバランサ(L4 TCP / UDP ILB): PSC サービス アタッチメントの NAT IP からのリクエストが SOCKS5 プロキシ サーバーに到達できる必要があります。したがって、サービス アタッチメントに NAT サブネットの IP 範囲全体を許可する必要があります。詳細については、Private Service Connect サブネットをご覧ください。
- プロキシベース / HTTP(S) ロードバランサ(L4 プロキシ ILB、L7 ILB): すべての新しいリクエストがロードバランサから送信されます。したがって、SOCKS5 プロキシ サーバーが、VPC ネットワークのプロキシ サブネットからのリクエストを受け入れるようにする必要があります。詳細については、Envoy ベースのロードバランサのプロキシ専用サブネットをご覧ください。
プライベート接続を構成する
CloudSQL MySQL などの一部のマネージド Google Cloud サービスは、プライベート接続用の PSC サービス アタッチメントを公開しています。その場合は、この手順をスキップして PSC サービス アタッチメントを作成できます。提供されたマネージド サービスによって提供される PSC サービス アタッチメントを使用して、Integration Connectors エンドポイント アタッチメントを作成できます。
次のシナリオでは、新しい PSC サービス アタッチメントを作成する必要があります。
- Google Cloud マネージド サービスはサービス アタッチメントを公開していませんが、限定公開サービス アクセスを使用して IP アドレスを公開しています。
- Google Cloud マネージド サービスはサービス アタッチメントを公開しますが、サービス アタッチメントを使用するように Integration Connectors プロジェクトを許可リストに登録することはできません。
次の 2 つのシナリオでサービス アタッチメントを作成する手順については、以降のセクションで詳しく説明します。サービス アタッチメントを作成したら、エンドポイント アタッチメントを作成し、エンドポイント アタッチメントを使用するように接続を構成する必要があります。
アクセスを制限するマネージド サービスのサービス アタッチメントを作成する
マネージド サービスでは、公開するサービス アタッチメントを使用するように Integration Connectors プロジェクトを許可リストに登録できない場合があります。この場合、サービス アタッチメントを使用するロードバランサを作成し、プロジェクトに別のサービス アタッチメントを作成して、ロードバランサを Integration Connectors に公開する必要があります。
次の図は、サービス アタッチメントを公開するマネージド サービスを示しています。
PSC NEG をバックエンドとして使用するロードバランサを作成する
- 公開サービスに接続するための NEG を作成する
- リージョン内部プロキシ ネットワーク ロードバランサにバックエンドを追加する
詳細については、Private Service Connect NEG を作成するをご覧ください。
サービス アタッチメントを作成する
- PSC NAT のサブネットを作成する。
- PSC NAT からロードバランサへのリクエストを許可するファイアウォール ルールを作成する。
- サービス アタッチメントを作成する。
詳細については、PSC サービス アタッチメントを作成するをご覧ください。
Integration Connectors プロジェクトからの Private Service Connect 接続を許可する
Integration Connectors プロジェクトから Private Service Connect 接続を許可リストに登録する方法については、Integration Connectors を許可リストに登録するをご覧ください。
IP アドレスを公開するマネージド サービスのサービス アタッチメントを作成する
マネージド サービスがサービス アタッチメントを公開していない場合は、Integration Connectors からのトラフィックをプロジェクトを介してプロキシする必要があります。
次の図は、サービス アタッチメントを公開しないマネージド サービスを示しています。
プライベート接続を構成する手順は次のとおりです。
- PSC サービス アタッチメントを作成します。
- SOCKS5 プロキシ サーバーを実行する Compute Engine VM インスタンスを作成します。
- プロキシ インスタンス 1 を作成します。
gcloud compute instances create PROXY_INSTANCE_1 \ --project=PROJECT_ID \ --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
要件に応じて、必要な数の VM インスタンスを作成できます。
- プロキシ インスタンス 1 を作成します。
- VM インスタンスへの SSH を許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
- VM インスタンスに SSH で接続します。
gcloud compute ssh \ --tunnel-through-iap \ PROXY_INSTANCE_1
- Dante SOCKS5 プロキシ サーバーをインストールします。
sudo apt update sudo apt install dante-server
- サーバー インターフェースを確認します。
sudo ip a
- Dante 構成のバックアップを作成します。
sudo mv /etc/danted.conf /etc/danted.conf.bak
- 新しい Dante 構成ファイルを作成します。
sudo nano /etc/danted.conf
- 次の構成を構成ファイルにコピーします。
logoutput: /var/log/socks.log # Bind the server to the 0.0.0.0 IP address to allow traffic # traffic from the load balancer and the health check probes. internal: 0.0.0.0 port = 1080 external: ens4 clientmethod: none socksmethod: none user.privileged: root user.notprivileged: nobody client pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: error connect disconnect } client block { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect error } socks pass { from: 0.0.0.0/0 to: 0.0.0.0/0 log: error connect disconnect } socks block { from: 0.0.0.0/0 to: 0.0.0.0/0 log: connect error }
- Dante サーバーを再起動してステータスを確認します。
sudo systemctl restart danted sudo systemctl status danted
- VM インスタンスを終了します。
exit
- VM インスタンスをバックエンドとして使用してロードバランサを作成します。
- 非マネージド インスタンス グループの作成
gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
- ステップ 3 で作成した VM インスタンスをグループに追加します。
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \ --instances=PROXY_INSTANCE_1
- ヘルスチェック プローブを作成し、プローブからのトラフィックを許可します。
- ヘルスチェック プローブを作成します。
gcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --port BACKEND_SERVER_PORT --region=REGION
このコマンドでは、BACKEND_SERVER_PORT を 1080 に設定します。これは、SOCKS5 プロキシ サーバーが実行されるデフォルト ポートです。
- プローブからのトラフィックを許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \ --source-ranges=35.191.0.0/16,130.211.0.0/22
- ヘルスチェック プローブを作成します。
- L4 内部ロードバランサを作成し、ロードバランサからのトラフィックを許可します。
- バックエンド サービスを作成します。
gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME \ --health-checks-region=REGION
- バックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend BACKEND_SERVICE \ --instance-group=INSTANCE_GROUP_NAME \ --instance-group-zone=ZONE
- 転送ルールを作成します。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \ --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \ --backend-service-region=REGION
-
ロードバランサからインスタンス グループへの内部トラフィックを許可するファイアウォール ルールを作成します。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK \ --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
- バックエンド サービスを作成します。
エンドポイント アタッチメントを作成する
マネージド サービスのサービス アタッチメントを作成したら、エンドポイント アタッチメントを作成し、接続で使用する必要があります。
IP アドレスとしてのエンドポイント アタッチメントエンドポイント アタッチメントを IP アドレスとして作成する手順については、エンドポイント アタッチメントを IP アドレスとして作成するをご覧ください。
エンドポイント アタッチメントをホスト名として使用TLS 対応のバックエンドなど、特定のケースでは、TLS 検証を行うために宛先にプライベート IP ではなくホスト名を使用する必要があります。ホスト宛先として IP アドレスの代わりに限定公開 DNS を使用する場合は、エンドポイント アタッチメントを IP アドレスとして作成するだけでなく、マネージド ゾーンも構成する必要があります。エンドポイント アタッチメントをホスト名として作成する方法については、エンドポイント アタッチメントをホスト名として作成するをご覧ください。
後で、エンドポイント アタッチメントを使用するように接続を構成するときに、このエンドポイント アタッチメントを選択できます。
エンドポイント アタッチメントを使用するように接続を構成する
エンドポイント アタッチメントを作成したので、接続でエンドポイント アタッチメントを使用します。新しい接続を作成するか、既存の接続を更新する場合は、[宛先] セクションで [宛先の種類] として [エンドポイント アタッチメント] を選択し、[エンドポイント アタッチメント] リストから作成したエンドポイント アタッチメントを選択します。
マネージド ゾーンを作成した場合は、[宛先の種類] として [ホストアドレス] を選択し、マネージド ゾーンの作成時に作成した A レコードを使用します。
トラブルシューティングのヒント
プライベート接続に問題がある場合は、このセクションに記載されているガイドラインに沿って、一般的な問題を回避してください。
- コネクタのテナント プロジェクトがサービス アタッチメントの許可リストに登録されていることを確認します。
- ファイアウォール ルールが次のように構成されていることを確認します。
- PSC サービス アタッチメントのサブネットからのトラフィックがバックエンド サービスに到達することが許可されている必要があります。
- ヘルスチェック プローブはバックエンド システムにアクセスできる必要があります。Google Cloud ヘルスチェック プローブには固定の IP 範囲(35.191.0.0/16, 130.211.0.0/22)があります。そのため、これらの IP アドレスはバックエンドサーバーへのトラフィックの送信を許可されている必要があります。
- Google Cloud 接続テストを使用すると、ネットワーク構成のギャップを特定できます。詳細については、接続テストを作成して実行するをご覧ください。
- 非マネージド インスタンス グループの作成
VM インスタンスは、Integration Connectors からマネージド サービスへのトラフィックのプロキシに使用されます。VM インスタンスに SOCKS5 プロキシをインストールします。Cloud SQL Auth Proxy は、SOCKS5 プロキシを介したチェーンをサポートしています。これにより、暗号化されたトラフィックを Cloud SQL Auth Proxy から宛先の Cloud SQL インスタンスに転送できます。したがって、プライベート Cloud SQL インスタンスに接続するには、SOCKS5 プロキシ サーバーが必須です。
SOCKS5 プロキシ サーバーのインストールと構成の詳細な手順については、このドキュメントでは説明しません。任意の SOCKS5 プロキシをインストールできます。次の手順では、Dante SOCKS5 プロキシ サーバーをインストールして構成する方法について説明します。
- SOCKS5 プロキシ サーバーを実行する Compute Engine VM インスタンスを作成します。