アクセス制御

概要

BigQuery は Identity and Access Management(IAM)を使用してリソースへのアクセスを管理します。BigQuery で使用可能なリソースは組織、プロジェクト、データセットの 3 種類です。IAM ポリシー階層では、データセットはプロジェクトの子リソースになります。テーブルとビューはデータセットの子リソースで、親データセットから権限を継承します。

リソースへのアクセス権を付与するには、ユーザー、グループ、またはサービス アカウントに 1 つ以上の役割を割り当てます。組織とプロジェクトの役割はジョブの実行またはプロジェクトの管理に関して可能な操作を制御し、データセットの役割はプロジェクト内のデータへのアクセスとその変更に関して可能な操作を制御します。

IAM には、事前定義された役割と基本の役割の 2 種類の役割があります。ある特定のユーザーに事前定義された役割と基本の役割の両方を割り当てると、それぞれの役割の権限を結合したものが付与されます。

権限と役割

事前定義された役割の比較表

BigQuery では次の事前定義された役割を割り当てることができます。

機能 dataViewer dataEditor dataOwner user jobUser admin
プロジェクトの一覧表示 / 取得
テーブルのリスト表示
テーブルデータ / メタデータの取得
テーブルの作成
テーブルの変更 / 削除
データセットの一覧表示 / 取得
新しいデータセットの作成
データセットの変更 / 削除 自分が作成した
データセット
ジョブ / クエリの作成
ジョブの取得 自分が作成した
ジョブ
自分が作成した
ジョブ
すべてのジョブ
ジョブの一覧表示 すべてのジョブ 自分が作成した
ジョブ
すべてのジョブ
ジョブのキャンセル 自分が作成した
ジョブ
自分が作成した
ジョブ
すべてのジョブ
保存したクエリの取得 / 一覧表示
保存したクエリの作成 / 更新 / 削除
転送の取得
転送の作成 / 更新 / 削除

権限

次の表に、BigQuery で使用可能な権限について説明します。

権限 説明
bigquery.jobs.create 新しいジョブを作成します。
bigquery.jobs.list すべてのジョブをリスト表示し、ジョブのメタデータを取得します。*
bigquery.jobs.get ジョブのデータとメタデータを取得します。*
bigquery.jobs.update ジョブをキャンセルします。*
bigquery.datasets.create 新しい空白のデータセットを作成します。
bigquery.datasets.list データセットとデータセットのメタデータをリスト表示します。
bigquery.datasets.delete データセットを削除します。
bigquery.datasets.get データセットに関するメタデータを取得します。
bigquery.datasets.update データセットのメタデータを更新します。
bigquery.tables.create 新しいテーブルを作成します。
bigquery.tables.list テーブルとテーブルのメタデータをリスト表示します。
bigquery.tables.delete テーブルを削除します。
bigquery.tables.get テーブルのメタデータを取得します。
テーブルのデータを取得するには、bigquery.tables.getData が必要です。
bigquery.tables.getData テーブルのデータを取得します。
テーブルのメタデータを取得するには、bigquery.tables.get が必要です。
bigquery.tables.export BigQuery からテーブルのデータをエクスポートします。
bigquery.tables.update テーブルのメタデータを更新します。
テーブルのデータを更新するには、bigquery.tables.updateData が必要です。
bigquery.tables.updateData テーブルのデータを更新します。
テーブルのメタデータを更新するには、bigquery.tables.update が必要です。
bigquery.transfers.get 転送のメタデータを取得します。
bigquery.transfers.update 転送を作成、更新、削除します。
bigquery.savedqueries.create 保存したクエリを作成します。
bigquery.savedqueries.get 保存したクエリのメタデータを取得します。
bigquery.savedqueries.list 保存したクエリの一覧を表示します。
bigquery.savedqueries.update 保存したクエリを更新します。
bigquery.savedqueries.delete 保存したクエリを削除します。

* ジョブを作成すると、ジョブの作成者に、そのジョブの bigquery.jobs.get 権限および bigquery.jobs.update 権限に相当する権限が自動的に付与されます。

メソッドに必要な権限

発信者が各メソッドを呼び出す際に必要となる権限のリストを次の表に示します。

