Carpe Diem

備忘録

BigQueryのIAM設定をアーキテクチャから理解する

概要

BigQueryはIAMロールを設定する際にハマる事が多いので、アーキテクチャを理解しておくときちんと権限付与することができます。

BigQueryのアーキテクチャ

BigQueryのアーキテクチャは以下のように

  • ストレージ
  • コンピュート

の大きく2つに分かれています。

ref: An overview of BigQuery's architecture and how to quickly get started | Google Cloud Blog

そのため権限もこの2つを意識して設定する必要があります。

権限設定

BigQueryの事前定義ロールは以下にまとまっています。

https://cloud.google.com/iam/docs/understanding-roles?hl=ja#bigquery-roles

その中でよく使うのは以下でしょう。

ロール 何ができる 対象リソース
BigQuery ジョブユーザー
(roles/bigquery.jobUser)
クエリなどジョブを実行する権限 コンピュート
BigQuery データ閲覧者
(roles/bigquery.dataViewer)
データセットに対する読み取り権限 ストレージ
BigQuery データ編集者
(roles/bigquery.dataEditor)
データセットに対する書き込み権限 ストレージ

通常の使い方

BigQueryに溜めたデータをクエリで分析したい用途の場合です。

  1. ストレージからデータセットを読み込んで
  2. コンピュートで分析したい

ので、roles/bigquery.dataViewerroles/bigquery.jobUserそれぞれの権限が必要です。

よくある間違い

よくある間違いとしては片方のみ権限を付与する場合です。

roles/bigquery.dataViewerだけだと分析(コンピュート)できないですし、

roles/bigquery.jobUserだけではそもそもデータにアクセスできません。

BigQueryにデータを保存したい場合

例えばCloud LoggingのデータをBigQueryに保存したいようなケースでは、単にストレージへの書き込み権限があればいいのでroles/bigquery.dataEditorだけで済みます。

アーキテクチャを理解していないとついついroles/bigquery.jobUserもつけちゃいがちですが、本来は不要です。

他プロジェクト連携する場合

次は他社・他プロジェクトと連携する場合です。

BigQueryのようにビッグデータを扱うサービスはデータを外部から受け取って分析したり、逆に自分たちのデータを専門の分析チームに分析してもらうケースがあります。

自社がデータを持ち、他社で処理する場合

自社のデータを他社に連携する場合は、自社(Project A)のデータセットに対するroles/bigquery.dataViewerを他社に付与します。

ポイントはあくまでコンピュート権限は他社(Project B)自身のものを使ってもらう点です。

よくある間違い

よくある間違いとしては、ストレージのアクセス権限だけでなくコンピュート権限roles/bigquery.jobUserも付与してしまうことです。

こうすると他社(ProjectB)のデータも自社(ProjectA)のBigQueryで分析できてしまうので、分析にかかるお金もProjectA側になってしまいます。

ProjectB側に悪意がなくとも、オペミスなどでProjectA側のコンピュートを利用してしまう可能性はあるので付与しないよう気をつけましょう。

他社がデータを持ち、自社で処理する場合

他社(ProjectB)のデータセットに対するアクセス権限を付与してもらい、コンピュート権限は自社(ProjectA)のものを付与しましょう。

まとめ

BigQueryのアーキテクチャを理解することで、困りがちな権限設定もすんなり理解することができました。

参考