はじめに
22年ももう少しで終わりです。昨年もアドベントカレンダーで、SpannerとBQについて簡単な記事を書きました。相変わらずSpannerへの愛はあるのですが、機会に恵まれず。。
さて、今年1年で一番ミスったことをまとめようと思います。
できごと
さぁ、やることが決まったぞ。IAM権限持ってる方にBQの操作権限もらおう!
とりあえずデータは書き込まないでいいから、"BigQuery データ閲覧者"の付与を依頼しよ。
------------------
あれ、、Queryが実行できない。。権限不足、、? いや、参照権限はもらったぞ?
おいおい? バグかなこれは~
はい。これを今年数回やりました。学習能力がありません。
数回目のミスで、「あ、、、またやってしまった。。」と自分で自分を責めてしまいます。
反省しています。自戒の意も込めてこの記事をしたためます。
対応
Queryを実施するためにか下記の権限が必要です。
IAM 事前定義ロール
bigquery.jobUser(Bigqueryジョブユーザー)
#考察
BigQuery データ閲覧者の説明には下記文面が書かれてあります。
テーブルまたはビューからデータとメタデータを読み取る。
これだけ見ると、"データが見える = Queryが実行できる" と勘違いしてしまいがちです。
WEBコンソールでも、プレビューからデータを見ることができます。
また、Google CloudのIAMのポリシーとしては、閲覧者の定義は下記になります。
roles/viewer (閲覧者) :
既存のリソースやデータの表示(ただし変更は不可能)など、状態に影響しない読み取り専用アクションに必要な権限。
いいじゃん。データ見れるんだからQueryさせてよ!という感情が湧いてきます。
ではどう認識して、腹落ちすればハッピーになるのか。
課金からの目線
Bigqueryの製品仕様として、データ処理量によって課金されます。
しかし、Google Cloudの閲覧者のポリシーとしては、"リソースがどういう状態にあるか"の確認をする意が強い側面を感じています。
そのため、BigqueryでQueryが実施できちゃうと、データは見れるんだけど、課金されちゃうよ!という事態になってしまいます。Queryを実施するのはもう、閲覧者以上の行為という位置づけなのだと思います。
データ編集の目線
実はこちらも何度かハマっているのですが、BigQuery データ編集者 を持っていてもQueryは実施できません。
え。。。。
Bigqueryでのデータ編集としての位置づけは、レコードに対してのアクションではなく、テーブルに対してのアクションの位置づけが強いです。
なので、Insert文どころか、Queryでレコードを操作するという概念ではない位置づけと理解しています。
おわりに
案件によってですが、IAM管理者が多忙のため、なかなか捕まらず、権限の付与が遅れてしまうことが多々あります。
そのため、Bigqueryでデータを扱うのなら、ジョブユーザーはほぼ無意識レベルで必要と認識しておきましょう。
そもそも、検証環境があるならそこでしっかりと調査をしてから申請しなさいよと、言うことは重々承知ではありますが、誰かの助けになればと思います。
まだ12月は始まったばかりなので、残りも"権限不足で困らないように"過ごしましょう!