VPC の外部からクラスタに接続する

このページでは、構成済みの Virtual Private Cloud(VPC)の外部から AlloyDB for PostgreSQL クラスタに接続するさまざまな方法について説明します。AlloyDB クラスタを作成していることを前提としています。

外部接続について

AlloyDB クラスタは、Google Cloud VPC 内の複数のノードで構成されます。クラスタを作成する際、使用している VPC のうち 1 つと、新しいクラスタを含む Google マネージド VPC との間で、プライベート サービス アクセスを構成します。このピアリング接続により、プライベート IP アドレスを使用して、自分の VPC の一部であるかのようにクラスタの VPC 上のリソースにアクセスできます。

アプリケーションが、この接続された VPC の外部からクラスタに接続する必要がある場合があります。

  • アプリケーションは、プライベート サービス アクセスを介してクラスタに接続した VPC の外部にある、 Google Cloud エコシステム内の別の場所で実行されています。

  • Google ネットワーク外部の VPC でアプリケーションが実行されている。

  • アプリケーションが「オンプレミス」で実行され、公共のインターネット上の別の場所にあるマシンで実行されている。

上記のいずれの場合も、AlloyDB クラスタへのこのような外部接続を有効にするには、追加のサービスを設定する必要があります。

外部接続ソリューションの概要

外部接続には、ニーズに応じて次の 2 つの一般的なソリューションを使用することをおすすめします。

  • プロジェクト開発やプロトタイピング、または比較的低コストの本番環境の場合は、中間仮想マシン(VM)(「踏み台」とも呼ばれます)を VPC 内に設定します。この中間 VM を外部アプリケーション環境と AlloyDB クラスタ間の安全な接続として使用するには、さまざまな方法があります。

  • 高可用性が必要な本番環境では、Cloud VPN または Cloud Interconnect を介して VPC とアプリケーションの間に永続的な接続を確立することを検討してください。

以降のセクションでは、これらの外部接続ソリューションについて詳しく説明します。

中間 VM を介して接続する

オープンソース ツールと最小限の追加リソースを使用して VPC の外部から AlloyDB クラスタへの接続を確立するには、その VPC 内に設定された中間 VM でプロキシ サービスを実行します。この目的のために新しい VM を設定することも、AlloyDB クラスタの VPC 内ですでに実行されている VM を使用することもできます。

セルフマネージド ソリューションである中間 VM を使用すると、通常は Network Connectivity プロダクトを使用する場合よりも費用が少なくて済み、セットアップ時間も短くなります。ただし欠点もあります。接続の可用性、セキュリティ、データ スループットはすべて中間 VM に依存することになるほか、中間 VM はプロジェクトの一部としてご自身で維持管理する必要があります。

IAP を介して接続する

Identity-Aware Proxy(IAP)を使用すると、中間 VM のパブリック IP アドレスを公開せずにクラスタに安全に接続できます。このルートからのアクセスは、ファイアウォール ルールと Identity and Access Management(IAM)を組み合わせて使用することによって制限します。そのため、IAP は開発やプロトタイピングのような非本番環境の用途に適したソリューションです。

クラスタへの IAP アクセスを設定する手順は次のとおりです。

  1. 外部クライアントに Google Cloud CLI をインストールします。

  2. IAP TCP 転送用のプロジェクトを準備します

    新しいファイアウォール ルールを定義するときに、上り(内向き)TCP トラフィックに対してポート 22(SSH)へのアクセスを許可します。プロジェクトのデフォルト ネットワークを使用していて、事前設定された default-allow-ssh ルールを有効にしている場合、追加のルールを定義する必要はありません。

  3. IAP 経由の SSH を使用して、外部クライアントと中間 VM の間のポート転送を設定します。

    gcloud compute ssh my-vm \
           --tunnel-through-iap \
           --zone=ZONE_ID \
           --ssh-flag="-L PORT_NUMBER:ALLOYDB_IP_ADDRESS:5432"

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

    • ZONE_ID: クラスタが配置されているゾーンの ID(例: us-central1-a)。
    • ALLOYDB_IP_ADDRESS: 接続する AlloyDB インスタンスの IP アドレス。
    • PORT_NUMBER: VM のポート番号。
  4. 外部クライアントで psql を使用して接続をテストし、前の手順で指定したローカルポートに接続します。たとえば、postgres ユーザーロールとしてポート 5432 に接続するには、次のコマンドを使用します。

    psql -h localhost -p 5432 -U USERNAME

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

    • USERNAME: インスタンスに接続する postgreSQL ユーザー(デフォルト ユーザー postgres など)。