メソッド 必要な権限
datasets.delete bigquery.datasets.delete
ターゲットのデータセットが空白ではない場合は、bigquery.tables.delete も必要です。
datasets.get bigquery.datasets.get
datasets.insert bigquery.datasets.insert
datasets.list bigquery.datasets.list
返されたデータセットに対する権限を確認するためには、bigquery.datasets.get も使用します。
datasets.patch bigquery.datasets.update
datasets.update bigquery.datasets.update
jobs.cancel bigquery.jobs.update
この権限なしで自分のジョブをキャンセルできます。
jobs.get bigquery.jobs.get
この権限なしで自分のジョブを取得できます。
jobs.getQueryResults bigquery.jobs.get
ジョブの結果を取得するには、bigquery.jobs.get 権限を持っているか、ジョブの所有者である必要があります。さらに、ジョブの結果が書き込まれるテーブルの所有者である必要があります。
jobs.insert bigquery.jobs.create(ジョブを開始する場合)
ジョブを完了するには、追加の権限が必要となることがあります。
jobs.list bigquery.jobs.list
jobs.query bigquery.jobs.create(ジョブを開始する場合)
ジョブを完了するには、追加の権限が必要となることがあります。
projects.list resourcemanager.projects.get
tabledata.insertAll bigquery.tables.updateData
tabledata.list bigquery.tables.getData
tables.delete bigquery.tables.delete
tables.get bigquery.tables.get
tables.insert bigquery.tables.create
このメソッドでビューを作成する場合、ビューで参照されるすべてのテーブルに対する bigquery.tables.getData 権限も必要です。
tables.list bigquery.tables.list
tables.patch bigquery.tables.update
tables.update bigquery.tables.update
このメソッドでビューを更新する場合、ビューで参照されるすべてのテーブルに対する bigquery.tables.getData 権限も必要です。このビューがデータセットに対してすでに承認されている場合、このメソッドではテーブルに関連付けられているすべてのデータセットに対する bigquery.datasets.update も必要です。
projects.transferConfigs.create bigquery.transfers.update
projects.transferConfigs.get bigquery.transfers.get
projects.transferConfigs.patch bigquery.transfers.update

役割

次の表に、Google BigQuery API IAM の役割と、各役割に含まれているすべての権限に対応するリストを示します。各権限は、それぞれ特定のリソースタイプを対象としています。

役割 含まれている権限 リソースタイプ
roles/bigquery.dataViewer
resourcemanager.projects.get 組織
resourcemanager.projects.list 組織
bigquery.datasets.list プロジェクト
bigquery.datasets.get データセット
bigquery.tables.list データセット
bigquery.tables.get データセット
bigquery.tables.getData データセット
bigquery.tables.export データセット
roles/bigquery.dataEditor
上記のすべてと次のもの
bigquery.datasets.create プロジェクト
bigquery.tables.create データセット
bigquery.tables.delete データセット
bigquery.tables.update データセット
bigquery.tables.updateData データセット
roles/bigquery.dataOwner
上記のすべてと次のもの
bigquery.datasets.delete プロジェクト
bigquery.datasets.update データセット
roles/bigquery.user
resourcemanager.projects.get 組織
resourcemanager.projects.list 組織
bigquery.jobs.create プロジェクト
bigquery.jobs.list プロジェクト
bigquery.datasets.create プロジェクト
bigquery.datasets.list プロジェクト
bigquery.datasets.get プロジェクト
bigquery.tables.list プロジェクト
bigquery.transfers.get プロジェクト
bigquery.savedqueries.get プロジェクト
bigquery.savedqueries.list プロジェクト
roles/bigquery.jobUser
resourcemanager.projects.get 組織
resourcemanager.projects.list 組織
bigquery.jobs.create プロジェクト
roles/bigquery.admin
他の役割のすべての権限と次のもの
bigquery.jobs.get プロジェクト
bigquery.jobs.update プロジェクト
bigquery.savedqueries.create プロジェクト
bigquery.savedqueries.delete プロジェクト
bigquery.savedqueries.update プロジェクト
bigquery.transfers.update プロジェクト

事前定義された役割の詳細

事前定義された役割の詳細

roles/bigquery.
user

プロジェクト内でジョブ(クエリを含む)を実行する権限。通常、企業に属するほとんどの個人(データ サイエンティストやアナリスト)にはユーザーの役割を与えます。ユーザーの役割は、自分が所有するジョブの列挙、自分が所有するジョブのキャンセル、プロジェクト内のデータセットの列挙ができます。また、プロジェクト内に新しいデータセットを作成することもできます。作成者には新しいデータセットの bigquery.dataOwner の役割が付与されます。

根拠: この役割はプロジェクトで作業する権限をデータアクセスから分離します。これはチームメンバーが複数のプロジェクトのデータを照会する場合に役立ちます。ユーザーがデータソースを探すための手段としてデータセットとテーブルの列挙が許可されています。

リソースタイプ:

  • 組織
  • プロジェクト

