テーブル、ビュー、データセットにタグを付ける

このドキュメントでは、タグを使用して Identity and Access Management(IAM)ポリシーを BigQuery テーブル、ビュー、データセットに条件付きで適用する方法について説明します。

タグは、テーブル、ビュー、データセットに直接適用できる Key-Value ペア、またはテーブル、ビュー、データセットが他の Google Cloud リソースから継承できる Key-Value ペアです。リソースに特定のタグが付加されているかどうかに基づいて、条件付きでポリシーを適用できます。たとえば、environment:dev タグの付いた任意のデータセットのプリンシパルに、BigQuery データ閲覧者のロールを条件付きで付与できます。

Google Cloud リソース階層全体でタグを使用する方法については、タグの概要をご覧ください。

まだ存在しないリソースを含め、関連する多くの BigQuery リソースに権限を同時に付与する場合は、IAM Conditions の使用を検討してください。

始める前に

このドキュメントの各タスクを実行するために必要な権限をユーザーに付与する IAM ロールを付与する必要があります。また、リソースに適用するタグキーとタグ値を作成する必要があります。

必要な権限

BigQuery でタグを使用するには、次の権限が必要です。

  • タグをテーブルまたはビューに適用するには、テーブルまたはビューに対する bigquery.tables.createTagBinding IAM 権限と、添付するタグ値に対するプロジェクト レベルの resourcemanager.tagValueBindings.create 権限が必要です。
  • タグをデータセットに適用するには、データセットに対する bigquery.datasets.createTagBinding IAM 権限と、添付するタグ値に対するプロジェクト レベルの resourcemanager.tagValueBindings.create 権限が必要です。
  • テーブルまたはビューからタグを削除するには、テーブルまたはビューに対する bigquery.tables.deleteTagBinding IAM 権限と、削除するタグ値に対するプロジェクト レベルの resourcemanager.tagValueBindings.delete 権限が必要です。
  • タグをデータセットから削除するには、データセットに対する bigquery.datasets.deleteTagBinding IAM 権限と、削除するタグ値に対するプロジェクト レベルの resourcemanager.tagValueBindings.delete 権限が必要です。
  • テーブル、ビュー、データセットの [詳細を編集] パネルで、親組織またはプロジェクトに関連付けられているタグキーを一覧表示するには、タグキーの親レベルの resourcemanager.tagKeys.list 権限と、各タグキーの resourcemanager.tagKeys.get 権限が必要になります。
  • テーブル、ビュー、データセットの [詳細を編集] パネルで、親組織またはプロジェクトに関連付けられているキーのタグ値を一覧表示するには、タグの親レベルの resourcemanager.tagValues.list 権限および各タグ値の resourcemanager.tagValues.get 権限が必要です。

Cloud Resource Manager API または gcloud でタグを使用している場合は、次の権限も必要です。

  • Cloud Resource Manager API または gcloud CLI を使用してテーブルまたはビューに適用されているタグを一覧取得するには、bigquery.tables.listTagBindings IAM 権限が必要です。
  • テーブルまたはビューの有効なタグを一覧表示するには、bigquery.tables.listEffectiveTags IAM 権限が必要です。
  • Cloud Resource Manager API または gcloud CLI を使用してデータセットに適用されているタグを一覧取得するには、bigquery.datasets.listTagBindings IAM 権限が必要です。
  • データセットの有効なタグを一覧取得するには、bigquery.datasets.listEffectiveTags IAM 権限が必要です。

