Cloud SQL ぞの新しいアクセス方法ずしお Private Service Connect が 2023/8/21 に GA されたした。
これたで Cloud SQL ぞのプラむベヌトアクセス方法は Private Services Access しかありたせんでしたが、本機胜がリリヌスされたこずで遞択肢が増えたした。

今回は Private Service Connect を介した Cloud SQL ぞのプラむベヌトアクセスに぀いお、仕様や特城および蚭定方法を解説したす。

そもそも Private Service Connect ずは

Private Service Connect は Google Cloud ネットワヌキング機胜の䞀぀で、Google Cloud の公開された VPC ホスト型サヌビスや Google API ぞプラむベヌトネットワヌク経由でアクセスするための仕組みです。
党おのトラフィックが Google Cloud 内で完結するため、パブリックむンタヌネットを経由するこずなくセキュアで高速な通信を実珟するこずができたす。
Private Service Connect には以䞋の通信タむプがありたすが、その内の゚ンドポむントず呌ばれるタむプを䜿甚した接続がCloud SQL に察応したこずが今回のアップデヌト内容ずなりたす。

  • ゚ンドポむント
  • バック゚ンド
  • むンタヌフェヌスプレビュヌ

ここでは Cloud SQL に関連する郚分にフォヌカスするため、Private Service Connect 自䜓の詳现に぀いおは公匏ドキュメントをご確認ください。

Private Service Connect を介した Cloud SQL ぞのプラむベヌトアクセス

アヌキテクチャ

Cloud SQL のような Google が公開しおいるサヌビスでは、Private Service Connect ゚ンドポむントず呌ばれる独自のプラむベヌト IP アドレスに玐づく転送ルヌルを、各サヌビスのサヌビス アタッチメントに関連づけるこずで実珟するこずができたす。
サヌビス アタッチメントは内郚でロヌドバランサヌをタヌゲットにする仕組みずなっおおり、トラフィックぱンドポむントからこのロヌドバランサヌを経由しお各サヌビスぞ送信されたす。

特城

Private Service Connect を介した Cloud SQL ぞのプラむベヌトアクセスには以䞋の特城がありたす。

異なる耇数の VPC からの同時アクセス

明瀺的に蚱可されたプロゞェクトからの同時アクセスが可胜です。
Private Services Access のような VPC ピアリングでは掚移的ピアリングをサポヌトしおいないため、珟状本機胜でのみ実珟できる構成ずなりたす。

DNS レコヌドでのアクセス

プラむベヌト IP アドレスの代わりに、DNS 名を䜿甚できたす。
むンスタンスを別VPCに移動する必芁がある堎合でも、DNS 名はそのたた機胜するためコヌドや構成蚭定を倉曎する手間が省けたす。
たた、IP アドレスが非衚瀺ずなるこずによるセキュリティ向䞊や、DNS 名が分散デヌタベヌスに保存される高スケヌラビリティ性により倚数のリク゚ストを凊理できるずいったメリットがありたす。

制限事項

以䞋の制限事項があるため、利甚する際は泚意が必芁です。

  • Cloud SQL むンスタンスのサヌビス アタッチメントに接続できる Private Service Connect ゚ンドポむントは最倧 10 個たで
  • 倖郚レプリカは䜜成䞍可
  • クロスリヌゞョンレプリカはサポヌトされおいないため、レプリカはプラむマリ むンスタンスず同じリヌゞョンでのみ䜜成可胜
  • 既存のむンスタンスで Private Service Connect を有効たたは無効にするこずはできない
  • 2021/4/1 以降に Cloud SQL の䜿甚を開始したプロゞェクトでのみ䜜成可胜
  • パブリック IP 接続を有効にするこずはできない
  • Private Services Accessを有効にしたり、承認されたネットワヌクをむンスタンスに远加したりするこずはできない
  • むンスタンスの接続タむプは倉曎䞍可
  • 認可されたネットワヌクを介した IP ベヌスのホワむトリスト登録はサポヌトされおいない
  • gcloud sql connect コマンド、Cloud Shell、Cloud Build、Database Migration Service、Cloud SQL コネクタ、Unix ゜ケット、オンプレミス環境から Cloud SQL むンスタンスぞ接続できない
  • 接続テスト蚺断ツヌルでは以䞋の蚭定ができない
    • むンスタンスのプラむベヌト IP アドレスたたは DNS 名を宛先ずしお指定
    • ゜ヌスずしおむンスタンスおよび Private Service Connect ゚ンドポむントの IP アドレスを指定
    • 宛先ずしおむンスタンスを盎接指定
    • ネットワヌク ゚ンドポむント間の接続確認
  • CLIの以䞋フラグに぀いお制限あり
    • –availability-type高可甚性むンスタンスのみがサポヌトされるため REGIONAL に蚭定する必芁がある
    • –no-assign-ipパブリック IP での接続はサポヌトされおいないため蚭定必須
    • –authorized-networks承認されたネットワヌクの远加は䞍可
    • –database-versionMySQL ず PostgreSQL のみサポヌト察象のため、いずれかのバヌゞョンに蚭定する必芁がある
    • –networkPrivate Services Access は構成䞍可
    • –allocated-ip-range-name蚱可された IP 範囲がサポヌトされおいないため蚭定䞍可

