Private Google Access・Private Service Access・Private Service Connectの違い

GCPのVPC接続方式では、名前が似た機能がいくつも出てきます。

「外部公開せずにprivateに接続する」「serverlessからVPC内へアクセスする」といった課題はクラウド全般にあります。ただし、Private Google Access、Private Service Access、Private Service Connect、Direct VPC egress はGCP固有の機能名です。本記事では、一般的なprivate接続の考え方ではなく、GCPでどの機能をどの向きの通信に使うかを整理します。

  • Private Google Access
  • Private Service Access
  • Private Service Connect
  • Serverless VPC Access
  • Direct VPC egress

全部を「private接続」として覚えると混乱します。重要なのは、アクセス元アクセス先通信の向き です。

本記事では、VPC内リソースからGoogle API系やCloud SQL系へ接続する話と、serverlessからVPC内へ接続する話を分けて整理します。

まず分類を固定する

「マネージドサービス」という言葉は広すぎるため、ここでは使いません。VPC外にあるGoogleサービスを以下の3分類で見ます。

分類VPCとの関係
Google API系Cloud Storage, BigQuery, Pub/Sub, Secret ManagerVPC外。APIとして呼ぶ
Google管理DB/Cache系Cloud SQL, MemorystoreVPC外。private接続で使うことが多い
Serverlessアプリ系Cloud Run, App Engine, Cloud FunctionsVPC外。VPCへ出る/外から入るを分けて考える

VPC内外の判定は『GCPでVPC内にあるリソースとVPC外にあるサービスを見分ける』で扱っています。

覚える基本形

最初は以下で十分です。

アクセス元アクセス先基本の接続方式
VPC内リソースGoogle API系Private Google Access
VPC内リソースCloud SQL / Memorystore系Private Service Access
Serverlessアプリ系VPC内リソースDirect VPC egress / Serverless VPC Access

Private Service Connect(PSC)は、Google API系にもDB/Cache系にも他VPCサービスにも使える応用的なprivate接続方式です。最初からPSCを主軸にすると混乱しやすいため、まずは上の基本形で押さえます。

また、VPC内リソースから「外へ出る」という意味ではCloud NATも連想しやすいですが、Cloud NATはInternetへ出るための出口です。Private Google AccessやPrivate Service Accessは、Internet一般ではなくGoogle API系やCloud SQL系へprivateに到達する話です。

ここで注意したいのは、Direct VPC egress / Serverless VPC Access だけ通信の向きが逆に見えることです。

  • Private Google Access / Private Service Access / Private Service Connect: VPC内リソースからVPC外のGoogleサービスへ行く
  • Direct VPC egress / Serverless VPC Access: VPC外のserverless実行基盤からVPC内リソースへ行く

図で並べると以下です。

flowchart TB
  subgraph pattern1["VPC内リソースから外へ行く"]
    direction LR
    subgraph vpc1["Your VPC"]
      vm1["VPC内リソース"]
    end
    google["Google API / Cloud SQL"]
    vm1 -->|"Private Google Access / PSA / PSC"| google
  end

  subgraph pattern2["ServerlessからVPC内へ行く"]
    direction LR
    run["Cloud Run<br/>serverless実行基盤"]
    subgraph vpc2["Your VPC"]
      app["VPC内リソース"]
    end
    run -->|"Direct VPC egress / Serverless VPC Access"| app
  end

Private Google Access

Private Google Accessは、外部IPを持たないVPC内リソースからGoogle API系へアクセスするための方式です。

項目内容
アクセス元VPC内リソース
アクセス先Google API系
Cloud Storage / BigQuery / Pub/Sub / Secret Manager
flowchart LR
  subgraph vpc["Your VPC"]
    vm["VPC内リソース<br/>external IPなし"]
  end

  api["Google API系<br/>Cloud Storage / BigQuery"]

  vm -->|"Private Google Access"| api

Cloud StorageやBigQueryは、自分のVPC内にあるDBではありません。VPC内リソースが googleapis.com のAPIを呼ぶ相手です。

APIを呼ぶための接続として、Private Google Accessを使います。

Private Service Access

Private Service Access(PSA)は、自分のVPCとサービス提供側のネットワークをprivateに接続する方式です。Cloud SQL private IPやMemorystoreでよく出ます。

