【実務・中級編】 GCP Private Service Connect (PSC) のエンドポイントと公開サービス – クラウドインフラと仮想化ネットワーク実践ガイド

「VPCピアリングはもう古い?」GCP Private Service Connect (PSC) で実現する、境界を越えたプライベート接続の真髄

インフラエンジニアの皆さん、VPCピアリングの管理で頭を悩ませた経験はありますか?

「AプロジェクトとBプロジェクトを繋ぎたいだけなのに、IPアドレスの重複に怯え、ルーティングテーブルのメンテナンスに追われ、ファイアウォールの穴開けでセキュリティ監査に冷や汗をかく……」。かつて、クラウド間のネットワーク構築は、こうした「泥臭い調整」の連続でした。

しかし、Google Cloudの Private Service Connect (PSC) が登場して以来、世界は変わりました。今回は、NATもピアリングも不要で、極めてセキュアかつスケーラブルにサービスを公開・利用できるPSCの「中身」を、現場目線で深掘りしていきます。

—

1. PSCの正体:なぜ「IPの重複」を恐れなくていいのか?

PSCの核心は、「サービス提供側のVPCと、利用者側のVPCが直接繋がっていない」という点にあります。

従来のVPCピアリングは、ネットワークの境界そのものを拡張する手法でした。これに対し、PSCは「サービスへの入り口(エンドポイント)」を、利用者側のVPC内に「仮想的なインターフェース」として投影します。

  • 利用者側: 自分のVPC内にある特定のプライベートIP(エンドポイント)に対してリクエストを投げる。
  • Googleのバックボーン: そのIPへの通信を、裏側で魔法のようにサービス提供側のエンドポイントへ転送する。

この仕組みにより、提供側と利用側でIPアドレス体系が重複していても、全く問題なく通信が成立します。ルーティングの競合を考慮してIP設計を練り直す……なんていう、あの悪夢から解放されるわけです。

—

2. 通信フロー:パケットはどこを走るのか?

PSCの通信シーケンスを整理すると、意外なほどシンプルです。

1. 名前解決: アプリケーションはエンドポイントのIPを叩きます。DNS(Cloud DNS)を使って、特定のドメインをこのエンドポイントIPに解決するように設定するのが定石です。
2. 転送ルール (Forwarding Rule): 利用者側のVPCに作成された転送ルールが、通信をキャッチします。これが「PSCエンドポイント」の正体です。
3. Googleの魔法: 送信元IPはNAT変換されることなく、Googleのプライベートバックボーンを経由し、サービス提供側の「サービス添付(Service Attachment)」へと運ばれます。
4. サービス着信: 提供側のロードバランサーが通信を受け取り、バックエンドへ配送します。

ここで重要なのは、「サービス提供側からは、利用側のプライベートIPがそのまま見える」ということです。これにより、提供側は利用者のIPに基づいたアクセス制御が可能になります。

—

3. 実践:PSCエンドポイントを構築する

実際に gcloud コマンドでエンドポイントを構成する手順を見てみましょう。ここでは、他プロジェクトで公開されているサービスを利用する想定です。

ステップ1:エンドポイントの作成

# 利用者側のVPC内に、PSCエンドポイント用のIPアドレスを確保
gcloud compute addresses create psc-endpoint-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --subnet=my-subnet \
    --addresses=10.0.0.5  # エンドポイントとして割り当てるIP

# 転送ルールの作成(これが通信の入り口)
gcloud compute forwarding-rules create my-psc-endpoint \
    --address=psc-endpoint-ip \
    --network=my-vpc \
    --target-service-attachment=projects/producer-project/regions/asia-northeast1/serviceAttachments/my-service-attachment \
    --global

ステップ2:アプリケーションから呼び出す(Python例)

アプリケーション側は、まるでローカルにあるサーバーを叩くかのように、この 10.0.0.5 を参照します。

import requests

# 実際のエンドポイントIPに向けたリクエスト
# DNS設定を済ませていれば、ドメイン名で指定するのがベスト
url = "http://10.0.0.5/api/v1/resource"

try:
    # タイムアウト設定は必須。ネットワーク障害時にもアプリを道連れにしないために
    response = requests.get(url, timeout=5)
    response.raise_for_status()
    print(response.json())
except requests.exceptions.RequestException as e:
    # 繋がらない時は、まず forwarding-rule の状態を gcloud で確認すること
    print(f"PSC経由の通信エラー: {e}")

—

4. 現場のトラブルシューティングTips

PSCを運用していると、「なぜか繋がらない」という状況に直面することがあります。その際、シニアエンジニアが最初に確認するのは以下の3点です。

  • サービス添付(Service Attachment)の承認状態: 提供側で「自動承認」になっていない場合、利用者側からの接続リクエストが「保留中」になっていることがあります。gcloud compute service-attachments describe で状態を確認してください。
  • ファイアウォールルール: PSCエンドポイントそのものにファイアウォールを設定する必要はありませんが、サービス提供側のバックエンド(ロードバランサー)が、PSC経由のトラフィックを許可しているかを確認してください。
  • DNSの解決先: dig や nslookup で、意図したエンドポイントIPが返ってきているかを必ず確認します。特にハイブリッド環境(オンプレミスからの接続)では、Cloud DNSのフォワーディング設定が漏れがちです。

—

最後に:ネットワークを「意識しない」アーキテクチャへ

PSCの真の価値は、ネットワークの複雑さを「エンドポイント」という単一のオブジェクトに封じ込めたことにあります。

開発者はインフラのトポロジーを気にせず、提供されたエンドポイントURLを config に書くだけでサービスを利用できる。インフラ担当者は、ピアリングのルート管理から解放され、よりセキュアな設計に集中できる。

これこそが、モダンなクラウドインフラの理想形ではないでしょうか。ぜひ皆さんのプロダクション環境でも、PSCを活用して「ネットワークのしがらみ」から自由になってください。

それでは、また次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました