BigQuery
特定のデータセットのみにサービスアカウントでアクセスしたい場合。
公式サイトの説明は少しわかりづらかったのでここでメモします。
データセットへのアクセスの制御 | BigQuery | Google Cloud
結論
①データセットの共有→権限で付与
②サービスアカウントにBigQueryジョブユーザー権限を付与
この②が公式ドキュメントでは見落としがち。
まず、
データセット情報→共有→権限
サービスアカウントに権限を追加します。
データセットへのアクセスの制御 | BigQuery | Google Cloud
User does not have bigquery.jobs.create permission in project
一応管理者にしたので、bigquery.jobs.create はOKなはずなんだけど。
いきづまったのでもう一度公式サイトのドキュメントを見てみます。
つまり、データセットで権限を付与するだけでは不十分で、
サービスアカウントにBigQueryジョブユーザー権限がないとだめとのことです。
注:じゃなくて、もっとめだつように書いてほしかった。
注: ユーザーがデータセット内のテーブルをクエリできるようにするには、データセットへのアクセス権があるだけでは不十分です。ユーザーには、プロジェクト内でクエリジョブを実行する権限も必要です。プロジェクトからクエリを実行する権限をユーザーに付与する場合は、プロジェクトの bigquery.jobs.create 権限をユーザーに付与します。これを行うには、ユーザーにプロジェクトの roles/bigquery.jobUser ロールを割り当てます。
サービスアカウントにBigQueryジョブユーザーを割り当てる
こちらはIAM画面で割り当てることができます。
以上です。
これで、 User does not have bigquery.jobs.create permission in project
消えました。
めでたしめでたし。