概要

Google Cloudのデータ ウェアハウスであるBigQueryのデータセットのアクセス制御を行う2つの方法について解説します。

  • データセット自体が持っているアクセス制御機能を利用する方法
  • IAM Conditionsを利用して、データセットのアクセス制御を行う方法

また、2つの設定の使い分け方法やそれぞれを利用する際の注意点、両方設定した場合はどちらが優先されるのかなど記載します。

データセット自体が持っているアクセス制御機能を利用する方法

  1. アクセス権を付与したいデータセットを選択し、共有メニューから「権限」を選択します。
  2. 「プリンシパルを追加」ボタンを押下します。
  3. 対象のプリンシパルを入力し、割り当てたいロールを選択します。

  4. 「保存」ボタンを押下し、設定を保存すると、対象のデータセットへのアクセス権が付与されます。

IAM Conditionsを利用して、データセットのアクセス制御を行う方法

  1. 対象プロジェクトのタグとタグの値を作成する
  2. アクセス制御対象のデータセットにタグを追加する


  3. IAM設定画面から対象のプリンシパルを選択し、編集画面表示後、「IAMの条件を追加」ボタンを押下する。
  4. 条件タイプにタグを選択し、先ほど作成したタグの値を設定し、保存すると、タグを設定したデータセットへのアクセス権が付与されます。

使い分け方法

データセット自体が持っているアクセス制御機能を利用する方法

データセットだけではなく、テーブルレベルとビューレベルでアクセスを制御することが可能なので、機密データを含むテーブルを除外してアクセスさせるなどの、柔軟な設定が可能となります。

IAM Conditionsを利用して、データセットのアクセス制御を行う方法

データセットにタグを追加すれば、簡単に同じアクセス権限を付与することが可能となりますので、複数のデータセットにアクセス権限をまとめて付与したい場合などに適しています。

また、アクセスの有効期限などの条件も設定することが可能なので、一時的にアクセス権限を付与したいケースにも対応できます。

利用する際の注意点

データセット自体が持っているアクセス制御機能を利用する方法

データセットへのアクセスを制御するには、次の IAM 権限が必要です。
権限がないと、「プリンシパルを追加」ボタンが表示されません。

bigquery.datasets.update
bigquery.datasets.get
bigquery.datasets.getIamPolicy(Google Cloud Console を使用してデータセットへのアクセスを制御できます)
bigquery.datasets.setIamPolicy(Google Cloud Console を使用してデータセットへのアクセスを制御できます)

また、ユーザーがデータセット内のテーブルをクエリできるようにするには、プロジェクト内でクエリジョブを実行する、プロジェクトの bigquery.jobs.create権限をユーザーに付与する必要があります。

IAM Conditionsを利用して、データセットのアクセス制御を行う方法

指定したタグのデータセットにアクセス権限を付与するので、タグを誤って指定すると、指定したタグを追加しているデータセット全てにアクセスできてしまいます。

また、対象のデータセットにタグをつけ忘れると、アクセス権限が付与されず、アクセスできないので、タグを追加する際は注意が必要です。

両方設定した場合はどちらが優先されるのか

調査及び検証してみましたが、どちらかの設定が特に優先されるということはありませんでした。
下記パターンでは、どちらの場合もデータセットはBigQuery管理者の操作が可能でした。

パターン1
データセット自体の制御機能:BigQuery閲覧権限
IAM Conditions:BigQuery管理者

パターン2
データセット自体の制御機能:BigQuery閲覧権限
IAM Conditions:BigQuery管理者

基本的に、ロールを割り当てた場合、各ロールに割り当てられた権限を対象のデータセットに全て適用します。

また、禁止ポリシーに該当すれば、許可ポリシーによらず禁止となるルールです。
どちらかの設定が特に優先されるのではなく、設定する内容により、適用される権限が決まります。

両方設定する必要はあまり感じませんでした。