ローカル上のDBeaverからCloud SQL Auth Proxy経由でCloud SQLに接続してみた
SQLクライアントツール「DBeaver」から、Cloud SQL Auth Proxy経由でGoogle Cloud SQLに接続する手順をまとめました。
サポートされているDBエンジン全て(MySQL, PostgreSQL, SQL Server)において接続できることを一応確認してみました。
そもそも「DBeaver」とは?については、下記の記事をご参照ください。
バージョン情報
ローカルマシン
$ sw_vers ProductName: Mac OS X ProductVersion: 10.15.7 BuildVersion: 19H524
DBeaver
- Comunity Edition 22.0.5
Cloud SQL
- MySQL : 8.0.26
- PostgreSQL : 14.2
- SQL Server : 2019 Express
Cloud SQL Auth Proxy経由での接続
Cloud SQL Auth Proxyを利用すると、下記などの利点があります。
- データベースとの間で送受信されるトラフィックを自動的に暗号化
- Cloud SQL Auth ProxyがIAM権限を使用して、Cloud SQLとの認証を処理するので静的なIPアドレスを指定する必要がない
詳細については、公式ドキュメントを参照ください。
Google Cloud公式ドキュメントで紹介されている図を引用させていただきます。
上記の構成で、サービスアカウントによる認証で接続してみました。
※今回は「Client Applications」の部分に「DBeaver」を使用するイメージです。
やってみた
インスタンス作成
Google Cloud のコンソール画面から、下記のドキュメントにそって作成してみました。
インスタンスが作成されていることを確認した後に、接続名 (プロジェクト名:リージョン名:インスタンス名)が表示されているので、後続の設定時に指定します。
Cloud SQL Admin API 有効化
こちらから、Cloud SQL Admin API を有効化します。
既に有効化されている場合は、「API が有効です」と表示されていると思います。
サービスアカウント作成
Google Cloudコンソール画面のナビゲーションメニューから、「IAMと管理」->「サービスアカウント」を選択します。
任意の「サービスアカウント名」を指定します。
サービスアカウントに cloudsql.instances.connect
権限を含むロールを付与する必要があります。
事前定義されたCloud SQLのロールは下記があり、今回は「Cloud SQL クライアント」を付与しました。
- Cloud SQL クライアント
- Cloud SQL 編集者
- Cloud SQL 管理者
サービスアカウントが作成されたら、「キー」タブから、鍵を作成します。
キーのタイプは、JSONを選択しました。
下記の通り、サービスアカウントのキー(ファイル)がダウンロードできたら完了です。
Cloud SQL Auth Proxy 設定
Cloud SQL Auth Proxyをインストールします。
インストール時のコマンドは、OS毎に公式ドキュメントで用意されていたので、適宜ご確認ください。
// インストール $ curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64 // 実行権限を付与 $ chmod +x cloud_sql_proxy
Cloud SQL Auth Proxyを起動します。
-instances
に、インスタンス作成後に表示された接続名(プロジェクト名:リージョン名:インスタンス名)を指定します。
-credential_file
に、ダウンロードしたサービスアカウントのキー(ファイル)のパスを指定します。
// mysqlインスタンスに接続する際のCloud SQL Auth Proxy起動時のコマンド $ ./cloud_sql_proxy -instances=XXXXXXXXXX:asia-northeast1:ins-mysql-01:=tcp:3306 -credential_file=/path/XXXXXX.json
正常に起動できたら、下記のようなログが出力されると思います。
$ ./cloud_sql_proxy -instances=XXXXXXXXXX:asia-northeast1:ins-mysql-01:=tcp:3306 -credential_file=XXXXXX.json 2022/06/04 18:42:56 Rlimits for file descriptors set to {Current = 8500, Max = 9223372036854775807} 2022/06/04 18:42:56 using credential file for authentication; [email protected] 2022/06/04 18:42:57 Listening on 127.0.0.1:3306 for XXXXXXXXXX:asia-northeast1:ins-mysql-01: 2022/06/04 18:42:57 Ready for new connections 2022/06/04 18:42:57 Generated RSA key in 97.9112ms
Cloud SQL Admin API が有効になっていない場合は、下記のようなエラーが出力されるようです。
2022/06/05 00:12:48 errors parsing config: googleapi: Error 403: Cloud SQL Admin API has not been used in project XXXXXXXXXXXX before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=XXXXXXXXXXXX then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. Details: [ { "@type": "type.googleapis.com/google.rpc.Help", "links": [ { "description": "Google developers console API activation", "url": "https://console.developers.google.com/apis/api/sqladmin.googleapis.com/overview?project=XXXXXXXXXXXX" } ] }, { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "googleapis.com", "metadata": { "consumer": "projects/XXXXXXXXXXXX", "service": "sqladmin.googleapis.com" }, "reason": "SERVICE_DISABLED" } ] , accessNotConfigured
DBeaver上の接続設定
Cloud SQL Auth Proxyを起動した状態のまま、DBeaverで接続設定をしていきます。
※接続するインスタンス毎に、Cloud SQL Auth Proxyを停止して、インスタンスの接続名/ポートの変更とCloud SQL Auth Proxy再起動を行いました。
MySQL
データソースで「MySQL」を選択します。
Server Host、Portは、下記の通り指定します。
Database、認証のユーザー名・パスワードは適宜指定してください。
接続できました。
PostgreSQL
「PostgreSQL」を選択します。
※「Google Cloud SQL - PostgreSQL」もあったのですが、認証設定が正しく設定できてないせいか接続できなかったため、今回は「PostgreSQL」を使用しました。
MySQL同様の設定で、問題なく接続できました。
Cloud SQL Auth Proxy のログでも、下記が出力されており、問題なく接続できていました。
2022/06/04 23:54:56 Client closed local connection on 127.0.0.1:5432 2022/06/04 23:56:31 New connection for "XXXXXX:asia-northeast1:ins-psql-02:"
SQL Server
「SQL Server」を選択します。
SQL Serverでも問題なく接続できました。
おわりに
普段使っているDBeaverで簡単に接続できることが確認できました。
次はVPC構成のインスタンスに対して、Cloud SQL Auth Proxy経由での接続も試してみたいと思います。
以上、DA(データアナリティクス)事業本部のナガマサでした。