次の IAM 事前定義ロールには、必要な BigQuery の権限がすべて含まれています。

  • BigQuery データオーナー(roles/bigquery.dataOwner
  • BigQuery 管理者(roles/bigquery.admin

リソース マネージャーの権限は、タグのユーザー ロール(roles/resourcemanager.tagUser)に含まれています。

タグを使用すると、IAM ポリシーで BigQuery テーブル、ビュー、データセットに対して、条件付きでアクセスを拒否することもできます(プレビュー)。詳細については、拒否ポリシーをご覧ください。

タグキーとタグ値を作成する

タグを適用する前に、タグを作成してその値を構成する必要があります。タグキーとタグ値を作成するには、タグの作成タグ値の追加をご覧ください。

テーブルにタグを付ける

以降のセクションでは、新しいテーブルと既存のテーブルにタグを適用する方法、テーブルに適用されているタグを一覧取得する方法、テーブルからタグを削除する方法について説明します。

新しいテーブルの作成時にタグを適用する

タグを作成したら、新しいテーブルに適用できます。任意のタグキーのテーブルに適用できるタグ値は 1 つのみです。テーブルに適用できるタグは最大 50 個までです。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開き、データセットを選択します。

  3. [データセット情報] セクションで、[テーブルを作成] をクリックします。

  4. 新しいテーブルの情報を入力します。詳細については、テーブルの作成と使用をご覧ください。

  5. [タグ] セクションで、新しいテーブルに追加するタグを選択します。

  6. [テーブルを作成] をクリックします。

bq

--add_tags フラグを指定して bq mk --table コマンドを使用します。

bq mk --table \
    --schema=SCHEMA \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

次のように置き換えます。

  • SCHEMA: インライン スキーマの定義
  • TAG: 新しいテーブルに付加するタグ。複数のタグを指定する場合はカンマで区切ります。例: 556741164180/env:prod,myProject/department:sales。各タグには、名前空間付きのキー名と値の略称が必要です。
  • PROJECT_ID: テーブルを作成するプロジェクトの ID。
  • DATASET_ID: テーブルを作成するデータセットの ID。
  • TABLE_ID: 作成する新しいテーブルの ID。

Terraform

google_bigquery_table リソースを使用します。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

次の例では、mytable という名前のテーブルを作成し、resource_tags フィールドに値を入力してタグを適用します。


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env3"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department3"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "MyDataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days
}

# Create a table
resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "mytable"
  description         = "table description"
  deletion_protection = false # set to "true" in production

  # Attach tags to the table
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
    terraform init

    必要に応じて、最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

API

定義済みのテーブル リソースを使用して tables.insert メソッドを呼び出し、resource_tags フィールドにタグを含めます。

既存のテーブルにタグを適用する

タグを作成したら、既存のテーブルに適用できます。任意のタグキーのテーブルに適用できるタグ値は 1 つのみです。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。

  3. [詳細] タブで、 [詳細を編集] をクリックします。

  4. [タグ] セクションで、テーブルに追加するタグを選択します。

  5. [保存] をクリックします。

bq

--add_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID.TABLE_ID

次のように置き換えます。

  • TAG: テーブルに付加するタグ。複数のタグを指定する場合はカンマで区切ります。例: 556741164180/env:prod,myProject/department:sales。各タグには、名前空間付きのキー名と値の略称が必要です。
  • PROJECT_ID: テーブルを含むプロジェクトの ID。
  • DATASET_ID: テーブルを含むデータセットの ID。
  • TABLE_ID: 更新するテーブルの ID。

gcloud

コマンドラインを使用してテーブルにタグを適用するには、gcloud resource-manager tags bindings create コマンドを使用してタグ バインディング リソースを作成します。

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • TAGVALUE_NAME: 適用するタグ値の永続 ID または名前空間付きの名前(tagValues/45678901231234567/my_tag_key/my_tag_value など)。
  • RESOURCE_ID: リソースのタイプを識別するための API ドメイン名(//bigquery.googleapis.com/)を含む、テーブルの完全な ID。例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table
  • LOCATION: テーブルのロケーション

Terraform

テーブルの resource_tags フィールドにタグを追加し、google_bigquery_table リソースを使用して更新後の構成を適用します。詳細については、新しいテーブルの作成時にタグを適用するの Terraform の例をご覧ください。

API

定義済みのテーブル リソースを使用して tables.update メソッドを呼び出し、resource_tags フィールドにタグを含めます。

テーブルに適用されたタグを一覧取得する

テーブルに直接適用されているタグを一覧取得できます。このプロセスでは、親リソースから継承されたタグは一覧取得されません。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。

    タグは [詳細] タブに表示されます。

bq

bq show コマンドを使用して、tags 列を探します。テーブルにタグがない場合、tags 列は表示されません。

bq show \
    PROJECT_ID:DATASET_ID.TABLE_ID

次のように置き換えます。

  • PROJECT_ID: テーブルを含むプロジェクトの ID。
  • DATASET_ID: テーブルを含むデータセットの ID。
  • TABLE_ID: テーブルの ID。

gcloud

リソースに付加されたタグ バインディングのリストを取得するには、gcloud resource-manager tags bindings listコマンドを使用します。

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • RESOURCE_ID: リソースのタイプを識別する API ドメイン名(//bigquery.googleapis.com/)を含む、テーブルの完全な ID。例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table

  • LOCATION: データセットのロケーション

出力は次のようになります。

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

terraform state show コマンドを使用して、resource_tags フィールドを含むテーブルの属性を一覧取得します。このコマンドは、テーブルの Terraform 構成ファイルが実行されたディレクトリで実行します。

terraform state show google_bigquery_table.default

API

定義済みのテーブル リソースを使用して tables.get メソッドを呼び出し、resource_tags フィールドを探します。

ビュー

INFORMATION_SCHEMA.TABLE_OPTIONS ビューを使用します。

たとえば、次のクエリは、データセット内のすべてのテーブルに適用されているすべてのタグを示します。このクエリは、schema_name(データセット名)、option_name(常に 'tags')、object_type(常に ARRAY<STRUCT<STRING, STRING>>)、option_value を含む列があるテーブルを返します。これには、各データセットに関連付けられたタグを表す STRUCT オブジェクトの配列が含まれます。タグが割り当てられていないテーブルの場合、option_value 列は空の配列を返します。

SELECT * from DATASET_ID.INFORMATION_SCHEMA.TABLE_OPTIONS
WHERE option_name='tags'

DATASET_ID は、テーブルを含むデータセットの ID に置き換えます。

テーブルからタグの適用を解除する

テーブルからタグの関連付けを削除するには、タグ バインディングを削除します。タグを削除する必要がある場合は、まずタグの適用を解除する必要があります。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインで、プロジェクトとデータセットを開いて、テーブルを選択します。

  3. [詳細] タブで、 [詳細を編集] をクリックします。

  4. [タグ] セクションで、テーブルから切断するタグを削除します。

  5. [保存] をクリックします。

bq

テーブルから一部のタグを削除するには、--remove_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --remove_tags=TAG_KEYS \
    PROJECT_ID:DATASET_ID.TABLE_ID

次のように置き換えます。

  • TAG_KEYS: テーブルから切断するタグキー。カンマで区切ります。例: 556741164180/env,myProject/department。各タグキーには名前空間付きのキー名が必要です。
  • PROJECT_ID: テーブルを含むプロジェクトの ID。
  • DATASET_ID: テーブルを含むデータセットの ID。
  • TABLE_ID: 更新するテーブルの ID。

テーブルからすべてのタグを削除するには、--clear_all_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --clear_all_tags \
    PROJECT_ID:DATASET_ID.TABLE_ID

gcloud

コマンドラインを使用してテーブルからタグの関連付けを削除するには、gcloud resource-manager tags bindings delete コマンドを使用してタグ バインディングを削除します。

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • TAGVALUE_NAME: 削除するタグ値の永続 ID または名前空間付きの名前(tagValues/45678901231234567/my_tag_key/my_tag_value など)。
  • RESOURCE_ID: リソースのタイプを識別する API ドメイン名(//bigquery.googleapis.com/)を含む、テーブルの完全な ID。例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset/my_table
  • LOCATION: データセットのロケーション

Terraform

テーブルの resource_tags フィールドからタグを削除し、google_bigquery_table リソースを使用して更新後の構成を適用します。

API

定義済みのテーブル リソースを使用して tables.update メソッドを呼び出し、resource_tags フィールドのタグを削除します。すべてのタグを削除するには、resource_tags フィールドを削除します。

データセットにタグを付ける

以降のセクションでは、新しいデータセットと既存のデータセットにタグを適用する方法、データセットに適用されたタグを一覧取得する方法、データセットからタグを削除する方法について説明します。

新しいデータセットの作成時にタグを適用する

タグを作成したら、新しい BigQuery データセットに適用できます。任意のタグキーのデータセットに適用できるタグ値は 1 つのみです。データセットに適用できるタグは最大 50 個までです。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインで、データセットを作成するプロジェクトを選択します。

  3. [アクションを表示] > [データセットを作成] をクリックします。

  4. [タグ] メニューで [スコープの選択] をクリックします。

  5. タグのスコープを選択します。

  6. データセットに追加するタグを選択して追加します。

  7. [データセットを作成] をクリックします。

bq

--add_tags フラグを指定して bq mk --dataset コマンドを使用します。

bq mk --dataset \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

次のように置き換えます。

  • TAG: 新しいデータセットに適用するタグ。複数のタグを指定する場合はカンマで区切ります。例: 556741164180/env:prod,myProject/department:sales。各タグには、名前空間付きのキー名と値の略称が必要です。
  • PROJECT_ID: データセットを作成するプロジェクトの ID。
  • DATASET_ID: 作成する新しいデータセットの ID。

Terraform

google_bigquery_dataset リソースを使用します。

BigQuery に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証を設定するをご覧ください。

次の例では、my_dataset という名前のデータセットを作成し、resource_tags フィールドに値を入力してタグを適用します。


# Create tag keys and values
data "google_project" "default" {}

resource "google_tags_tag_key" "env_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "env2"
}

resource "google_tags_tag_key" "department_tag_key" {
  parent     = "projects/${data.google_project.default.project_id}"
  short_name = "department2"
}

resource "google_tags_tag_value" "env_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.env_tag_key.name}"
  short_name = "prod"
}

resource "google_tags_tag_value" "department_tag_value" {
  parent     = "tagKeys/${google_tags_tag_key.department_tag_key.name}"
  short_name = "sales"
}

# Create a dataset
resource "google_bigquery_dataset" "default" {
  dataset_id                      = "my_dataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  # Attach tags to the dataset
  resource_tags = {
    (google_tags_tag_key.env_tag_key.namespaced_name) : google_tags_tag_value.env_tag_value.short_name,
    (google_tags_tag_key.department_tag_key.namespaced_name) : google_tags_tag_value.department_tag_value.short_name
  }
}

Google Cloud プロジェクトで Terraform 構成を適用するには、次のセクションの手順を完了します。

Cloud Shell を準備する

  1. Cloud Shell を起動します。
  2. Terraform 構成を適用するデフォルトの Google Cloud プロジェクトを設定します。

    このコマンドは、プロジェクトごとに 1 回だけ実行する必要があります。これは任意のディレクトリで実行できます。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Terraform 構成ファイルに明示的な値を設定すると、環境変数がオーバーライドされます。

ディレクトリを準備する

Terraform 構成ファイルには独自のディレクトリ(ルート モジュールとも呼ばれます)が必要です。

  1. Cloud Shell で、ディレクトリを作成し、そのディレクトリ内に新しいファイルを作成します。ファイルの拡張子は .tf にする必要があります(例: main.tf)。このチュートリアルでは、このファイルを main.tf とします。
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. チュートリアルを使用している場合は、各セクションまたはステップのサンプルコードをコピーできます。

    新しく作成した main.tf にサンプルコードをコピーします。

    必要に応じて、GitHub からコードをコピーします。Terraform スニペットがエンドツーエンドのソリューションの一部である場合は、この方法をおすすめします。

  3. 環境に適用するサンプル パラメータを確認し、変更します。
  4. 変更を保存します。
  5. Terraform を初期化します。これは、ディレクトリごとに 1 回だけ行う必要があります。
    terraform init

    必要に応じて、最新バージョンの Google プロバイダを使用する場合は、-upgrade オプションを使用します。

    terraform init -upgrade

変更を適用する

  1. 構成を確認して、Terraform が作成または更新するリソースが想定どおりであることを確認します。
    terraform plan

    必要に応じて構成を修正します。

  2. 次のコマンドを実行し、プロンプトで「yes」と入力して、Terraform 構成を適用します。
    terraform apply

    Terraform に「Apply complete!」のメッセージが表示されるまで待ちます。

  3. Google Cloud プロジェクトを開いて結果を表示します。Google Cloud コンソールの UI でリソースに移動して、Terraform によって作成または更新されたことを確認します。

API

datasets.insert メソッドを呼び出して、タグを resource_tags フィールドに追加します。

既存のデータセットにタグを適用する

タグを作成したら、既存のデータセットに適用できます。任意のタグキーのデータセットに適用できるタグ値は 1 つのみです。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。

  3. [データセット情報] セクションで、 [詳細を編集] をクリックします。

  4. [タグ] セクションで、データセットに追加するタグを選択します。

  5. [保存] をクリックします。

bq

--add_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --add_tags=TAG \
    PROJECT_ID:DATASET_ID

次のように置き換えます。

  • TAG: データセットに適用するタグ。複数のタグを指定する場合はカンマで区切ります。例: 556741164180/env:prod,myProject/department:sales。各タグには、名前空間付きのキー名と値の略称が必要です。
  • PROJECT_ID: 既存のデータセットが配置されているプロジェクトの ID。
  • DATASET_ID: 既存のデータセットの ID。

gcloud

コマンドラインを使用してデータセットにタグを付加するには、gcloud resource-manager tags bindings create コマンドを使用してタグ バインディング リソースを作成します。

gcloud resource-manager tags bindings create \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • TAGVALUE_NAME: 適用するタグ値の永続 ID または名前空間付きの名前(tagValues/45678901231234567/my_tag_key/my_tag_value など)。
  • RESOURCE_ID: リソースのタイプを識別するための API ドメイン名(//bigquery.googleapis.com/)を含む、データセットの完全な ID(例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset)。
  • LOCATION: データセットのロケーション

Terraform

データセットの resource_tags フィールドにタグを追加し、google_bigquery_dataset リソースを使用して更新後の構成を適用します。詳細については、新しいデータセットの作成時にタグを適用するの Terraform の例をご覧ください。

API

datasets.get メソッドを呼び出して、resource_tags フィールドを含むデータセット リソースを取得します。タグを resource_tags フィールドに追加し、datasets.update メソッドを使用して更新されたデータセット リソースを返します。

データセットに適用されたタグの一覧取得

次の手順では、データセットに直接適用されているタグ バインディングのリストを示します。親リソースから継承されたタグは返されません。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。

    タグが [データセット情報] セクションに表示されます。

bq

データセットに適用されているタグを一覧取得するには、bq show コマンドを使用します。

bq show PROJECT_ID:DATASET_ID

次のように置き換えます。

  • PROJECT_ID: データセットを含むプロジェクトの ID。
  • DATASET_ID: タグを一覧取得するデータセットの ID。

gcloud

リソースに付加されたタグ バインディングのリストを取得するには、gcloud resource-manager tags bindings listコマンドを使用します。

gcloud resource-manager tags bindings list \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • RESOURCE_ID: リソースのタイプを識別するための API ドメイン名(//bigquery.googleapis.com/)を含む、データセットの完全な ID(例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset)。

  • LOCATION: データセットのロケーション

出力は次のようになります。

name: tagBindings/%2F%2Fbigquery.googleapis.com%2Fprojects%2Fmy_project%2Fdatasets%2Fmy_dataset/tagValues/4567890123
parent: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset
tagValue: tagValues/4567890123

Terraform

terraform state show コマンドを使用して、resource_tags フィールドを含むデータセットの属性を一覧取得します。このコマンドは、データセットの Terraform 構成ファイルが実行されたディレクトリで実行します。

terraform state show google_bigquery_dataset.default

API

datasets.get メソッドを呼び出して、データセット リソースを取得します。データセット リソースには、resource_tags フィールドでデータセットに適用されているタグが含まれています。

ビュー

INFORMATION_SCHEMA.SCHEMATA_OPTIONS ビューを使用します。

たとえば、次のクエリは、リージョン内のすべてのデータセットに適用されているすべてのタグを表示します。このクエリは、schema_name(データセット名)、option_name(常に 'tags')、object_type(常に ARRAY<STRUCT<STRING, STRING>>)、option_value を含む列があるテーブルを返します。これには、各データセットに関連付けられたタグを表す STRUCT オブジェクトの配列が含まれます。タグが割り当てられていないデータセットの場合、option_value 列は空の配列を返します。

SELECT * from region-REGION.INFORMATION_SCHEMA.SCHEMATA_OPTIONS
WHERE option_name='tags'

次のように置き換えます。

データセットからタグの適用を解除する

タグ バインディング リソースを削除すると、リソースからタグを取り外すことができます。タグを削除する必要がある場合は、まずタグを適用解除する必要があります。

コンソール

  1. Google Cloud コンソールで [BigQuery] ページに移動します。

    [BigQuery] に移動

  2. [エクスプローラ] ペインでプロジェクトを開いて、データセットを選択します。

  3. [データセット情報] セクションで、 [詳細を編集] をクリックします。

  4. [タグ] セクションで、削除するタグの横にある [項目を削除] をクリックします。

  5. [保存] をクリックします。

bq

--remove_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --remove_tags=REMOVED_TAG \
    PROJECT_ID:DATASET_ID

次のように置き換えます。

  • REMOVED_TAG: データセットから削除するタグ。複数のタグを指定する場合はカンマで区切ります。値のペアのないキーのみを受け入れます。例: 556741164180/env,myProject/department。各タグには名前空間付きのキー名が必要です。
  • PROJECT_ID: データセットを含むプロジェクトの ID。
  • DATASET_ID: タグを取り外すデータセットの ID。

データセットからすべてのタグを削除する場合は、--clear_all_tags フラグを指定して bq update コマンドを使用します。

bq update \
    --clear_all_tags
    PROJECT_ID:DATASET_ID

gcloud

コマンドラインを使用してデータセットからタグの適用を解除するには、gcloud resource-manager tags bindings delete コマンドを使用してタグ バインディングを削除します。

gcloud resource-manager tags bindings delete \
    --tag-value=TAGVALUE_NAME \
    --parent=RESOURCE_ID \
    --location=LOCATION

次のように置き換えます。

  • TAGVALUE_NAME: 適用を解除するタグ値の永続 ID または名前空間付きの名前(tagValues/45678901231234567/my_tag_key/my_tag_value など)。
  • RESOURCE_ID: リソースのタイプを識別するための API ドメイン名(//bigquery.googleapis.com/)を含む、データセットの完全な ID(例: //bigquery.googleapis.com/projects/my_project/datasets/my_dataset)。
  • LOCATION: データセットのロケーション

Terraform

データセットの resource_tags フィールドからタグを削除し、google_bigquery_dataset リソースを使用して更新後の構成を適用します。

API

datasets.get メソッドを呼び出して、resource_tags フィールドを含むデータセット リソースを取得します。resource_tags フィールドからタグを削除し、datasets.update メソッドを使用して更新されたデータセット リソースを返します。

テーブルに似た他のリソースにタグを付ける

同様に、BigQuery ビュー、マテリアライズド ビュー、クローン、スナップショットにタグを付けることができます。

タグを削除

テーブル、ビュー、データセットから参照されているタグは削除できません。タグのキーまたは値自体を削除する前に、既存のタグ バインディング リソースをすべて解除する必要があります。タグキーとタグ値を削除するには、タグの削除をご覧ください。

たとえば、組織の管理者であるとします。組織のデータ アナリストはすべてグループ analysts@example.com のメンバーで、プロジェクトの userData に対して BigQuery データ閲覧者 IAM ロールを持ちます。データ アナリストのインターンが 1 名雇用されています。このインターンには、会社のポリシーに従って、userData プロジェクトの anonymousData データセットを表示する権限のみが付与されます。タグを使用してこれらのメンバーのアクセスを制御できます。

  1. キー employee_type と値 intern を使用してタグを作成します

    タグキーとタグ値の作成例。

  2. Google Cloud コンソールの [IAM] ページに移動します。

    [IAM] に移動

  3. データセットへのアクセスを制限するインターンを含む行を見つけて、その行の [プリンシパルを編集] をクリックします。

  4. [ロール] メニューから [BigQuery データ閲覧者] を選択します。

  5. [条件を追加] をクリックします。

  6. [タイトル] フィールドと [説明] フィールドに、作成する IAM タグの条件を説明する値を入力します。

  7. [条件作成ツール] タブで [追加] をクリックします。

  8. [条件タイプ] メニューで、[リソース]、[タグ] の順に選択します。

  9. [演算子] メニューで [値を持つ] を選択します。

  10. [値のパス] フィールドに、ORGANIZATION/TAG_KEY/TAG_VALUE の形式でタグ値のパスを入力します(例: example.org/employee_type/intern)。

    タグを使用した IAM 条件の例。

    この IAM タグ条件によって、intern タグを持つデータセットに対するインターンのアクセスが制限されます。

  11. タグ条件を保存するには、[保存] をクリックします。

  12. [権限を編集] ペインで行ったすべての変更を保存するには、[保存] をクリックします。

  13. intern タグの値を anonymousData データセットに適用するには、コマンドラインを使用して gcloud resource-manager tags bindings create コマンドを実行します。

    gcloud resource-manager tags bindings create \
    --tag-value=tagValues/4567890123 \
    --parent=//bigquery.googleapis.com/projects/userData/datasets/anonymousData \
    --location=US
    

制限事項

  • テーブルタグは、BigQuery Omni テーブル、非表示データセットのテーブル、一時テーブルではサポートされていません。また、BigQuery Omni のクロスリージョン クエリでは、他のリージョンのテーブルのアクセス制御チェック中にタグを使用しません。

  • テーブルまたはデータセットに適用できるタグは最大 50 個です。

  • ワイルドカード クエリで参照されるすべてのテーブルは、タグキーと値の組が完全に同じでなければなりません。

  • データセットまたはテーブルへの条件付きアクセス権を持つユーザーは、Google Cloud コンソールからそのリソースに対する権限を変更できません。権限の変更は、bq ツールと BigQuery API でのみサポートされます。

  • BigQuery の外部のサービスには、IAM タグ条件を適切に検証できないものもあります。タグ条件が正の場合、つまり、そのリソースに特定のタグがあるときだけ、ユーザーにそのリソースのロールが付与される場合、適用されているタグに関係なく、リソースへのアクセスは拒否されます。タグ条件が負の場合、つまり、そのリソースに特定のタグがないときだけ、ユーザーにそのリソースのロールが付与される場合、条件はチェックされません。

    たとえば、Data Catalog では、BigQuery データセットとテーブルの IAM タグ条件を検証できません。employee_type=intern タグを持つデータセットで、インターンに BigQuery データ閲覧者ロールを付与する条件付き IAM ポリシーがあるとします。これは正のタグ条件であるため、そのデータセットに employee_type=intern タグがある場合でも、インターンは Data Catalog で検索してデータセットを表示することはできません。このタグ条件を負の値に変更して、インターンが employee_type=intern タグを持たないデータセットのみを表示できるようにすると、チェックは完全にスキップされ、インターンは BigQuery で通常アクセスできなかったデータセットを表示できるようになります。

次のステップ