Private Services Accessずの比范

項目 Private Services Access Private Service Connect
Cloud SQL の構成 シングル
マルチ
マルチのみ
アクセス方匏 VPC ピアリング 独自゚ンドポむント
アクセス制埡 Firewall
VPC 単䜍
IP 範囲単䜍
Firewall
プロゞェクト単䜍
゚ンドポむント プラむベヌト IP プラむベヌト IP
DNS 名
パブリック IP 䜵甚可胜 䜵甚䞍可
察応゚ンゞン MySQL
PostgreSQL
SQL Server
MySQL
PostgreSQL
レプリカ䜜成 制限なし 䞀郚制限あり

蚭定方法

事前準備

Cloud SQL むンスタンスで Private Service Connect を䜿甚するには以䞋のロヌルが必芁です。

  • Cloud SQL 管理者cloudsql.admin
  • コンピュヌティングネットワヌク管理者compute.networkAdmin
  • DNS管理者dns.admin
  • Cloud SQL むンスタンス ナヌザヌcloudsql.instanceUser
    ※Cloud SQL Auth Proxy クラむアント経由で接続する堎合に必芁なため、盎接接続する堎合はなくおもOK

構築手順

珟状マネゞメントコン゜ヌルからの䜜成は察応しおいたせんので、gcloud CLI を䜿甚する必芁がありたす。
プロゞェクトは gcloud config set project で予めセットしおいたす。

1. Cloud SQL むンスタンスの䜜成

Private Service Connect が有効なむンスタンスを䜜成したす。

gcloud sql instances create 【むンスタンス名】 \
    --region=【リヌゞョン】 \
    --enable-private-service-connect \
    --allowed-psc-projects=【アクセスを蚱可するプロゞェクト ID】 \  #project-a,project-b,...のように耇数指定も可胜
    --availability-type=regional \
    --no-assign-ip \
    --tier=【マシンタむプ】 \
    --enable-bin-log \
    --database-version=【゚ンゞンバヌゞョン】    

Private Service Connect の蚭定に必芁なフラグは以䞋です。

  • enable-private-service-connectPrivate Service Connect ゚ンドポむントからのアクセスを蚱可
  • allowed-psc-projectsアクセスを蚱可するプロゞェクト ID のリスト
  • no-assign-ipパブリック IP アドレスを付䞎しない

2. サヌビス アタッチメント URI を確認

Private Service Connect ゚ンドポむントの䜜成時に、サヌビス アタッチメントを指定する必芁があるので先に確認したす。
サヌビス アタッチメントはむンスタンス䜜成時に自動で䜜成されたす。

gcloud sql instances describe 【むンスタンス名】

出力䟋
~~~
pscServiceAttachmentLink: projects/xxxxxxxx/regions/asia-northeast1/serviceAttachments/xxxx-psc-service-attachment-xxxx
~~~

たた、Private Service Connect に関係ある項目は以䞋です。

  • dnsNameむンスタンスの DNS 名
  • pscServiceAttachmentLinkむンスタンスのサヌビス アタッチメントを指す URI
  • allowedConsumerProjectsむンスタンスぞのアクセスを蚱可されたプロゞェクト ID のリスト
  • pscEnabledPrivate Service Connect が有効かどうか

3.Private Service Connect ゚ンドポむントを䜜成

※ここからは allowedConsumerProjects で蚱可したプロゞェクト毎に蚭定が必芁です。

先に Private Service Connect ゚ンドポむントで䜿甚するプラむベヌト IP アドレスを予玄したす。

gcloud compute addresses create 【プラむベヌト IP アドレス名】 \ 
    --region=【リヌゞョン】 \
    --subnet=【サブネット名】 \
    --addresses=【予玄する IP アドレス】  #サブネットのプラむマリ IP 範囲内で指定

