web-dev-qa-db-ja.com

Pythonでサービスアカウントを使用してGoogle Cloudを認証する方法は?

GoogleストレージjsonファイルをBigQueryにアップロードするプロジェクトを作成しようとしています(手動で行われていることを自動化するだけです)。

スクリプトは毎日実行されるため、このために「サービスアカウント」を使用したいと思います。

すべてを読んだ後、私はまだ認証に苦労しているサービスアカウントの使用について見つけることができます。

誰かが私が見逃したものをチェックして指すことができるのだろうか?

これまでにやったことは次のとおりです。

  1. サービスアカウントのJSONキーファイルを作成しました
  2. インストールされたクライアントライブラリ:pip install --upgrade google-cloud-bigquery
  3. https://cloud.google.com/sdk/docs/ に従ってGoogle Cloud SDKをインストールしました
  4. 実行export GOOGLE_APPLICATION_CREDENTIALS=<path_to_service_account_file>キーパスが正しく指定されている

今、次のpythonスクリプトを実行しようとしています:

from google.cloud import bigquery
bigquery_client = bigquery.Client()

私はこのエラーを受け取ります:

google.auth.exceptions.DefaultCredentialsError:資格情報を自動的に決定できませんでした。 GOOGLE_APPLICATION_CREDENTIALSを設定するか、資格情報を明示的に作成してアプリケーションを再実行してください。詳細については、 https://developers.google.com/accounts/docs/application-default-credentials をご覧ください。

pythonとgoogle cloud APIの両方に非常に新しいので、何かを見逃した可能性があります。

上記の手順のどこで/何が間違っていたのかを指摘したり、サービスアカウントを使用してBigqueryで簡単なスクリプトを設定および実行したりするためのダミーの指示を明確にするように指示できると思いますか?

11
user912830823

私は通常、この変数をpythonスクリプト自体に設定します。

import os
from google.cloud.bigquery.client import Client

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path_to_json_file'
bq_client = Client()
22
Willian Fuks

サービスアカウントのアクセス許可に対してよりきめ細かな制御を実装し、それらのいくつか(たとえば、Pub/Sub用、ストレージ用など)を使用する必要があるアプリがある場合は、GOOGLE_APPLICATION_CREDENTIALS各クライアントを作成する前の環境変数。

代わりに、資格情報を個別にロードし、次のように適切なクライアントに渡すことができます。

import json

from google.cloud import storage
from google.oauth2 import service_account

project_id = 'my-test-project'

with open('/path/to/my/service_keys/storage_service.json') as source:
    info = json.load(source)

storage_credentials = service_account.Credentials.from_service_account_info(info)

storage_client = storage.Client(project=project_id, credentials=storage_credentials)

IAMコンソールで、アカウントに必要な操作を実行するための適切なアクセス許可があることを確認してください。ただし、幸いなことに、エラーメッセージは本当に有益です。

9
tarikki

エクスポートを使用して環境変数を設定したのと同じコマンドラインセッションでスクリプトを実行していますか?そうでない場合は、ユーザーまたはシステムに設定することを検討してください(詳細については この質問 を参照してください)。

物事をさらに簡単にし、これらのことを自動的に処理する別のオプションは、 gcloud cli tool を使用することです。 アプリケーションのデフォルト認証情報の仕組みの下にある2番目のオプション here を見ると、使用方法に関する情報を見つけることができます資格情報を管理します(gcloud auth loginおよびgcloud auth application-default login

3

これは古い質問ですが、でnewサービスアカウントを作成する必要があります古いものを使用してください。セキュリティに関する最近のGoogle Cloud Nextプレゼンテーションでは、将来デフォルトのサービスアカウントが存在することを保証する保証はないとし、いつでも削除できる(または利用可能な権限が変更される) )、したがって、あなたのアプリケーションはそれに依存すべきではありません。また、デフォルトのサービスアカウントを使用する場合、認証に潜在的な問題があり、新しいアカウントを作成すると、認証に必要なコントロールが許可される可能性が高くなることがわかりました。

次の11分10秒のYouTubeプレゼンテーションを参照してください。

https://www.youtube.com/watch?v=ZQHoC0cR6Qw

2
Chris Halcrow