ローカル上のDBeaverからCloud SQL Auth Proxy経由でCloud SQLに接続してみた

2022.06.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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=XXXXXX@XXXXXX.iam.gserviceaccount.com
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(データアナリティクス)事業本部のナガマサでした。

参考