一度あることは2度あるからしっかりとPCと奮闘メモ日記

日々の実話に基づいて検索してもズバリがなかったものを綴っていきます。

サービスアカウント BigQueryのデータセットだけに権限を付与する

BigQuery

特定のデータセットのみにサービスアカウントでアクセスしたい場合。

公式サイトの説明は少しわかりづらかったのでここでメモします。

データセットへのアクセスの制御  |  BigQuery  |  Google Cloud

 

結論

①データセットの共有→権限で付与

②サービスアカウントにBigQueryジョブユーザー権限を付与

この②が公式ドキュメントでは見落としがち。

 

まず、

データセット情報→共有→権限

サービスアカウントに権限を追加します。

データセットへのアクセスの制御  |  BigQuery  |  Google Cloud

データセットから共有を押す

データセットから共有

 プリンシパルを追加ボタンをおします。

あとは通常のIAMと同じです。

必要な権限をつけてください。

プリンシパルを追加

プリンシパルを追加
これでOKとおもいきや、あれ、以下のエラーがでている

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 

消えました。

めでたしめでたし。