こんにちわ!
今回はCloud SQL Auth Proxyの特徴やメリット、Cloud SQL Auth Proxyを使用してローカルPCからCloud SQLのインスタンスに接続する方法について説明したいと思います。
Cloud SQL Auth Proxyとは
Cloud SQL Auth Proxyは、Cloud SQL側に承認済みネットワークや SSL の構成を必要とせずにセキュアなトンネルでCloud SQLとの接続を可能にするProxyクライアントです。認証にはいくつかの方法が用意されていますが、gcloud CLIの個人アカウント認証を利用することが出来るのでローカル環境に既にCLIがセットアップされていれば手軽にCloud SQLに接続することが出来ます。
特徴とメリット
Cloud SQL Auth Proxyの特徴やメリットをいくつか紹介します
承認済みネットワークの構成が不要
通常、パブリックIPでサービスをインターネットに公開するにはCIDRで特定のIP範囲からの接続許可を設定する「承認済みネットワーク」を構成する必要がありますが、Cloud SQL Auth Proxyは「承認済みネットワーク」を構成することなく外部からの接続を可能とします。※1
これによりパブリックIPへの外部からのアクセスを遮断した状態を保ちつつCloud SQLへの接続が出来ます。
※1Cloud SQLインスタンスにパブリックIPの設定は必要です。
SSLの構成が不要
通常、データベースとの通信をセキュアに保つにためにSSLの構成が必要となりますが、Cloud SQL Auth ProxyはTLS1.3で暗号化されたセキュアなトンネルを通して送受信するので、Cloud SQLインスタンスにSSLを構成する必要がありません。
IAMに基づく権限制御
Cloud SQL Auth ProxyはIAM認証で接続に関する権限をコントロールできるため、手軽に細やかな接続管理が可能です。
固定IPが不要
Cloud SQL Auth Proxyでの接続先の指定はCloud SQLインスタンスの接続名が使用されます。サーバーのIPアドレスを指定する必要がないため、パブリックIPを固定化する必要がありません。「承認済みネットワーク」の構成も必要としないため、接続元においてもIPアドレスの固定化などに気を使う必要がなくなります。
接続の手順
ローカルPCからCloud SQL Auth Proxyを使用してCloud SQLに接続する手順について説明します。
前提
- Cloud SQLのインスタンスが作成済み
- パブリックIPが設定されている(承認済みネットワークは不要)
- データベースユーザーが追加されている(rootユーザでも接続可能だけど一応)
ローカル環境はWindowsやMacOS、Linux等、何でも良いですが、今回筆者はWindows PCからの接続を行いました。また、Windowsに直接Cloud SQL Auth Proxyを稼働させるのではなく、WSL2上のUbuntuで稼働させてみました。
様々なOS向けにインストーラやバイナリが用意されているのでご利用の環境に合わせたものを使用してみてください。インストール手順は違えど機能や使い方は基本的には同じです。
gcloud CLIのインストール
※既にgcloud CLIをインストール済みの方は、Cloud SQL Auth Proxyのインストールに進んでください
Ubuntuにgcloud CLIをインストールするには下記のコマンドを実行します。
Google Cloud 公開鍵をインポートします
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
パッケージソースに配布元URIを追加
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
インストール
sudo apt-get update && sudo apt-get install google-cloud-cli
初期化して利用開始
gcloud init
初期化の過程でOAuth2.0アクセストークン認証のためのURLが表示されるので、ブラウザにURLをコピペして開きます。
(ブラウザ)アカウントを選択してログインします
(ブラウザ)リクエストを許可します
(ブラウザ)認証コードが表示されるのでコピーします
先ほどのコマンドのプロンプトに認証コードをペーストして認証を完了します。
その後は画面の指示に従いデフォルトのプロジェクトやリージョンの指定を行います。
Cloud SQL Auth Proxyのインストール
Cloud SQL Auth Proxyをインストールするには下記のコマンドを実行します。
Cloud SQL Auth Proxy をダウンロード
curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.0/cloud-sql-proxy.linux.amd64
実行権限付与
chmod +x cloud-sql-proxy
※インストールしたcloud-sql-proxyコマンドは必要に応じて任意の場所に移動する等、配置して使用してください。
接続
Cloud SQL Auth Proxy で gcloud CLI 認証情報を使用するには下記のコマンドを実行します。
※前段のgcloud initで行った認証はCLIの為の認証です。今回はプログラムが使用する認証。
認証の実行
gcloud auth application-default login
コマンドを実行するとOAuth2.0認証のためのURLと認証コード入力プロンプトが表示されるので、gcloud initの時と同様の手順で手続きを行います。
認証が完了したらcloud-sql-proxyコマンドでCloud SQL Auth Proxyを実行します。
認証の実行
./cloud-sql-proxy --port 待ち受けポート番号 接続先
待ち受けポート番号に使用する任意の空きポート番号を指定します(例: --port 13306)
待ち受けのホスト名はデフォルトではlocalhost(127.0.0.1)です。
接続先にはCloud SQLの接続名を指定します。接続名はGoogle CloudのコンソールではCloud SQL の「接続」のページで確認出来きます、"プロジェクト名:リージョン:インスタンスID"の形式の値となっています。
(Cloud SQL の接続名)
コマンドが実行されると指定した待ち受けポートでCloud SQLへの接続を行える状態になります。
WSL2でCloud SQL Auth Proxyを実行していると、シェルからmysqlクライアント等で接続が可能なことはもちろん、Windows全体で待ち受けポートが利用可能となっているため任意のWindows用のクライアントソフトからも接続することが出来ます。
mysqlクライアントでの接続例
mysql -h 127.0.0.1 --port=13306 -u ユーザー名 -p
汎用クライアントソフト(A5:SQL mk2)での接続例
まとめ
Cloud SQL Auth Proxyを使用する事で、複雑なネットワーク構成等を必要とせず手軽で安全に外部からCloud SQLインスタンスに接続する事ができました。
今回はgcloud CLIの個人アカウント認証情報で認証を行いましたが、サービスアカウントに紐づく JSON 認証情報ファイルによる認証や、Compute Engine上で利用する場合ではそのインスタンスに設定されたサービスアカウントでの認証もサポートされています。ご利用の環境や用途に合わせて利用してみてください。