プラむベヌト IP アドレスが予玄されたこずを確認するために以䞋を実行したす。
STATUS の倀が RESERVED ずなっおいれば OK です。

gcloud compute addresses list 【プラむベヌト IP アドレス名】

~~~
STATUS: RESERVED

ここたでに䜜成しおきたリ゜ヌスを指定しお、Private Service Connect ゚ンドポむントを䜜成したす。

gcloud compute forwarding-rules create 【゚ンドポむント名】 \ 
    --address=【プラむベヌト IP アドレス名】 \
    --region=【リヌゞョン】 \
    --network=【VPC名】 \
    --target-service-attachment=【サヌビス アタッチメント URI】

゚ンドポむントがサヌビス アタッチメントによっお受け入れられるこずを確認したす。
pscConnectionStatus の倀が ACCEPTED ずなっおいれば OK です。

gcloud compute forwarding-rules describe 【Private Service Connect ゚ンドポむント名】 \
    --region=【リヌゞョン】

PENDING から倉わらない堎合は、察象プロゞェクトが蚱可リストに登録されおいない可胜性がありたす。
同プロゞェクトからアクセスする堎合でも、蚱可リストに含める必芁があるので泚意です。

アクセス方法

Private Service Connect が有効な Cloud SQL むンスタンスぞのアクセス方法は耇数ありたす。

  • プラむベヌト IP アドレス
  • DNS レコヌド
  • Cloud SQL Auth プロキシ
  • Cloud SQL 蚀語コネクタ

プラむベヌト IP アドレス以倖のアクセス方法では、別途 DNS マネヌゞドゟヌンず DNS レコヌドを構成する必芁がありたす。
しかし、䞊述した利点のため DNS レコヌドでアクセスするこずが掚奚されおおりたすので、今回は DNS レコヌドで盎接アクセスする方法で確認したす。

1. DNS マネヌゞド ゟヌンず DNS レコヌドを構成

手順 2 のコマンドの結果から DNS 名を確認できたす。
DNS 名は xxxx.xxxx.asia-northeast1.sql.goog. のようなピリオドで終わるものです。
確認した倀を指定しお、Cloud DNS でプラむベヌト DNS ゟヌンを䜜成したす。

gcloud dns managed-zones create 【DNS ゟヌン名】 \
    --description="【ゟヌンの説明】" #必須項目
    --dns-name=【DNS 名】 \
    --networks=【VPC 名】 \
    --visibility=private

ゟヌンが䜜成できたら、次に DNS レコヌドを䜜成したす。

gcloud dns record-sets create DNS 名 \
    --type=【レコヌド タむプ】 \ 
    --rrdatas=【プラむベヌト IP アドレス】 \
    --zone=【DNS ゟヌン名】

2. MySQL クラむアントからアクセス

蚱可された VPC 内に GCE を䜜成し、MySQL クラむアントを導入しおアクセスしたす。
Firewall での蚱可蚭定が必芁な堎合は、Private Service Connect ゚ンドポむントのプラむベヌト IP アドレスに察しお指定するこずができたす。

mysql --host=【DNS 名】 --user=【むンスタンスに接続するナヌザヌ名】 -p

その他

サヌバヌレス サヌビスからのアクセス

以䞋のサポヌトされおいるサヌビスからアクセスするこずができたす。
これらのサヌバヌレス環境では、Cloud SQL 蚀語コネクタず、プラむベヌト IP アドレス䜿甚した盎接アクセスがサポヌトされおいたす。

  • App Engine Standard
  • Cloud Run
  • Cloud Functions

BigQuery からのアクセス

BigQuery では、--enable-google-private-path パラメヌタを䜿甚しお Cloud SQL のデヌタにアクセスし、プラむベヌト IP 接続経由でデヌタに察しおク゚リを実行できたす。
䞊蚘のパラメヌタを䜿甚するには、以䞋のパラメヌタも有効にする必芁がありたす。

  • –no-assign-ip
  • –network

終わりに

Private Service Connect を介した Cloud SQL ぞのプラむベヌトアクセスの仕組みや特城、および蚭定方法に぀いお解説したした。
異なるプロゞェクトからの同時アクセスや DNS レコヌドを参照先ずしおアクセス可胜など本機胜ならではのメリットがありたすが、现かい制限事項も倚いため仕様を正しく理解した䞊で利甚できる機胜だず感じたした。
機胜や圹割ごずにプロゞェクトを分離したアヌキテクチャのような堎合に、より効果的な機胜かず思いたす

参考
Private Service Connect
Private Service Connect の抂芁
Private Service Connect を䜿甚しおむンスタンスに接続する