403 POST https:// bigquery.googleapis.com/bigquery/v2/projects/{project-name}/jobs?prettyPrint=false: Access Denied: Project {project-name}: User does not have bigquery.jobs.create permission in project {project-name}.
Location: US
Job ID:
このエラーはBigQueryでよく出る典型的なIAM権限エラーだそうです。
公開データセット(bigquery-public-data)を読み込もうとしているが
BigQueryのジョブ(クエリ)を自分のプロジェクト上で実行する権限が不足している。
BigQueryはどのプロジェクトで実行するか決める必要があり、
そのプロジェクトで最低でもbigquery.jobs.createの権限が必要である。
なんでこのエラーが発生したか?
GoogleColabでjsonキーの設定前
・以下のコードを用いて、Colabは自動的にGoogleアカウント認証情報を使って、BigQueryにアクセスしている。
from google.colab import auth
auth.authenticate_user()
GoogleColabでjsonキーの設定後
・「.jsonキ」ーを使って、指定したサービスアカウントの権限でBigQueryにしようとすると、上記のエラーが発生する。
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/content/bigdataset.json"
理由:使っているサービスアカウントにBigQueryのジョブ実行権限がないため、拒否される。
解決策:
方法①:使用しているサービスアカウントに権限をつける。
GCPコンソールから、そのサービスアカウント(bigdataset.json)に以下付与する。
・BigQuery User (roles/bigquery.user)
・BigQuery Job User (roles/bigquery.jobUser)
手順:
1)GCPの画面には、IAMと管理 > サービスアカウント
2)サービスアカウントの右端に︙を押して、「権限を管理する」を選ぶ
3)「アクセスを管理する」を押す
4)「ロールを追加する」を押してから、以下の二つのロールを選ぶ。
・BigQuery ユーザー
・BigQuery ジョブユーザー
上記の手順に従って、GoogleColabでQueryを実行できるようになる。
方法②:Google CloudShellで以下のコマンドを実行する(例)
gcloud projects add-iam-policy-binding {project-name} \
--member="serviceAccount:{project-name}-xxxx@gserviceaccount.com" \
--role="roles/bigquery.user"
gcloud projects add-iam-policy-binding {project-name} \
--member="serviceAccount:{project-name}-xxxx@gserviceaccount.com" \
--role="roles/bigquery.jobUser"