IAM を使用してリソースへのアクセスを制御する
このドキュメントでは、リソースの現在のアクセス ポリシーを表示する方法、リソースにアクセス権を付与する方法、そしてリソースへのアクセス権を取り消す方法について説明します。
このドキュメントは、Google Cloud の Identity and Access Management(IAM)システムに精通していることを前提としています。
必要なロール
リソースの IAM ポリシーを変更するために必要な権限を取得するには、プロジェクトの BigQuery データオーナー(roles/bigquery.dataOwner
)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。
この事前定義ロールには、リソースの IAM ポリシーを変更するために必要な権限が含まれています。必要な権限を正確に確認するには、[必要な権限] セクションを開いてください。
必要な権限
-
データセットのアクセス ポリシーを取得するには:
bigquery.datasets.get
-
データセットのアクセス ポリシーを設定するには:
bigquery.datasets.update
-
コンソールのみ。データセットのアクセス ポリシーを取得するには:
bigquery.datasets.getIamPolicy
-
コンソールのみ。データセットのアクセス ポリシーを設定するには:
bigquery.datasets.setIamPolicy
-
テーブルまたはビューのポリシーを取得するには:
bigquery.tables.getIamPolicy
-
テーブルまたはビューのポリシーを設定するには:
bigquery.tables.setIamPolicy
-
省略可。
bq
ツールまたは SQL BigQuery ジョブを作成する場合:bigquery.jobs.create
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
リソースのアクセス ポリシーを表示する
以降のセクションでは、さまざまなリソースのアクセス ポリシーを表示する方法について説明します。
データセットのアクセス ポリシーを表示する
次のオプションのいずれかを選択します。
コンソール
BigQuery ページに移動します。
[エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。
> 権限] の順にクリックします。
[共有データセットのアクセス ポリシーが [データセットの権限] ペインに表示されます。
bq
既存のポリシーを取得し、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 resource
を使用して datasets.insert
を呼び出します。アクセス制御を更新するには、datasets.patch
を呼び出し、Dataset
リソースの access
プロパティを使用します。
datasets.update
メソッドはデータセット リソース全体を置き換えます。そのため、アクセス制御の更新には datasets.patch
メソッドの方が適切です。
テーブルまたはビューのアクセス ポリシーを表示する
次のオプションのいずれかを選択します。
コンソール
BigQuery ページに移動します。
[エクスプローラ] ペインでプロジェクトを開き、テーブルまたはビューを選択します。
[共有] をクリックします。
テーブルまたはビューのアクセス ポリシーが [共有] ペインに表示されます。
bq
既存のアクセス ポリシーを取得し、ローカル ファイルに 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 RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 付与するロールまたはカンマ区切りのロールのリストRESOURCE_TYPE
: ロールが適用されるリソースのタイプサポートされている値には、
SCHEMA
(データセットに相当)、TABLE
、VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を付与するリソースの名前USER_LIST
: ロールが付与されるユーザーのカンマ区切りのリスト有効な形式のリストについては、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のデータセット情報(アクセス制御も含む)を 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
API
データセットの作成時にアクセス制御を適用するには、定義済みのデータセット リソースを使用して datasets.insert
メソッドを呼び出します。アクセス制御を更新するには、datasets.patch
メソッドを呼び出して、Dataset
リソースの access
プロパティを使用します。
datasets.update
メソッドはデータセット リソース全体を置き換えるので、アクセス制御の更新には datasets.patch
メソッドのほうが適切です。
Go
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Go の手順に沿って設定を行ってください。詳細については、BigQuery Go API のリファレンス ドキュメントをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
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
: ロールが適用されるリソースのタイプサポートされている値には、
SCHEMA
(データセットに相当)、TABLE
、VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を付与するリソースの名前USER_LIST
: ロールが付与されるユーザーのカンマ区切りのリスト有効な形式のリストについては、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のテーブルまたはビュー情報(アクセス制御を含む)を 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" } ], ... }
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
API
- 現在のポリシーを取得するには、
tables.getIamPolicy
メソッドを呼び出します。 ポリシーを編集してメンバーやバインディングを追加します。 ポリシーに必要な形式については、ポリシー リファレンスのトピックをご覧ください。
Java
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Java の手順に沿って設定を行ってください。詳細については、BigQuery Java API のリファレンス ドキュメントをご覧ください。
リソースに対するアクセス権の取り消し
以降のセクションでは、さまざまなリソースへのアクセス権を取り消す方法について説明します。
データセットに対するアクセス権の取り消し
次のオプションのいずれかを選択します。
コンソール
BigQuery ページに移動します。
[エクスプローラ] パネルでプロジェクトを開いて、データセットを選択します。
詳細パネルで、[共有 > 権限] をクリックします。
[データセットの権限] ダイアログで、アクセス権を取り消すプリンシパルを開きます。
[プリンシパルを削除] をクリックします。
[ロールをプリンシパルから削除しますか?] ダイアログで、[削除] をクリックします。
データセットの詳細に戻るには、[閉じる] をクリックします。
SQL
プリンシパルからデータセットへのアクセスを削除するには、REVOKE
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
REVOKE ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 取り消すロールまたはカンマ区切りのロールのリストRESOURCE_TYPE
: ロールが取り消されるリソースのタイプサポートされている値には、
SCHEMA
(データセットに相当)、TABLE
、VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を取り消すリソースの名前USER_LIST
: ロールが取り消されるユーザーのカンマ区切りのリスト有効な形式のリストについては、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のデータセット情報(アクセス制御も含む)を 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 のリファレンス ドキュメントをご覧ください。
Python
このサンプルを試す前に、クライアント ライブラリを使用した BigQuery クイックスタートの Python の手順に沿って設定を行ってください。詳細については、BigQuery Python API のリファレンス ドキュメントをご覧ください。
dataset.access_entries
プロパティをデータセットのアクセス制御に設定します。次に、client.update_dataset()
関数を呼び出してプロパティを更新します。
テーブルまたはビューに対するアクセス権の取り消し
次のオプションのいずれかを選択します。
コンソール
BigQuery ページに移動します。
[エクスプローラ] パネルでプロジェクトを開き、テーブルまたはビューを選択します。
詳細パネルで [共有] をクリックします。
[共有] ダイアログで、アクセス権を取り消すプリンシパルを開きます。
[
削除] をクリックします。[ロールをプリンシパルから削除しますか?] ダイアログで、[削除] をクリックします。
テーブルまたはビューの詳細に戻るには、[閉じる] をクリックします。
SQL
プリンシパルからテーブルまたはビューへのアクセス権を削除するには、REVOKE
DCL ステートメントを使用します。
Google Cloud コンソールで [BigQuery] ページに移動します。
クエリエディタで次のステートメントを入力します。
REVOKE ROLE_LIST ON RESOURCE_TYPE RESOURCE_NAME TO "USER_LIST"
次のように置き換えます。
ROLE_LIST
: 取り消すロールまたはカンマ区切りのロールのリストRESOURCE_TYPE
: ロールが取り消されるリソースのタイプサポートされている値には、
SCHEMA
(データセットに相当)、TABLE
、VIEW
、EXTERNAL TABLE
があります。RESOURCE_NAME
: 権限を取り消すリソースの名前USER_LIST
: ロールが取り消されるユーザーのカンマ区切りのリスト有効な形式のリストについては、
user_list
をご覧ください。
[
実行] をクリックします。
クエリの実行方法については、インタラクティブ クエリの実行をご覧ください。
bq
既存のテーブルまたはビュー情報(アクセス制御を含む)を 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 のリファレンス ドキュメントをご覧ください。