項目内容
アクセス元VPC内リソース
アクセス先Google管理DB/Cache系
Cloud SQL / Memorystore
flowchart LR
  subgraph vpc["Your VPC"]
    app["VPC内アプリ"]
  end

  producer["Service producer network<br/>Cloud SQL / Memorystore"]

  app -->|"Private Service Access"| producer

Cloud SQLは自分のGCPリソースですが、自分のVPC内VMではありません。VPC内アプリからprivateに到達できるDB接続先です。

DB/Redisにつなぐための接続として、Private Service Accessを使います。

Private Service Connect

Private Service Connect(PSC)は、VPC内にprivate endpoint等を作り、Google API系・Cloud SQL系・他VPCサービス・SaaSなどへprivateに接続する汎用的な方式です。

PSCは接続先のカテゴリ名ではなく、private接続方式です。

PSCの対象は広いです。

PSCでつなげる先
Google API系Cloud Storage, BigQuery, Pub/Subなど
Google管理DB/Cache系Cloud SQLなど、対応サービス
他VPCの公開サービス別チーム/別プロジェクトのinternal LB配下サービス
SaaS / third-party servicePrivate接続対応SaaS
flowchart LR
  subgraph vpc["Your VPC"]
    endpoint["PSC endpoint<br/>10.0.0.5"]
    app["VPC内アプリ"]
  end

  service["Google API / Cloud SQL / Published service"]

  app --> endpoint
  endpoint --> service

PSAと比べると、PSCはサービス単位のprivate endpointとして考えると理解しやすいです。

  • PSA: Cloud SQL private IPなどでよく見る古典的な方式
  • PSC: private endpointでつなぐ新しめ・汎用的な方式

ただし、PSCがPSAの完全な後継であり、PSAは使わない、という理解は雑です。対象サービスや構成によって選択肢が変わります。

Direct VPC egress / Serverless VPC Access

Serverlessアプリ系は別枠です。Cloud Run、App Engine、Cloud Functionsは、自分のVPC内に直接置いたVMではありません。

前段のPrivate Google AccessやPrivate Service Accessは、VPC内リソースからVPC外のGoogleサービスへ出ていく通信でした。

一方でDirect VPC egressやServerless VPC Accessは、Cloud Runなどのserverless実行基盤からVPC内リソースへ出ていく通信です。つまり、VPCとの関係だけを見ると矢印の向きが逆です。

Cloud RunなどからVPC内リソースへアクセスしたい場合は、Direct VPC egressやServerless VPC Accessを使います。

項目内容
アクセス元Cloud Runなどserverless
アクセス先VPC内リソース
使うものDirect VPC egress / Serverless VPC Access
flowchart LR
  run["Cloud Run<br/>serverless実行基盤"]
  subgraph vpc["Your VPC"]
    app["VPC内リソース<br/>VM / GKE / internal API"]
  end

  run -->|"Direct VPC egress"| app

ここで重要なのは、通信の向きです。

  • VPC内リソース → Cloud SQL: PSA / PSC
  • Cloud Run → VPC内リソース: Direct VPC egress / Serverless VPC Access

同じ「VPC外のGoogle管理サービス」と見えても、Cloud Runはアプリ実行基盤です。Cloud Runから出る通信とCloud Runへ入る通信を別々に考えます。

Internetへ出る通信はCloud NAT

ここまで扱っているPrivate Google Access、Private Service Access、Private Service Connectは、VPC内リソースからGoogle API系やCloud SQL系へprivateに到達するための話です。

一方で、外部IPを持たないVPC内リソースが一般のInternetへ出たい場合はCloud NATの領域です。

アクセス元アクセス先見るもの
VPC内リソースGoogle API系Private Google Access / PSC
VPC内リソースCloud SQL / Memorystore系Private Service Access / PSC
VPC内リソースInternetCloud NAT / external IP

つまりCloud NATは、「privateにGoogleサービスへ行く」話ではなく、VPC内リソースからInternetへ出る話です。

まとめ

  • Google API系へ行くならPrivate Google Accessが基本
  • Cloud SQL / Memorystore系へ行くならPrivate Service Accessが基本
  • PSCはGoogle API系、DB/Cache系、他VPCサービスなどに使える広いprivate接続方式
  • Cloud RunなどserverlessからVPC内へ行く場合はDirect VPC egress / Serverless VPC Access
  • 接続方式は「何と何をつなぐか」だけでなく「どちらがアクセス元か」で決まる

参考

タグ: GCP, クラウド設計, ネットワーク