roles/bigquery.
jobUser

プロジェクト内でジョブ(クエリを含む)を実行する権限。jobUser 役割は、自分が所有するジョブの列挙とキャンセルを行うことができます。

根拠: この役割はプロジェクトで作業する権限をデータアクセスから分離します。これはチームメンバーが複数のプロジェクトのデータを照会する場合に役立ちます。この役割では、BigQuery データへのアクセスを許可できません。データへのアクセスが必要な場合には、データセット レベルのアクセス制御を付与してください。

リソースタイプ:

  • 組織
  • プロジェクト

roles/bigquery.
dataViewer

データセットに適用した場合、dataViewer には次の権限が与えられます。

  • データセットのメタデータを読み取り、データセット内のテーブルを一覧表示する。
  • データセットのテーブルからデータとメタデータを読み取る。

プロジェクトまたは組織レベルで適用した場合、この役割はプロジェクト内のすべてのデータセットを列挙することもできます。ただし、ジョブを実行するためには追加の役割が必要です。

たとえば、データセットに対する bigquery.dataViewer 権限だけを持ち、その他の権限を持っていないユーザーができることは、データセット内のテーブルを一覧表示することと、get() API を使用してテーブルの内容を読み取ることだけです。追加の権限がなければデータを照会することはできません。

クエリを実行する権限を持たないユーザーの例としては、次のような場合が考えられます。projectA に対する bigquery.user 権限を持ち、projectA:dataset1 と projectB:dataset2 に対する bigquery.dataViewer 権限を持つユーザーは、projectA でこれらのデータセットの一方または両方を使用するクエリを実行できます。

BigQuery ストレージの外部に存在する外部データソースの場合は、これらの非 BigQuery データソースに対する追加の権限が必要となることがあります。

根拠: dataViewer の役割は読み取り専用のデータアクセスを目的とします。dataViewer はデータにアクセスできますが、クエリジョブを発行するためには追加の権限(bigquery.user や bigquery.admin の役割によって付与される権限など)が必要です。dataViewer は料金の発生する操作は実行できません。

リソースタイプ:

  • 組織
  • プロジェクト
  • データセット

roles/bigquery.
dataEditor

データセットに適用した場合、dataEditor には次の権限が与えられます。

  • データセットのメタデータを読み取り、データセット内のテーブルを一覧表示する。
  • データセットのテーブルを作成、更新、取得、削除する。

プロジェクトまたは組織レベルで適用した場合、この役割は新しいデータセットを作成することもできます。

根拠: dataEditor の役割は bigquery.dataViewer にデータセット内のテーブルを作成、更新、削除する権限を追加したものですが、データセット自体の変更は許可されません。

リソースタイプ:

  • 組織
  • プロジェクト
  • データセット

roles/bigquery.
dataOwner

データセットに適用した場合、dataOwner には次の権限が与えられます。

  • データセットを読み取り、更新、削除する。
  • データセットのテーブルを作成、更新、取得、削除する。

プロジェクトまたは組織レベルで適用した場合、この役割は新しいデータセットを作成することもできます。

根拠: dataOwner の役割は bigquery.dataEditor にデータセットを変更および削除する権限を追加したものです。

リソースタイプ:

  • 組織
  • プロジェクト
  • データセット

roles/bigquery.
admin

プロジェクト内のすべてのリソースを管理する権限。プロジェクト内のすべてのデータを管理でき、プロジェクト内で実行されている他のユーザーのジョブもキャンセルできます。

根拠: これは最大の権限が与えられる最上位の役割であり、同僚の分析業務をサポートするスーパーユーザーです。

リソースタイプ:

  • 組織
  • プロジェクト

基本の IAM 役割

基本の IAM 役割は、BigQuery の従来の viewer/editor/owner プロジェクト役割と reader/writer/owner データセット役割に直接対応付けられています。

基本の役割からの移行

従来の承認設定に慣れているユーザーのために、基本の役割を組み合わせたものがプロジェクト レベル権限として公開されています(Reader、Writer、Owner)。

互換性を維持するため、従来のデータセット レベル権限は同等の事前定義された役割に直接対応付けられています。

BigQuery の従来の権限 同等の IAM 役割
プロジェクト - 閲覧可能 基本の役割 - Viewer
プロジェクト - 編集可能 基本の役割 - Editor
プロジェクト - オーナー 基本の役割 - Owner
データセット - 読み取り bigquery.dataViewer
データセット - 書き込み bigquery.dataEditor
データセット - オーナー bigquery.dataOwner

プロジェクトに対する基本の役割

