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 Manager | VPC外。APIとして呼ぶ |
| Google管理DB/Cache系 | Cloud SQL, Memorystore | VPC外。private接続で使うことが多い |
| Serverlessアプリ系 | Cloud Run, App Engine, Cloud Functions | VPC外。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 service | Private接続対応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内リソース | Internet | Cloud 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
- 接続方式は「何と何をつなぐか」だけでなく「どちらがアクセス元か」で決まる