27
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google Compute Engine(GCE)からCloud SQL接続でハマった

Last updated at Posted at 2017-11-15

Google Cloud Platform(以下GCP)のGoogle Compute Engine(以下GCE)からCloud SQLへ接続する場合、Cloud SQL Proxy経由で接続することで以下の恩恵が受けられます。

  • 安全な接続: プロキシは、データベースとの間で送受信されるトラフィックを自動的に暗号化します。クライアントとサーバーの ID の確認には、SSL 証明書が使用されます。
  • 簡単な接続管理: プロキシが Google Cloud SQL との認証を処理するので、静的な IP アドレスを提供する必要がなくなります。

イメージは以下です。
キャプチャ.PNG
https://cloud.google.com/sql/docs/sql-proxy?hl=ja#gce

プロキシの設定も簡単で以下の流れで出来ます。

プロキシをダウンロード.
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64
プロキシの名前を標準のファイル名に変更.
mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy
プロキシを実行可能にする.
chmod +x cloud_sql_proxy

ここまで来たらプロキシを開始します。
言語や環境に応じて、TCPソケットまたはUnixソケットのどちらかを使用してプロキシを開始できます。ここではUnixソケットを利用します。

プロキシソケットを格納するディレクトリを作成.
sudo mkdir /cloudsql; sudo chmod 777 /cloudsql
新しいターミナルウィンドウを開きプロキシを開始.
./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME>

※INSTANCE_CONNECTION_NAMEは自身のCloud SQLのインスタンス接続名です。

実際に上記の流れでプロキシを開始しCloud SQLへ接続を試みると、以下のようなエラーに遭遇しました。
キャプチsssャ.PNG
見にくいですが、内容は以下です。

message.
2017/11/15 17:06:27 errors parsing config:
        googleapi: Error 403: The client is not authorized to make this request., notAuthorized

認証に失敗していることは分かります。
これだけではちょっと・・・ってことでここでかなりハマりましたが、真面目に公式ドキュメントを読んでみたら案外簡単に解決しました。

Cloud SQL に Compute Engine インスタンスから接続している場合、プロキシは Compute Engine インスタンスに関連付けられているサービス アカウントを使用できます。Cloud SQL インスタンスに対する少なくとも Editor 権限がサービス アカウントにある場合、プロキシの認証は成功します。

Compute Engine インスタンスが Cloud SQL インスタンスと同じプロジェクトにある場合、Compute Engine インスタンスのデフォルトのサービス アカウントはプロキシの認証に必要な権限を持っています。2 つのインスタンスが異なるプロジェクトにある場合は、Editor 権限を持つ Cloud SQL インスタンスを含むプロジェクトにサービス アカウントを追加する必要があります。

https://cloud.google.com/sql/docs/sql-proxy?hl=ja#environment

つまり、サービスアカウントをプロジェクトに追加して編集者権限の付与が必要ということのようです。IAMで確認してみると、案の定ユーザが1人いるだけでサービスアカウントがプロジェクトに存在していませんでした。
キャsssssプチャ.PNG

そのため、以下のようにサービスアカウントをプロジェクトに追加して編集者権限を付与し、
キャaaaプチャ.PNG

再度、SSHでコンソールからプロキシを開始しCloud SQLへ接続してみると、うまくいきました。
キャssssプチャ.PNG

2017/11/17 追記
Cloud SQLへの接続はCloud SQL Client (roles/cloudsql.client) というロールがあるので、それでも接続可能です。
https://cloud.google.com/sql/docs/mysql/sql-proxy?hl=en#permissions
キャプチャ.PNG

以上です。

27
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?