デフォルトでは、プロジェクトへのアクセス権限を付与すると、その中のデータセットにもアクセス権が付与されます。デフォルトのアクセス権限はデータセット単位でオーバーライドできます。プロジェクトの Owner 役割を持つユーザーは、任意のプロジェクト役割を取り消しまたは変更できます。

プロジェクトを作成すると、その作成者に Owner の役割が与えられます。

基本の役割 可能な操作
Viewer
  • プロジェクトでジョブを開始できます。ジョブの種類によっては、データセットの役割が追加で必要になります。
  • すべてのジョブをリスト表示して取得し、プロジェクトに対して開始したジョブを更新できます。
  • 閲覧者が含まれるプロジェクトにデータセットを作成すると、BigQuery によって、新しいデータセット用の定義済みの役割 bigquery.dataViewer がそれらのユーザーに付与されます。
Editor
  • Viewer で可能な操作に加えて、次のことができます。
    • プロジェクトで新しいデータセットを作成できます。
    • 編集者が含まれるプロジェクトにデータセットを作成すると、BigQuery によって、新しいデータセット用の定義済みの役割 bigquery.dataEditor がそれらのユーザーに付与されます。
Owner
  • Editor で可能な操作に加えて、次のことができます。
    • プロジェクトのすべてのデータセットを一覧表示できます。
    • プロジェクトの任意のデータセットを削除できます。
    • プロジェクトで実行されているすべてのジョブ(他のプロジェクト ユーザーによって実行されたジョブを含む)を一覧表示し、それらのジョブを取得できます。
    • データセットを作成すると、BigQuery によって、新しいデータセット用の定義済みの役割 bigquery.dataOwner がすべてのプロジェクト オーナーに付与されます。

プロジェクトに対する基本の役割は Google Cloud Platform Console を使用して付与または取り消します。新しいプロジェクト役割を付与したりプロジェクト役割を取り消したりするには、プロジェクトに対する Owner アクセス権限が必要です。

プロジェクト役割に対するアクセス権限の付与または取り消しを行う方法について詳しくは、プロジェクト メンバーの管理をご覧ください。

データセットに対する基本の役割

データセットに対する基本の役割は、基本の役割からの移行で説明した事前定義された役割と機能的に同等です。

データセット役割を付与できるエンティティ タイプは次のとおりです。

エンティティ タイプ API
単一のユーザー(メールアドレスによって識別) access.userByEmail
Google グループ(メールアドレスによって識別) access.groupByEmail
事前に定義されたユーザーのグループ(すべてのユーザー、データセットを含むプロジェクトに対して同じプロジェクトの役割を持つユーザーのグループなど) access.specialGroup

データセットには次の基本の役割が適用されます。

データセット役割 可能な操作
READER
  • データセットのテーブルの読み取り、クエリ、コピー、エクスポートを行えます。
    • データセットで get を呼び出すことができます。
    • データセットのテーブルで getlist を呼び出すことができます。
    • データセットのテーブルのテーブルデータで list を呼び出すことができます。
WRITER
  • READER で可能な操作に加えて、次の操作が可能です。
    • データセットのデータを編集または追加できます。
      • insertinsertAllupdate、または delete を呼び出すことができます。
      • データセット内のテーブルを、ジョブの読み込み、コピー、クエリの実行先テーブルとして使用できます。
OWNER
  • WRITER で可能な操作に加えて、次の操作が可能です。
    • データセットで update を呼び出すことができます。
    • データセットで delete を呼び出すことができます。

注: データセットには OWNER 役割を持つエンティティが少なくとも 1 つ必要です。OWNER 役割を持つユーザーは自分の OWNER 役割を削除できません。

新しいデータセットを作成すると、デフォルトのデータセット アクセス権限が次のエンティティに追加されます。データセットの作成時に役割を指定すると、デフォルトの値がオーバーライドされます。

エンティティ プロジェクト役割
プロジェクトに対する Viewer アクセス権限を持つすべてのユーザー READER
プロジェクトに対する Editor アクセス権限を持つすべてのユーザー WRITER
プロジェクトに対する Owner アクセス権限を持つすべてのユーザー OWNER

データセット役割の付与または取り消しを行うには、次のいずれかの方法を使用します。

  • BigQuery API で update を使用する
  • ウェブ UI でデータセット名の横のプルダウンをクリックし、[Share dataset] をクリックする

シナリオ例

以下に、全員が AnalystGroup という Google グループに属しているデータ サイエンティストのグループにアクセス権を与える例を示します。

データセットのデータへの読み取り / 書き込みアクセス

