IAM を使用してリソースへのアクセスを制御
このドキュメントでは、リソースの現在のアクセス ポリシーを表示する方法、リソースにアクセス権を付与する方法、そしてリソースへのアクセス権を取り消す方法について説明します。
このドキュメントは、Google Cloud の Identity and Access Management(IAM)システムに精通していることを前提としています。
必要なロール
リソースの IAM ポリシーを変更するために必要な権限を取得するには、プロジェクトに対する BigQuery データオーナー(roles/bigquery.dataOwner
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
この事前定義ロールには、リソースの IAM ポリシーを変更するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
リソースの IAM ポリシーを変更するには、次の権限が必要です。
-
データセットのアクセス ポリシーを取得するには:
bigquery.datasets.get
-
データセットのアクセス ポリシーを設定するには:
bigquery.datasets.update
-
データセットのアクセス ポリシーを取得するには(Google Cloud コンソールのみ):
bigquery.datasets.getIamPolicy
-
データセットのアクセス ポリシーを設定するには(コンソールのみ):
bigquery.datasets.setIamPolicy
-
テーブルまたはビューのポリシーを取得するには:
bigquery.tables.getIamPolicy
-
テーブルまたはビューのポリシーを設定するには:
bigquery.tables.setIamPolicy
-
bq ツールまたは SQL BigQuery ジョブ(省略可)を作成するには:
bigquery.jobs.create
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
リソースのアクセス ポリシーを表示する
以降のセクションでは、さまざまなリソースのアクセス ポリシーを表示する方法について説明します。
データセットのアクセス ポリシーを表示する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。
> [権限] の順にクリックします。
[共有]データセットのアクセス ポリシーが [データセットの権限] ペインに表示されます。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のポリシーを取得して JSON でローカル ファイルに出力するには、Cloud Shell で
bq show
コマンドを使用します。bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: データセットの名前
- PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
API
データセットのアクセス ポリシーを表示するには、定義済みの dataset
リソースを使用して、datasets.get
メソッドを呼び出します。
ポリシーは、返された dataset
リソースの access
プロパティで使用できます。
テーブルまたはビューのアクセス ポリシーを表示する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、テーブルまたはビューを選択します。
[共有] をクリックします。
テーブルまたはビューのアクセス ポリシーが [共有] ペインに表示されます。
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のアクセス ポリシーを取得して JSON でローカル ファイルに出力するには、Cloud Shell で
bq get-iam-policy
コマンドを使用します。bq get-iam-policy \ --table=true \ PROJECT_ID:DATASET.RESOURCE > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: データセットの名前
- RESOURCE: ポリシーを表示するテーブルまたはビューの名前
- PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
API
現在のポリシーを取得するには、tables.getIamPolicy
メソッドを呼び出します。
リソースへのアクセス権を付与する
以降のセクションでは、さまざまなリソースへのアクセス権を付与する方法について説明します。
データセットへのアクセス権を付与する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、共有するデータセットを選択します。
> [権限] の順にクリックします。
[共有][
プリンシパルを追加] をクリックします。[新しいプリンシパル] フィールドに、プリンシパルを入力します。
[ロールを選択] リストで、事前定義ロールまたはカスタムロールを選択します。
[保存] をクリックします。
データセット情報に戻るには、[閉じる] をクリックします。
SQL
プリンシパルにデータセットへのアクセス権を付与するには、GRANT
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
GRANT `ROLE_LIST` ON SCHEMA RESOURCE_NAME TO "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 付与するロールまたはカンマ区切りのロールのリストRESOURCE_NAME
: 権限を付与するリソースの名前USER_LIST
: ロールが付与されているユーザーのカンマ区切りのリスト有効な形式の一覧については、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
次の例では、データセット myDataset
に対するデータ閲覧者のロールを付与します。
GRANT `roles/bigquery.dataViewer`
ON SCHEMA `myProject`.myDataset
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のデータセット情報(アクセス制御を含む)を JSON ファイルに書き込むには、
bq show
コマンドを使用します。bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: データセットの名前
- PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
JSON ファイルの
access
セクションに変更を加えます。specialGroup
エントリ(projectOwners
、projectWriters
、projectReaders
、allAuthenticatedUsers
)はどれも追加できます。また、userByEmail
、groupByEmail
、domain
も追加できます。たとえば、データセットの JSON ファイルの
access
セクションは次のようになります。{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
編集が完了したら、
bq update
コマンドを実行します。その際、--source
フラグを使用して JSON ファイルを指定します。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、PROJECT_ID:DATASET
の形式でプロジェクト ID をデータセット名に追加します。bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
アクセス制御の変更を確認するには、
bq show
コマンドをもう一度使用します。ただし、今回は情報をファイルに書き込む指定を省略します。bq show --format=prettyjson PROJECT_ID:DATASET
Terraform
google_bigquery_dataset_iam
リソースを使用して、データセットへのアクセス権を更新します。
データセットのアクセス制御ポリシーを設定する
次の例では、google_bigquery_dataset_iam_policy
リソースを使用して、mydataset
データセットの IAM ポリシーを設定する方法を示します。これにより、データセットにすでにアタッチされている既存のポリシーが置き換えられます。
# This file sets the IAM policy for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.admin" members = [ "user:hao@altostrat.com", ] } binding { role = "roles/bigquery.dataOwner" members = [ "group:dba@altostrat.com", ] } binding { role = "roles/bigquery.dataEditor" members = [ "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com", ] } } resource "google_bigquery_dataset_iam_policy" "dataset_iam_policy" { dataset_id = google_bigquery_dataset.default.dataset_id policy_data = data.google_iam_policy.iam_policy.policy_data }
データセットのロール メンバーシップを設定する
次の例では、google_bigquery_dataset_iam_binding
リソースを使用して、mydataset
データセットの特定のロールのメンバーシップを設定する方法を示します。これにより、そのロールの既存のメンバーシップがすべて置き換えられます。データセットの IAM ポリシー内の他のロールは保持されます。
# This file sets membership in an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_binding" "dataset_iam_binding" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.jobUser" members = [ "user:raha@altostrat.com", "group:analysts@altostrat.com" ] }
単一のプリンシパルのロール メンバーシップを設定する
次の例は、単一のプリンシパルにロールを付与するために、google_bigquery_dataset_iam_member
リソースを使用して mydataset
データセットの IAM ポリシーを更新する方法を示しています。この IAM ポリシーを更新しても、データセットに対してそのロールが付与されている他のプリンシパルのアクセス権には影響しません。
# This file adds a member to an IAM role for the dataset created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_dataset/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" dataset resource with a dataset_id of "mydataset". resource "google_bigquery_dataset_iam_member" "dataset_iam_member" { dataset_id = google_bigquery_dataset.default.dataset_id role = "roles/bigquery.user" member = "user:yuri@altostrat.com" }
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を行います。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
API
データセットの作成時にアクセス制御を適用するには、定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。アクセス制御を更新するには、datasets.patch
メソッドを呼び出して、Dataset
リソースの access
プロパティを使用します。
datasets.update
メソッドはデータセット リソース全体を置き換えるので、アクセス制御の更新には datasets.patch
メソッドのほうが適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
dataset.access_entries
プロパティに、データセットのアクセス制御を設定します。次に、client.update_dataset()
関数を呼び出してプロパティを更新します。
テーブルまたはビューへのアクセス権を付与する
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、共有するテーブルまたはビューを選択します。
[共有] をクリックします。
[
プリンシパルを追加] をクリックします。[新しいプリンシパル] フィールドに、プリンシパルを入力します。
[ロールを選択] リストで、事前定義ロールまたはカスタムロールを選択します。
[保存] をクリックします。
テーブルまたはビューの詳細に戻るには、[閉じる] をクリックします。
SQL
プリンシパルにテーブルまたはビューへのアクセス権を付与するには、GRANT
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
GRANT `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 付与するロールまたはカンマ区切りのロールのリストRESOURCE_TYPE
: ロールが適用されるリソースのタイプ。サポートされている値には、
TABLE
、VIEW
、MATERIALIZED VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を付与するリソースの名前USER_LIST
: ロールが付与されているユーザーのカンマ区切りのリスト有効な形式の一覧については、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
次の例では、テーブル myTable
に対するデータ閲覧者のロールを付与します。
GRANT `roles/bigquery.dataViewer`
ON TABLE `myProject`.myDataset.myTable
TO "user:raha@example-pet-store.com", "user:sasha@example-pet-store.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のテーブルまたはビューの情報(アクセス制御を含む)を JSON ファイルに書き込むには、
bq get-iam-policy
コマンドを使用します。bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: 更新するテーブルまたはビューを含むデータセットの名前
- TABLE_OR_VIEW: 更新するリソースの名前
- PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
JSON ファイルの
bindings
セクションに変更を加えます。バインディングは、1 つ以上のmembers
(プリンシパル)を 1 つのrole
にバインドします。プリンシパルは、ユーザー アカウント、サービス アカウント、Google グループ、ドメインです。たとえば、テーブルまたはビューの JSON ファイルのbindings
セクションは次のようになります。{ "bindings": [ { "role": "roles/bigquery.dataViewer", "members": [ "user:mike@example.com", "group:admins@example.com", "domain:google.com", "serviceAccount:my-project-id@appspot.gserviceaccount.com" ] }, ], "etag": "BwWWja0YfJA=", "version": 1 }
アクセス ポリシーを更新するには、
bq set-iam-policy
コマンドを使用します。bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
アクセス制御の変更を確認するには、
bq get-iam-policy
コマンド をもう一度入力します。ただし、今回は情報をファイルに書き込む指定を省略します。bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
Terraform
google_bigquery_table_iam
リソースを使用して、テーブルへのアクセス権を更新します。
テーブルのアクセス制御ポリシーを設定する
次の例では、google_bigquery_table_iam_policy
リソースを使用して、mytable
テーブルの IAM ポリシーを設定する方法を示します。これにより、テーブルにすでにアタッチされている既存のポリシーが置き換えられます。
# This file sets the IAM policy for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". data "google_iam_policy" "iam_policy" { binding { role = "roles/bigquery.dataOwner" members = [ "user:raha@altostrat.com", ] } } resource "google_bigquery_table_iam_policy" "table_iam_policy" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id policy_data = data.google_iam_policy.iam_policy.policy_data }
テーブルのロール メンバーシップを設定する
次の例では、google_bigquery_table_iam_binding
リソースを使用して、mytable
テーブルの特定のロールのメンバーシップを設定する方法を示します。これにより、そのロールの既存のメンバーシップがすべて置き換えられます。テーブルの IAM ポリシー内の他のロールは保持されます。
# This file sets membership in an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_binding" "table_iam_binding" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataOwner" members = [ "group:analysts@altostrat.com", ] }
単一のプリンシパルのロール メンバーシップを設定する
次の例は、mytable
テーブルの IAM ポリシーを更新し、1 つのプリンシパルにロールを付与するための、google_bigquery_table_iam_member
リソースの使用方法を示しています。この IAM ポリシーを更新しても、データセットに対してそのロールが付与されている他のプリンシパルのアクセス権には影響しません。
# This file adds a member to an IAM role for the table created by # https://github.com/terraform-google-modules/terraform-docs-samples/blob/main/bigquery/bigquery_create_table/main.tf. # You must place it in the same local directory as that main.tf file, # and you must have already applied that main.tf file to create # the "default" table resource with a table_id of "mytable". resource "google_bigquery_table_iam_member" "table_iam_member" { dataset_id = google_bigquery_table.default.dataset_id table_id = google_bigquery_table.default.table_id role = "roles/bigquery.dataEditor" member = "serviceAccount:bqcx-1234567891011-12a3@gcp-sa-bigquery-condel.iam.gserviceaccount.com" }
Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を行います。
Cloud Shell を準備する
- Cloud Shell を起動します。
-
Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。
このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。
ディレクトリを準備する
Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。
-
Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は
.tf
にする必要があります(例:main.tf
)。このチュートリアルでは、このファイルをmain.tf
とします。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。
新しく作成した
main.tf
にサンプルコードをコピーします。必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。
- 環境に適用するサンプル パラメータを確認し、変更します。
- 変更を保存します。
-
Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行います。
terraform init
最新バージョンの Google プロバイダを使用する場合は、
-upgrade
オプションを使用します。terraform init -upgrade
変更を適用する
-
構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
terraform plan
必要に応じて構成を修正します。
-
次のコマンドを実行します。プロンプトで「
yes
」と入力して、Terraform 構成を適用します。terraform apply
Terraform に「Apply complete!」というメッセージが表示されるまで待ちます。
- Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。
API
- 現在のポリシーを取得するには、
tables.getIamPolicy
メソッドを呼び出します。 ポリシーを編集して、メンバーまたはバインディング、あるいはその両方を追加します。ポリシーに必要な形式については、リファレンスのポリシーのトピックをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
リソースに対するアクセス権の取り消し
以降のセクションでは、さまざまなリソースへのアクセス権を取り消す方法について説明します。
データセットに対するアクセス権の取り消し
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
詳細パネルで、[共有 > 権限] をクリックします。
[データセットの権限] ダイアログで、アクセス権を取り消すプリンシパルを開きます。
[
プリンシパルを削除] をクリックします。[プリンシパルからロールを削除しますか?] ダイアログで、[削除] をクリックします。
データセットの詳細に戻るには、[閉じる] をクリックします。
SQL
プリンシパルからデータセットへのアクセス権を削除するには、REVOKE
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
REVOKE `ROLE_LIST` ON SCHEMA RESOURCE_NAME FROM "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 取り消すロールまたはカンマ区切りのロールのリストRESOURCE_NAME
: 権限を取り消すリソースの名前USER_LIST
: ロールが取り消されるユーザーのカンマ区切りのリスト有効な形式の一覧については、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
次の例では、データセット myDataset
に対する管理者ロールを取り消します。
REVOKE `roles/bigquery.admin`
ON SCHEMA `myProject`.myDataset
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のデータセット情報(アクセス制御を含む)を JSON ファイルに書き込むには、
bq show
コマンドを使用します。bq show \ --format=prettyjson \ PROJECT_ID:DATASET > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: データセットの名前
- PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
JSON ファイルの
access
セクションに変更を加えます。specialGroup
のエントリ(projectOwners
、projectWriters
、projectReaders
、allAuthenticatedUsers
)は削除できます。さらに、userByEmail
、groupByEmail
、domain
の削除もできます。たとえば、データセットの JSON ファイルの
access
セクションは次のようになります。{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
編集が完了したら、
bq update
コマンドを実行します。その際、--source
フラグを使用して JSON ファイルを指定します。データセットがデフォルト プロジェクト以外のプロジェクトにある場合は、PROJECT_ID:DATASET
の形式でプロジェクト ID をデータセット名に追加します。bq update \ --source PATH_TO_FILE \ PROJECT_ID:DATASET
アクセス制御の変更を確認するには、
show
コマンドをもう一度使用します。ただし、今回は情報をファイルに書き込む指定を省略します。bq show --format=prettyjson PROJECT_ID:DATASET
API
アクセス制御を更新するには、Dataset
リソースで datasets.patch
を呼び出して access
プロパティを使用します。
datasets.update
メソッドはデータセット リソース全体を置き換えるので、アクセス制御の更新には datasets.patch
メソッドのほうが適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Go の設定手順を完了してください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Python の設定手順を完了してください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
dataset.access_entries
プロパティに、データセットのアクセス制御を設定します。次に、client.update_dataset()
関数を呼び出してプロパティを更新します。
テーブルまたはビューに対するアクセス権の取り消し
次のオプションのいずれかを選択します。
コンソール
[BigQuery] ページに移動します。
[エクスプローラ] パネルでプロジェクトを開き、テーブルまたはビューを選択します。
詳細パネルで [共有] をクリックします。
[共有] ダイアログで、アクセス権を取り消すプリンシパルを開きます。
[
削除] をクリックします。[プリンシパルからロールを削除しますか?] ダイアログで、[削除] をクリックします。
テーブルまたはビューの詳細に戻るには、[閉じる] をクリックします。
SQL
プリンシパルからテーブルまたはビューへのアクセス権を削除するには、REVOKE
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
REVOKE `ROLE_LIST` ON RESOURCE_TYPE RESOURCE_NAME FROM "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 取り消すロールまたはカンマ区切りのロールのリストRESOURCE_TYPE
: ロールが取り消されるリソースの種類サポートされている値には、
TABLE
、VIEW
、MATERIALIZED VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を取り消すリソースの名前USER_LIST
: ロールが取り消されるユーザーのカンマ区切りのリスト有効な形式の一覧については、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。
次の例では、テーブル myTable
に対する管理者ロールを取り消します。
REVOKE `roles/bigquery.admin`
ON TABLE `myProject`.myDataset.myTable
FROM "group:example-team@example-pet-store.com", "serviceAccount:user@test-project.iam.gserviceaccount.com"
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
既存のテーブルまたはビューの情報(アクセス制御を含む)を JSON ファイルに書き込むには、
bq get-iam-policy
コマンドを使用します。bq get-iam-policy \ PROJECT_ID:DATASET.TABLE_OR_VIEW \ > PATH_TO_FILE
次のように置き換えます。
- PROJECT_ID: プロジェクト ID
- DATASET: 更新するテーブルまたはビューを含むデータセットの名前
- TABLE_OR_VIEW: 更新するリソースの名前
PATH_TO_FILE: ローカルマシン上の JSON ファイルへのパス
JSON ファイルの
access
セクションに変更を加えます。specialGroup
のエントリ(projectOwners
、projectWriters
、projectReaders
、allAuthenticatedUsers
)は削除できます。さらに、userByEmail
、groupByEmail
、domain
の削除もできます。たとえば、テーブルまたはビューの JSON ファイルのaccess
セクションは次のようになります。{ "access": [ { "role": "READER", "specialGroup": "projectReaders" }, { "role": "WRITER", "specialGroup": "projectWriters" }, { "role": "OWNER", "specialGroup": "projectOwners" }, { "role": "READER", "specialGroup": "allAuthenticatedUsers" }, { "role": "READER", "domain": "domain_name" }, { "role": "WRITER", "userByEmail": "user_email" }, { "role": "READER", "groupByEmail": "group_email" } ], ... }
アクセス ポリシーを更新するには、
bq set-iam-policy
コマンドを使用します。bq set-iam-policy PROJECT_ID:DATASET.TABLE_OR_VIEW PATH_TO_FILE
アクセス制御の変更を確認するには、
get-iam-policy
コマンドをもう一度使用します。ただし、今回は情報をファイルに書き込む指定を省略します。bq get-iam-policy --format=prettyjson \ PROJECT_ID:DATASET.TABLE_OR_VIEW
API
- 現在のポリシーを取得するには、
tables.getIamPolicy
メソッドを呼び出します。 ポリシーを編集して、メンバーまたはバインディング、あるいはその両方を削除します。ポリシーに必要な形式については、リファレンスのポリシーのトピックをご覧ください。
tables.setIamPolicy
を呼び出して、更新されたポリシーを書き込みます。注: メンバーのない空のバインドは許可されません。エラーが発生します。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートにある Java の設定手順を完了してください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。
リソースへのアクセスを拒否する
IAM 拒否ポリシーを使用すると、BigQuery リソースへのアクセスにガードレールを設定できます。付与されるロールに関係なく、選択したプリンシパルが特定の権限を使用できないようにする拒否ルールを定義できます。
拒否ポリシーの作成、更新、削除方法については、リソースへのアクセスを拒否するをご覧ください。
特殊なケース
いくつかの BigQuery 権限に IAM 拒否ポリシーを作成する場合は、次のシナリオを検討してください。
承認済みリソース(ビュー、ルーティン、データセット、ストアド プロシージャ)にアクセスすると、オペレーションを実行する直接的な権限がない場合でも、テーブルの作成、削除、操作、テーブルデータの読み取りや変更を行えます。また、基盤となるテーブルでモデルデータまたはメタデータを取得し、他のストアド プロシージャを呼び出すこともできます。この機能は、承認済みリソースに次の権限があることを意味します。
bigquery.tables.get
bigquery.tables.list
bigquery.tables.getData
bigquery.tables.updateData
bigquery.tables.create
bigquery.tables.delete
bigquery.routines.get
bigquery.routines.list
bigquery.datasets.get
bigquery.models.getData
bigquery.models.getMetadata
これらの承認済みリソースへのアクセスを拒否するには、拒否ポリシーを作成するとき
deniedPrincipal
フィールドに次のいずれかの値を追加します。値 ユースケース principalSet://goog/public:all
承認済みリソースを含むすべてのプリンシパルをブロックします。 principalSet://bigquery.googleapis.com/projects/PROJECT_NUMBER/*
指定されたプロジェクト内のすべての BigQuery 承認済みリソースをブロックします。 PROJECT_NUMBER
は、INT64
タイプのプロジェクトに対して自動的に生成される固有識別子です。BigQuery はジョブオーナーのクエリ結果を 24 時間キャッシュに保存します。ジョブオーナーは、データを含むテーブルに対する
bigquery.tables.getData
権限を必要とせずに、キャッシュに保存されたクエリ結果にアクセスできます。したがって、bigquery.tables.getData
権限に IAM 拒否ポリシーを追加しても、キャッシュの有効期限が切れるまで、ジョブオーナーのキャッシュに保存された結果へのアクセスはブロックされません。キャッシュに保存された結果へのジョブオーナーのアクセスをブロックするには、bigquery.jobs.create
権限に対して別の拒否ポリシーを作成します。