LoginSignup
4
1

More than 1 year has passed since last update.

Google cloud クライアントライブラリでやりがちなサービスアカウントの認証エラー

Posted at

Cloud storageやBigqueryをpythonなどから操作するクライアントライブラリを使用する時に、下記のようなエラーに遭遇しました。

raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

サービスアカウントの認証が原因のようです。そのためサービスアカウントの作成と、それにロール(権限みたいなものを)を与え、認証鍵のjsonファイルを作成します。

クライアントライブラリ使用時はこのjsonファイルを参照することで認証をパスします。

参考)
https://www.monotalk.xyz/blog/python-%E3%81%A6-google-cloud-storage-%E3%81%A8bigquery-%E3%82%92%E4%BD%BF%E3%81%86%E9%81%8E%E7%A8%8B%E3%81%A6%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC/

1. サービスアカウントの作成

https://cloud.google.com/docs/authentication/production?hl=ja を参考に以下の操作を行います。
リンク先の中段「サービス アカウントを作成する」以下の記載通りに作成すれば良いです。

2. 鍵の作成

1.で参照したリンク先の続きの記述を参考にサービスアカウントの鍵(jsonファイル)を作成します。
作成した鍵はクライアントライブラリを実行する環境(ローカルなど)にダウンロードしておきます。

3. サービスアカウントにロールを与える

Google cloud shellの左サイドメニューの「IAMと管理」を選択し下記画面でロールの追加を行います。今回はCloud StorageとBig Queryが使えるように設定します。
image.png

4. 認証方法

shell上から鍵のある場所のpathを環境変数に追加する方法と、pythonから認証するパターンの2つがあります。

4.1 環境変数パターン

shell から以下のように打ちます。

export GOOGLE_APPLICATION_CREDENTIALS="/鍵を置いた場所/[鍵のファイル名].json"

但しこれだとshellを立ち上げるたびに行う必要があります。(おそらく./bash_profileとかに書き込めば毎回打ち込む必要はないんだろうが)

4.2 pythonコード上で行うパターン

big_query_client = bigquery.Client.from_service_account_json(
   '/鍵を置いた場所/[鍵のファイル名].json') 
storage_client  = storage.Client.from_service_account_json(
   '/鍵を置いた場所/[鍵のファイル名].json')

として、それぞれのサービスのクライアントオブジェクトを作成します。

4
1
0

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
4
1