GoogleストレージjsonファイルをBigQueryにアップロードするプロジェクトを作成しようとしています(手動で行われていることを自動化するだけです)。
スクリプトは毎日実行されるため、このために「サービスアカウント」を使用したいと思います。
すべてを読んだ後、私はまだ認証に苦労しているサービスアカウントの使用について見つけることができます。
誰かが私が見逃したものをチェックして指すことができるのだろうか?
これまでにやったことは次のとおりです。
pip install --upgrade google-cloud-bigquery
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で簡単なスクリプトを設定および実行したりするためのダミーの指示を明確にするように指示できると思いますか?
私は通常、この変数をpythonスクリプト自体に設定します。
import os
from google.cloud.bigquery.client import Client
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path_to_json_file'
bq_client = Client()
サービスアカウントのアクセス許可に対してよりきめ細かな制御を実装し、それらのいくつか(たとえば、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コンソールで、アカウントに必要な操作を実行するための適切なアクセス許可があることを確認してください。ただし、幸いなことに、エラーメッセージは本当に有益です。
エクスポートを使用して環境変数を設定したのと同じコマンドラインセッションでスクリプトを実行していますか?そうでない場合は、ユーザーまたはシステムに設定することを検討してください(詳細については この質問 を参照してください)。
物事をさらに簡単にし、これらのことを自動的に処理する別のオプションは、 gcloud cli tool を使用することです。 アプリケーションのデフォルト認証情報の仕組みの下にある2番目のオプション here を見ると、使用方法に関する情報を見つけることができます資格情報を管理します(gcloud auth login
およびgcloud auth application-default login
)
これは古い質問ですが、でnewサービスアカウントを作成する必要があります古いものを使用してください。セキュリティに関する最近のGoogle Cloud Nextプレゼンテーションでは、将来デフォルトのサービスアカウントが存在することを保証する保証はないとし、いつでも削除できる(または利用可能な権限が変更される) )、したがって、あなたのアプリケーションはそれに依存すべきではありません。また、デフォルトのサービスアカウントを使用する場合、認証に潜在的な問題があり、新しいアカウントを作成すると、認証に必要なコントロールが許可される可能性が高くなることがわかりました。
次の11分10秒のYouTubeプレゼンテーションを参照してください。