Edited at

BigQueryのアクセス制御で混乱したところメモ

More than 1 year has passed since last update.


作ったばかりのProjectでBigQueryのdatasetが作成できるのはなぜ

背景 : よくわからずdatasetが作成・変更・削除できると怖いので、どんな権限でdatasetが作成できるのか把握したい

GCPでProjectを作成した直後は自身のアカウントが オーナー の役割になっている

GCPのIAM&adminのRolesで権限を確認すると、下記のようにGCPの全権限がある。

スクリーンショット 2018-05-15 12.30.48.png

BigQueryのdatasetどころかなんでもできちゃうので、個人で趣味用途でもなければ権限を絞った作業用アカウントを別途用意したほうが良さそう。


オーナーから外したのにdatasetの変更権限があるんだけど

背景 : オーナー の役割は怖いから管理用のアカウントを別に用意して自分の役割から オーナー をはずしたのにdatasetが消せちゃった……

datasetを作ったとき、作った本人がそのdatasetのオーナーとなる。

これまででてきた オーナー の役割はProjectでの話しだったけど、こちらはdatasetのオーナー。

datasetのアクセス制御を確認するには、下記のメニューのようにShare datasetを選択する。

スクリーンショット 2018-05-15 12.38.43.png

すると、下記のような一覧が表示される。ここでdataset作成者のアカウントで Is owner の項目があるのが確認できる

スクリーンショット 2018-05-15 12.39.37.png

Primitive roles for datasets


table参照できてPreviewもできるのにSELECTのquery実行できないんだけど

背景 : BigQuery閲覧者 の役割でSELECTできると思ったのにできないんですけど

Permissions and rolesを見るとわかるように、jobの実行には下記の役割が必要になる。


  • BigQueryユーザー

  • BigQueryジョブユーザー

  • BigQuery管理者

また、これらの役割だけだとデータの参照・編集権限が無いので、下記のデータに関する権限をもつ役割と組み合わせる必要がある:


  • BigQueryデータ閲覧者

  • BigQueryデータ編集者

  • BigQueryデータオーナー

例えば、BigQueryユーザーBigQueryデータ閲覧者 の両方があれば、そのProjecte内のdatasetに対してSELECTはできるがINSERTなどはできない状態になる、はず。

またdataset単位のACLに設定がある場合はこの限りではない。


BigQueryユーザーの役割ないのにSELECTのquery実行できちゃったんだけど

背景 : 一つ前のやつで BigQuery閲覧者 だけならSELECTできないと思っていたのにできちゃったんだけど

GCPの基本の役割に 閲覧者 というのがあって、これはdatasetのACLの Project Viewers - Can View に相当する。

Primitive roles for datasetsのREADERのところを読むと書いてあるように、この権限だとqueryも投げられる。


BigQueryデータ編集者はdataset削除できる?

背景 : 役割の表をみるとdatasetの作成はできても削除はできないとおもったらできちゃった

他の項目で書いたようにdatasetを作成した当人がdatasetのオーナーとなるので消せるはず。


複数のユーザーに同じ権限を与えたい場合はどうすればいい?

背景 : 同じ仕事をする人にそれぞれ権限をつけたり変更したりするのめんどい

GCPでのIAMはgoogle groupやg suiteのグループに役割を設定できるので、これを使う。

グループを作成し、グループ設定を選択する

を参考にグループを作成すると、グループ用のmail addressが作成されるので、それをIAMの設定画面で設定する。

スクリーンショット 2018-05-15 12.54.42.png

あとはそのグループにメンバーを追加すると、グループで設定している役割をメンバーが持つことができる。


権限は誰が変更できる?

背景 : 参照権限を絞る必要のある個人情報とか含まれてる場合、誰が参照権限をもって誰がその権限を与えることができるか把握しておきたい

権限を変更できるのは以下 :


  • 組織レベルでの役割


    • オーナー

    • Project IAM 管理者



  • Projectレベルでの役割


    • オーナー

    • Project IAM 管理者



  • datasetのACL


    • Is Owner



resourcemanager.projects.setIamPolicy の権限がある役割か、datasetでのオーナーが変更できる

上記の詳細についてはリソース階層を使用したアクセス制御も参照

これらの権限に紐付いているユーザーが権限変更が可能で、下記のような種類がある:


  • 個人のgoogleアカウント

  • Googleグループ

  • service account

  • GSuite

  • Cloud Identity

なので、単にProjectのIAMだけ確認すると見落とす。組織のIAMやdatasetのACLも確認し、service accountを使っている場合はそれが誰が使えるか、グループを使っている場合はメンバーに誰がいてそのグループに誰が招待・追加できるは把握する必要がある

参照できるのは :


  • 組織レベルでの役割


    • 基本の役割


      • 閲覧者

      • 編集者

      • オーナー



    • 事前定義済みの役割


      • BigQuery管理者

      • BigQueryデータ閲覧者

      • BigQueryデータ編集者

      • BigQueryデータオーナー





  • Projectレベルでの役割


    • 組織レベルと同じ



  • datasetのACLで下記に紐付いた対象


    • Can View

    • Can Edit

    • Is Owner



bigquery.tables.getData の権限をもつ役割があるとtableの中のデータが参照できる。

ただしdataset単位で Project Viewer など基本の役割のpresetを消した場合はこの限りではない。

また承認済みビューを使用している場合はそちらも確認する必要がある。


権限変更したのに反映されないんだけど

Cloud IAM リソースにユーザーがアクセスできないようにするにはどうすればよいですか?に書いてあるように、変更まで最大60秒かかるので、IAMを変更したときは少し時間を置いてから動作確認する。


BigQueryジョブユーザーの役割って何に使うの?

背景 : BigQueryユーザーより権限絞ってるみたいだけどユースケースがわからん……

Example scenariosでも出てこないのでわからん……誰か教えて……