CompanyProject というプロジェクトに dataset1 と dataset2 が存在します。AnalystGroup1 は dataset1 のみを扱うデータ サイエンティストのグループで、AnalystGroup2 は dataset2 のみを扱うグループです。データ サイエンティストには各自が扱うデータセットへのアクセスのみを許可し、クエリは実行できないようにします。

データセットへの完全アクセス
データセット CompanyProject:dataset1 AnalystGroup1 を事前定義された役割 bigquery.dataOwner に追加する。
データセット CompanyProject:dataset2 AnalystGroup2 を事前定義された役割 bigquery.dataOwner に追加する。

プロジェクトのデータへの完全アクセス

AnalystGroup は BigQuery を駆使するデータ サイエンティストのグループであり、CompanyProject というプロジェクトにおいて BigQuery の使用に関する全責任を負っています。AnalystGroup はメンバー全員にすべてのデータへの読み取り / 書き込み権限を与えようとしています。組織の他のグループでは、BigQuery 以外の Cloud Platform サービスは使用していますが、BigQuery は誰も使っていません。AnalystGroup は BigQuery 以外の Cloud Platform サービスは使用しません。

プロジェクトのデータへの完全アクセス
プロジェクト CompanyProject AnalystGroup を事前定義された役割 bigquery.admin に追加する。

組織全体にわたる完全アクセス

CompanyA という組織では、Admin1 という名前の特定の人物を全プロジェクトのすべての BigQuery データの管理者にしようとしています。MonitoringServiceAccount は、組織内の全プロジェクトのすべてのテーブルのサイズをモニタリングするサービス アカウントです。

組織全体にわたる完全アクセス
組織 CompanyA
  • Admin1 を事前定義された役割 bigquery.admin に追加する。
  • MonitoringServiceAccount を事前定義された役割 bigquery.dataViewer に追加する。

指定のサイズを超えたテーブルのサイズ縮小と指定の日時以前の古いデータの削除も MonitoringServiceAccount でできるようにする場合は、MonitoringServiceAccount を事前定義された役割 bigquery.user に追加する必要があります。

同じプロジェクトのデータへの読み取りアクセス

AnalystGroup は CompanyProject というプロジェクトで分析サービスを担当しているデータ サイエンティストのグループです。OperationsServiceAccount は、CompanyProject:AppLogs データセットへの一括読み込みジョブによってアプリケーション ログを BigQuery に読み込むサービス アカウントです。AnalystGroup のメンバーにはログの変更は許可しません。

同じプロジェクトのデータへの読み取りアクセス
プロジェクト CompanyProject
  • OperationsServiceAccount を事前定義された役割 bigquery.user に追加する。
  • AnalystGroup を事前定義された役割 bigquery.user に追加する。
データセット CompanyProject:AppLogs

異なるプロジェクトのデータへの読み取りアクセス

AnalystGroup は CompanyProject というプロジェクトで分析サービスを担当しているデータ サイエンティストのグループです。ただし、AnalystGroup が分析するデータは CompanyLogs という別のプロジェクトに存在します。OperationsServiceAccount は、CompanyLogs プロジェクトの各種データセットへの一括読み込みジョブによってアプリケーション ログを BigQuery に読み込むサービス アカウントです。

AnalystGroup は CompanyLogs プロジェクトにおいてデータの読み取りのみが許可されており、同プロジェクトで追加のストレージを作成したり、クエリジョブを実行したりすることはできません。その代わりに、AnalystGroup のメンバーは CompanyAnalytics プロジェクトを使用して業務を行い、出力を CompanyAnalytics プロジェクトに保持します。

異なるプロジェクトのデータへの読み取りアクセス
プロジェクト CompanyLogs
  • OperationsServiceAccount を事前定義された役割 bigquery.admin に追加する。
  • AnalystGroup を事前定義された役割 bigquery.dataViewer に追加する。
プロジェクト CompanyAnalytics
  • AnalystGroup を事前定義された役割 bigquery.user に追加する。

プログラムによる役割の操作

次のメソッドを使用して、データセット レベル、

プロジェクト レベル、組織レベルで事前定義された役割をプログラムによって操作できます。

  • データセットの場合、dataset.insertdataset.updatedataset.patch オペレーションによって、アクセス フィールドから個々のデータセットに対して詳細な役割設定が可能です。

  • プロジェクト レベルと組織レベルの設定の場合、organizations.setIamPolicyprojects.setIamPolicy を使用して、IAM の役割からユーザーおよびサービス アカウントの追加と削除を行います。

フィードバックを送信...