はじめに
AWSからクラウド環境を構築する人は違和感があるかもしれませんが、
Google CloudではCloud SQLをパブリックに構築する状態がデフォルトになっています。
それをプライベートで行う場合はどういった設定になるのか?
それぞれのネットワーク環境での接続も含めて記載できればと思っています。
概要
Cloud SQLはGoogle CloudでのDBのマネージドサービスです。AWSでいうRDSにあたるものです。
設計思想の違いもありますが、例えばAWSのRDSではベストプラクティス上、プライベートサブネットに構築すること機会が多いと思います(Security Hubのマネージドルールにもありました)。
Googleではデフォルトがパブリック接続となっておりますが、もちろんプライベートでの構築も可能ですので、パブリックな場合、どういった設定になるのか、プライベートでも同様にどういった設定になるのか、また接続はどうなるのか、、記載していきます。
構築及び接続の違い
構築(パブリックIP)
以下構築時のGUI画面となりますが、Cloud SQL のインスタンス作成画面のNW設定箇所となりますが、パブリックIPにチェックをすると、パブリックIPが割り当てられます。
また、承認済みネットワークにこのDBに対する接続元含めることで、パブリックIPが付与されます。
単純なSQL接続をパブリックIPに対して行うにあたって、「承認済みにネットワーク」に接続元IPアドレスを記載する必要があります。
なお、Cloud SQL Auth Proxyを利用し、対象に接続するには「補足」にも記載していますが、
追加で準備がございますので、「補足」を参照ください。
補足
承認済みネットワークに対象を含めていない場合でもCloud SQL Auth Proxyを利用して接続することが可能です。
この機能を利用することでIAM権限(IAMユーザだけでなくサービスアカウントも可)を利用した認証が可能となります。仕組みは以下の通りです。
またこれを利用することでパブリックに有りながら暗号化通信且つIAMでの権限を利用したセキュアな通信となります。
なお、それを利用した場合の注意点も以下に記載がございますので、この点を加味して検討が必要となります。
構築(プライベートIP)
以下GUI画面となりますが、関連付けられたネットワーキング箇所にVPCを選択する必要があります。そのVPCとのプライベート接続が可能となります。画像内だと「h-saito-test-vpc」とプライベートサービス接続が設定されます。
なお、スクショ内にもある通り、プライベートサービスアクセスを利用しますので、作業アカウントには、ネットワーク管理権限を付与しておく必要がございます(ない場合スクショの通り「ネットワーク管理権限を持つ担当者に〜」という警告が表示されます)。詳細は以下参照ください。
補足
プライベートサービスアクセスは、そのVPC内ではなく、Google Cloudが管理するNWと対象VPCをPeering(紐付けること)ができ、それを行うことで、マネージドサービスで構築される「Cloud SQL」、「MemoryStore」等のマネージドサービスとプライベート接続を行うことが可能となります。イメージとしては以下のような形です。
プライベートIPを選択しインスタンス作成を進めることで、プライベートサービスアクセスを設定も行うようなウィザードになっていますので、構築時にそこまで意識しなくて良いような状態となっております。
所感
粛々とただ設定内容について記載しましたが、選択肢がいくつかあることがわかるかと思います。
この選択肢がベストということはなく、システム要件に応じた選択が必要になります。
パブリックにあってもCloud SQL Auth Proxyのような推奨されている接続であればOKなのか、プライベートIPアドレスのみで接続できればOKなのか、それとも諸々の事情でただのパブリック接続でなければいけないのか、など、それぞれ要件に応じた接続が必要となるので、その点加味して設計、設定していく必要があり、それらの選択肢の広さを意識しもらえればと思います。