SOCKS プロキシを介して接続する

中間 VM で SOCKS サービスを実行すると、AlloyDB クラスタへの柔軟でスケーラブルな接続が可能になります。また、AlloyDB Auth Proxy によってエンドツーエンドの暗号化も提供されます。適切な構成を行うと、本番環境のワークロードに適したものにできます。

このソリューションには、次の手順が含まれます。

  1. 中間 VM で、SOCKS サーバーをインストール、構成、実行します。一般的なオープンソース ソリューションである Dante がその一例です。

    外部接続と内部接続の両方で VM の ens4 ネットワーク インターフェースにバインドするようにサーバーを構成します。内部接続に必要なポートを指定します。

  2. 適切な IP アドレスまたは範囲から SOCKS サーバーの構成ポートへの TCP トラフィックを許可するように、VPC のファイアウォールを構成します。

  3. 外部クライアントに AlloyDB Auth Proxy をインストールします。

  4. ALL_PROXY 環境変数を中間 VM の IP アドレスに設定し、SOCKS サーバーが使用するポートを指定して、外部クライアントで AlloyDB Auth Proxy を実行します。

    この例では、198.51.100.1 のポート 1080 で実行されている SOCKS サーバー経由で、my-main-instance のデータベースに接続するように AlloyDB Auth Proxy を構成します。

    ALL_PROXY=socks5://198.51.100.1:1080 ./alloydb-auth-proxy \
    /projects/PROJECT_ID/locations/REGION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID

    ピアリングされた VPC から接続する場合は、中間 VM の内部 IP アドレスを使用できます。それ以外の場合は、外部 IP アドレスを使用します。

  5. 外部クライアントで psql を使用して接続をテストし、AlloyDB Auth Proxy がリッスンしているポートに接続します。たとえば、postgres ユーザーロールとしてポート 5432 に接続するには、次のようにします。

    psql -h IP_ADDRESS -p PORT_NUMBER -U USERNAME

PostgreSQL プーラーを介して接続する

外部クライアントの代わりに中間 VM に AlloyDB Auth Proxy をインストールして実行する必要がある場合、AlloyDB Auth Proxy をプロトコル対応プロキシ(プーラー)とペアリングすることで、AlloyDB Auth Proxy への安全な接続を有効にできます。PostgreSQL 用の一般的なオープンソース プーラーには、Pgpool-IIPgBouncer があります。

このソリューションでは、AlloyDB Auth Proxy とプールの両方を中間 VM で実行します。クライアントまたはアプリケーションは、SSL 経由でプーラーに直接かつ安全に接続でき、追加のサービスを実行する必要はありません。プーラーは、Auth Proxy を介して PostgreSQL クエリを AlloyDB クラスタに渡します。

AlloyDB クラスタ内のすべてのインスタンスに個別の内部 IP アドレスがあるため、各プロキシ サービスは、プライマリ インスタンス、スタンバイ、読み取りプールのうちいずれか 1 つのインスタンスのみと通信できます。そのため、クラスタ内のすべてのインスタンスに対して、適切に構成された SSL 証明書を使用して個別のプーラー サービスを実行する必要があります。

Cloud VPN または Cloud Interconnect を介して接続する

高可用性(HA)が必要な本番環境では、外部サービスのニーズとネットワーク トポロジに応じて、 Google Cloud Network Connectivity プロダクト(Cloud VPN または Cloud Interconnect)を使用することをおすすめします。さらに、Cloud Router で適切なルートがアドバタイズされるように構成します。

ネットワーク接続プロダクトを使用するプロセスは、中間 VM を設定するプロセスよりも複雑ですが、このアプローチでは、稼働時間と可用性の負担がお客様から Google に移行されます。特に、HA VPN は 99.99% の SLA を提供するため、本番環境に適しています。

また、ネットワーク接続ソリューションを使用すると、アプリケーションの一部として安全な VM を別途維持する必要がないため、このアプローチに固有の単一障害点のリスクを回避できます。

これらのソリューションの詳細については、Network Connectivity プロダクトの選択をご覧ください。

次のステップ