web-dev-qa-db-ja.com

ローカルでcloud_sql_proxyでnotAuthorizedエラーを取得する

第2世代のクラウドSQLインスタンスの接続をローカルでセットアップしようとしています。

代理人の呼びかけは

./cloud_sql_proxy -dir=/cloudsql -instances=status-1268:us-central1:status-dev=tcp:3306 & mysql -u status_stg --Host 127.0.0.1

APIセクションからサービスアカウントを正しく設定する方法が少しわからないので、AppEngineのデフォルトのサービスアカウントとComputeEngineのデフォルトのサービスアカウントの両方を試してみました。また、新しい1つのサービスアカウントを作成しました。それらのそれぞれについて、管理権限セクションから編集者と所有者になるようにサービスアカウントIDを割り当てました。おそらく、これらのアカウントに対してCloud SQL Admin APIを有効にする別の方法がありますか?

サービスがDBと通信しようとしたときのプロキシからの出力:

./cloud_sql_proxy -dir=/cloudsql -instances=status-1268:us-central1:status-   dev=tcp:3306 & mysql -u status_stg --Host 127.0.0.1
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)
2016/04/04 11:26:58 Open socket for "status-1268:us-central1:status-dev" at     "127.0.0.1:3306"
2016/04/04 11:26:58 Socket prefix: /cloudsql
2016/04/04 11:27:10 Got a connection for "status-1268:us-central1:status-dev"
2016/04/04 11:27:11 couldn't connect to "status-1268:us-central1:status-dev": googleapi: Error 403: The client is not authorized to make this request., notAuthorized
2016/04/04 11:29:08 Got a connection for "status-1268:us-central1:status-dev"
2016/04/04 11:29:08 couldn't connect to "status-1268:us-central1:status-dev": googleapi: Error 403: The client is not authorized to make this request., notAuthorized

何を探すべきかについての考え?ここでサービスアカウントを構成するための基本的なものが欠けていると思います。

(全体として、私のプロジェクトでは、node.js Expressアプリを実行しており、現在作業中の0.0.0.0で公開しなくても、2番目のgend cloud sql DBインスタンスに接続したいと考えています)

ありがとう

11
georges

接続文字列を再確認してください。認証情報が正常であるように思われるため、インスタンス名にエラーがある可能性があります。

インスタンスのクラウドコンソールページから「インスタンス接続名」をコピーして貼り付けることをお勧めします。

instance details

3
Vadim

TL; DR:エラーログにError during createEphemeral..が含まれている場合は、読み進めてください。

私のために働く解決策は Github Cloud-SQL-Proxy Issue Tracker からです。

同じ名前の古いサービスアカウントがある場合にトリガーされるバックエンドのバグに遭遇した可能性があります。問題を解決するには、以下の手順に従ってください。

  1. Cloud Project IAMページに移動します([左メニュー]> [IAMと管理]> [IAM])
  2. 問題が発生しているロボットアカウントの行を探します。
  3. ロール列に「CloudSQLClient」と表示されているはずです。
  4. それをクリックしてドロップダウンを開きます
  5. チェックされている「CloudSQLClient」ロールをクリックして、チェックを外します。
  6. 上の青い保存ボタンをクリックしてください。
  7. サービスアカウントがIAMページから削除されていることを確認します。
  8. 同じページの上の[追加]ボタンをクリックします。
  9. サービスアカウントのメールアドレスを入力し、CloudSQLクライアントの役割を選択します
  10. [追加]をクリックします
  11. サービスアカウントがリストに再び表示されます。

Chees へのクレジットですが、ポイントは私のものです:P。それがあなたの問題を解決することを願っています。

6
Pei Z

私の場合、問題はサービスアカウントが正しい役割を持っていなかったことでした。少なくともエディターに設定する必要があります。

3
Peter

私の場合、私がした2つの間違いがあります。

  1. クラウドSQLインスタンスに正しいプロジェクトを使用していることを確認してください。

    _$gcloud config set project my-project_

  2. 正しいconnectionNameを使用します。あなたがグーグルのドキュメントに従っている私のようなら、あなたはおそらくあなたのconnectionNameに角括弧を入れることになるでしょう。それらを削除します。

Myname-MBP:Django setoelkahfi$ ./cloud_sql_proxy -instances="[blitzkrig-9f158:us-central1:polls-instance]"=tcp:3306 2018/06/01 04:55:48 Listening on 127.0.0.1:3306 for [blitzkrig-9f158-9f158:us-central1:polls-instance] 2018/06/01 04:55:48 Ready for new connections 2018/06/01 04:56:48 New connection for "[blitzkrig-9f158-9f158:us-central1:polls-instance]" 2018/06/01 04:56:50 couldn't connect to "[blitzkrig-9f158-9f158:us-central1:olls-instance]": ensure that the account has access to "[blitzkrig-9f158-9f158:us-central1:polls-instance]" (and make sure there's no typo in that name). Error during createEphemeral for [blitzkrig-9f158-9f158:us-central1:polls-instance]: googleapi: Error 403: The client is not authorized to make this request., notAuthorized

2
Seto Elkahfi

このようなエラーには多くの理由があります。

解決策は次のとおりです。

1)SQLインスタンスの[概要]タブからインスタンス名をコピーします。 enter image description here

2)cloud sql clientにアクセスできない可能性があります。

ここ はより詳細です。

2
Dens