Cloud KMS 鍵によるデータの保護

BigQuery は、デフォルトでは、保存されている顧客コンテンツを暗号化します。BigQuery は、このデフォルトの暗号化をユーザーの代わりに処理および管理し、ユーザー側では追加のアクションは不要です。まず、BigQuery テーブルのデータは、データ暗号鍵を使用して暗号化されます。次に、このデータ暗号鍵が鍵暗号鍵で暗号化されます。これはエンベロープ暗号化と呼ばれます。鍵暗号鍵ではデータは直接暗号化されませんが、データの暗号化に使用するデータ暗号鍵を暗号化するために使用されます。詳細については、鍵管理をご覧ください。

ユーザー自身で暗号化を制御する場合は、BigQuery の顧客管理の暗号鍵(CMEK)を使用できます。データを保護する鍵暗号鍵を Google が管理するのではなく、ユーザーが Cloud KMS で鍵暗号鍵を制御および管理します。このトピックでは、この手法について詳しく説明します。

Google Cloud Platform での暗号化オプションについては、こちらをご覧ください。

始める前に

  1. データセットテーブル、およびクエリについて理解します。

  2. BigQuery と Cloud KMS を同じ GCP プロジェクトで実行するか、別々のプロジェクトで実行するかを決定します。以下の説明では次の表記方法を用います。

    • [PROJECT_ID] は BigQuery を実行するプロジェクトのプロジェクト ID です。
    • [PROJECT_NUMBER] は BigQuery を実行するプロジェクトのプロジェクト番号です。
    • [KMS_PROJECT_ID] は Cloud KMS を実行するプロジェクトのプロジェクト ID です(BigQuery を実行するプロジェクトと同じプロジェクトである可能性があります)。
    GCP プロジェクト ID とプロジェクト番号については、プロジェクトの識別をご覧ください。

  3. 新しいプロジェクトでは、BigQuery が自動的に有効になります。既存のプロジェクトを使用して BigQuery を実行する場合は、BigQuery API を有効化します。

  4. Cloud KMS を実行する GCP プロジェクトの場合:

    1. Cloud KMS API を有効化します。
    2. 鍵リングと鍵の作成の説明に従って、鍵リングと鍵を作成します。BigQuery データセットのロケーションをサポートしているロケーションで鍵リングを作成します。
      • マルチリージョン データセットではマルチリージョン鍵リングを使用する必要があります。たとえば、リージョン US のデータセットはリージョン us の鍵リングで保護する必要があり、リージョン EU のデータセットはリージョン europe の鍵リングで保護する必要があります。
      • マルチリージョン データセットではリージョン鍵を使用できますが、そのリージョンを利用できない場合は使用できません。たとえば、europe-west1 鍵を使用する EU のマルチリージョン データセットは、Cloud KMS で europe-west1 が利用できない場合に使用できなくなります。
      • global リージョンは BigQuery では利用できません。
      BigQuery と Cloud KMS がサポートされるロケーションの詳細については、クラウドのロケーションをご覧ください。

暗号化仕様

BigQuery でデータを保護するために使用される Cloud KMS 鍵は、AES-256 鍵です。これらの鍵は、BigQuery で鍵暗号鍵として使用され、データを暗号化するデータ暗号鍵を暗号化します。

暗号化と復号化の権限を付与する

Google Cloud Platform Console を使用して BigQuery サービス アカウント ID を特定し、サービス アカウントに、Cloud KMS を使用して暗号化および復号化する適切な役割を付与します。

サービス アカウント ID を特定する

コマンドライン

bq show コマンドで --encryption_service_account フラグを指定すると、サービス アカウント ID を特定できます。

bq show --encryption_service_account

このコマンドを実行すると、サービス アカウント ID が表示されます。

                       ServiceAccountID
     -------------------------------------------------------------
      bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com

ウェブ UI

  1. BigQuery ウェブ UI に移動します。

    BigQuery ウェブ UI に移動

  2. ナビゲーションのプロジェクト名の横にある下矢印アイコン 下矢印アイコン をクリックして、[Customer Managed Encryption] をクリックします。

  3. ユーザー ダイアログが開き、暗号化と復号化の権限が必要なサービス アカウントが表示されます。

    サービス アカウント ID

  4. [Copy] をクリックしてサービス アカウント ID をクリップボードにコピーし、[OK] をクリックしてユーザー ダイアログを閉じます。

暗号化 / 復号化の役割を割り当てる

クリップボードにコピーした BigQuery システムのサービス アカウントに Cloud KMS CryptoKey Encrypter/Decrypter 役割を割り当てます。このアカウントの形式は次のとおりです。

bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com

コマンドライン

gcloud コマンドライン ツールを使用して役割を割り当てられます。

gcloud projects add-iam-policy-binding [KMS_PROJECT_ID] \
--member serviceAccount:bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter
[KMS_PROJECT_ID] を Cloud KMS を実行している GCP プロジェクトの ID に置き換え、[PROJECT_NUMBER] を BigQuery を実行している GCP プロジェクトのプロジェクト番号(プロジェクト ID ではない)に置き換えます。

ウェブ UI

  1. GCP Console で [IAM と管理] ページを開きます。

    [IAM と管理] ページを開く

  2. プロジェクトを選択し、[続行] をクリックします。

  3. 役割を追加するサービス アカウントを特定します。

    • bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com サービス アカウントがまだメンバーリストに含まれていない場合、このサービス アカウントには役割が割り当てられていません。[メンバーの追加] をクリックし、サービス アカウントのメールアドレス bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com を入力します。
    • サービス アカウントがすでにメンバーリストに含まれている場合、サービス アカウントには既存の役割が割り当てられています。bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com サービス アカウントの現在の役割のプルダウン リストをクリックします。
  4. [役割] プルダウン リストをクリックし、[Cloud KMS] をクリックして、[クラウド KMS 暗号鍵の暗号化 / 復号化] 役割をクリックします。

  5. [追加] または [保存] をクリックして、その役割を bq-[PROJECT_NUMBER]@bigquery-encryption.iam.gserviceaccount.com サービス アカウントに適用します。

Cloud KMS で保護されるテーブルを作成する

Cloud KMS で保護される空のテーブルを作成する

Cloud KMS で保護されるテーブルを作成するには:

コマンドライン

--destination_kms_key フラグを指定して bq コマンドライン ツールを実行すると、テーブルを作成できます。--destination_kms_key フラグでは、テーブルで使用する鍵のリソース ID を指定します。この鍵の形式は次のとおりです。

projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]
鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。

スキーマを使用して空のテーブルを作成するには、次のコマンドを実行します。

bq mk --schema name:string,value:integer -t \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
mydataset.newtable

または、DDL ステートメントを使用することもできます。

bq query --use_legacy_sql=false "
  CREATE TABLE mydataset.newtable (name STRING, value INT64)
  OPTIONS(
    kms_key_name='projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]'
  )
"

クエリからテーブルを作成するには、次のコマンドを実行します。

bq query --destination_table=mydataset.newtable \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
"SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6"

bq コマンドライン ツールの詳細については、bq コマンドライン ツールをご覧ください。

ウェブ UI

  1. BigQuery ウェブ UI で、データセット名の横にある下矢印アイコン 下矢印アイコン をクリックし、[Create new table] をクリックします。

  2. [Create table] ページで、スキーマなしの空のテーブルを作成するため、またはスキーマ定義を含む空のテーブルを作成するために必要な情報を入力します。[Create Table] をクリックする前に、暗号化タイプを設定し、テーブルで使用する Cloud KMS 鍵を指定します。

    1. [Encryption Type] プルダウン リストをクリックし、[Customer-Managed Encryption] を選択します。
    2. [Customer-Managed Encryption Key] に鍵のリソース ID を入力します。この鍵の形式は次のとおりです。
       projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]
       
      鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。
  3. [Create Table] をクリックします。

Python

テーブルを作成する前に Table.encryption_configuration プロパティを EncryptionConfiguration オブジェクトに設定することによって、新しいテーブルを顧客管理の暗号鍵で保護します。

# from google.cloud import bigquery
# client = bigquery.Client()
# dataset_id = 'my_dataset'

table_ref = client.dataset(dataset_id).table('my_table')
table = bigquery.Table(table_ref)

# Set the encryption key to use for the table.
# TODO: Replace this key with a key you have created in Cloud KMS.
kms_key_name = 'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}'.format(
    'cloud-samples-tests', 'us-central1', 'test', 'test')
table.encryption_configuration = bigquery.EncryptionConfiguration(
    kms_key_name=kms_key_name)

table = client.create_table(table)  # API request

assert table.encryption_configuration.kms_key_name == kms_key_name

Cloud KMS 鍵で保護されたテーブルのクエリ

Cloud KMS で保護されたテーブルをクエリするために、特別な方法は必要ありません。テーブルのコンテンツの暗号化に使用された鍵の名前が BigQuery に保存され、Cloud KMS で保護されたテーブルに対してクエリが実行されるとその鍵が使用されます。

そのテーブルのコンテンツの暗号化に使用された Cloud KMS 鍵に BigQuery がアクセスできれば、既存のすべてのツール、BigQuery コンソール、bq コマンドライン インターフェースは、デフォルトの暗号化されたテーブルの場合と同様に実行されます。

Cloud KMS 鍵を使用したクエリ結果の保護

コマンドライン

Cloud KMS 鍵を使用して宛先テーブルやクエリ結果(一時テーブルを使用している場合)を保護するには、--destination_kms_key フラグを指定します。--destination_kms_key フラグでは、宛先または結果テーブルで使用する鍵のリソース ID を指定します。この鍵の形式は次のとおりです。

projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]
鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。

--destination_table フラグを使用して、クエリ結果の宛先を指定することもできます。--destination_table を使用しなかった場合、クエリ結果は一時テーブルに書き込まれます。

テーブルをクエリするには、次のコマンドを実行します。

bq query \
--destination_table=mydataset.newtable \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
"SELECT name,count FROM mydataset.babynames WHERE gender = 'M' ORDER BY count DESC LIMIT 6"

bq コマンドライン ツールの詳細については、bq コマンドライン ツールをご覧ください。

ウェブ UI

  1. BigQuery ウェブ UI で [COMPOSE QUERY] ボタンをクリックします。

  2. [New Query] テキスト領域に有効な BigQuery SQL クエリを入力します。

  3. [Encryption Type] をクリックし、[Customer-Managed Encryption] を選択します。

  4. [Customer-Managed Encryption Key] に鍵のリソース ID を入力します。この鍵の形式は次のとおりです。

    projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]
    
    鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。

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

Python

QueryJobConfig.destination_encryption_configuration プロパティを EncryptionConfiguration オブジェクトに設定してからクエリを実行することによって、クエリの宛先テーブルを顧客管理の暗号鍵で保護します。

job_config = bigquery.QueryJobConfig()

# Set the destination table. Here, dataset_id is a string, such as:
# dataset_id = 'your_dataset_id'
table_ref = client.dataset(dataset_id).table('your_table_id')
job_config.destination = table_ref

# Set the encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
kms_key_name = 'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}'.format(
    'cloud-samples-tests', 'us-central1', 'test', 'test')
encryption_config = bigquery.EncryptionConfiguration(
    kms_key_name=kms_key_name)
job_config.destination_encryption_configuration = encryption_config

# Start the query, passing in the extra configuration.
query_job = client.query(
    'SELECT 17 AS my_col;', job_config=job_config)
query_job.result()

# The destination table is written using the encryption configuration.
table = client.get_table(table_ref)
assert table.encryption_configuration.kms_key_name == kms_key_name

Cloud KMS で保護されているテーブルを読み込む

Cloud KMS で保護されているテーブルを読み込むには:

Python

LoadJobConfig.destination_encryption_configuration プロパティを EncryptionConfiguration オブジェクトに設定してからテーブルを読み込むことによって、読み込みジョブの宛先テーブルを顧客管理の暗号鍵で保護します。

# dataset_id = 'my_dataset'
dataset_ref = client.dataset(dataset_id)
job_config = bigquery.LoadJobConfig()
job_config.autodetect = True
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

# Set the encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
kms_key_name = 'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}'.format(
    'cloud-samples-tests', 'us-central1', 'test', 'test')
encryption_config = bigquery.EncryptionConfiguration(
    kms_key_name=kms_key_name)
job_config.destination_encryption_configuration = encryption_config

load_job = client.load_table_from_uri(
    'gs://cloud-samples-data/bigquery/us-states/us-states.json',
    dataset_ref.table('us_states'),
    job_config=job_config)  # API request

assert load_job.job_type == 'load'

load_job.result()  # Waits for table load to complete.

assert load_job.state == 'DONE'
table = client.get_table(dataset_ref.table('us_states'))
assert table.encryption_configuration.kms_key_name == kms_key_name

Cloud KMS で保護されているテーブルにストリーミングする

追加のパラメータを指定しなくても、CMEK で保護されている BigQuery テーブルにデータをストリーミングすることができます。このデータは、最終ロケーションだけでなくバッファ内でも Cloud KMS 鍵を使用して暗号化されます。CMEK テーブルでストリーミングを使用する前に、鍵の使用可能性とアクセス可能性に関する要件を確認してください。

ストリーミングの詳細については、BigQuery へのデータのストリーミングをご覧ください。

テーブルをデフォルトの暗号化から Cloud KMS 保護に変更する

コマンドライン

bq cp コマンドで --destination_kms_key フラグを使用すると、デフォルトの暗号化で保護されているテーブルを、Cloud KMS で保護された新しいテーブルまたは元のテーブルにコピーできます。--destination_kms_key フラグでは、宛先テーブルで使用する鍵のリソース ID を指定します。この鍵の形式は次のとおりです。

projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]

鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。

デフォルトの暗号化が使用されているテーブルを、Cloud KMS で保護された新しいテーブルにコピーするには、次のコマンドを実行します。

bq cp \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
sourceDataset.sourceTableId destinationDataset.destinationTableId

デフォルトの暗号化が使用されているテーブルを Cloud KMS で保護されている同じテーブルにコピーする場合は、次のコマンドを実行します。

bq cp -f \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
sourceDataset.sourceTableId sourceDataset.sourceTableId

テーブルを Cloud KMS 保護からデフォルトの暗号化に変更する場合は、--destination_kms_key フラグを使用せずに bq cp を実行して、ファイルをそれ自体にコピーします。

bq コマンドライン ツールの詳細については、bq コマンドライン ツールをご覧ください。

Python

QueryJobConfig.destination_encryption_configuration プロパティを EncryptionConfiguration オブジェクトに設定してからテーブルをコピーすることによって、テーブルコピーの宛先を顧客管理の暗号鍵で保護します。

source_dataset = bigquery.DatasetReference(
    'bigquery-public-data', 'samples')
source_table_ref = source_dataset.table('shakespeare')

# dataset_id = 'my_dataset'
dest_dataset_ref = client.dataset(dataset_id)
dest_table_ref = dest_dataset_ref.table('destination_table')

# Set the encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
kms_key_name = 'projects/{}/locations/{}/keyRings/{}/cryptoKeys/{}'.format(
    'cloud-samples-tests', 'us-central1', 'test', 'test')
encryption_config = bigquery.EncryptionConfiguration(
    kms_key_name=kms_key_name)
job_config = bigquery.CopyJobConfig()
job_config.destination_encryption_configuration = encryption_config

job = client.copy_table(
    source_table_ref, dest_table_ref, job_config=job_config)  # API request
job.result()  # Waits for job to complete.

assert job.state == 'DONE'
dest_table = client.get_table(dest_table_ref)
assert dest_table.encryption_configuration.kms_key_name == kms_key_name

テーブルが Cloud KMS によって保護されているかどうかを判別する

  1. BigQuery ウェブ UI で、データセットの左側にある青い矢印をクリックして展開するか、データセット名をダブルクリックします。これにより、データセット内のテーブルとビューが表示されます。

  2. テーブル名をクリックします。

  3. [Details] をクリックします。[Table Details] ページに、テーブルの説明とテーブル情報が表示されます。

  4. テーブルが Cloud KMS によって保護されている場合は、[Customer-Managed Encryption Key] フィールドに鍵のリソース ID が表示されます。

    保護されたテーブル

BigQuery テーブルの Cloud KMS 鍵を変更する

CMEK で保護されている既存のテーブルの Cloud KMS 鍵を変更するには、API または bq コマンドライン ツールを使用できます。Cloud KMS 鍵を変更するには updatecp の 2 つの方法があります。update を使用する場合は、KMS で保護されているテーブルで使用されている Cloud KMS 鍵を変更できます。cp を使用する場合は、CMEK で保護されているテーブルで使用されている Cloud KMS 鍵を変更できます。また、テーブルで、デフォルトの暗号化を CMEK 保護に変更したり、CMEK 保護をデフォルトの暗号化に戻したりすることもできます。update の利点としては、cp より高速であること、テーブル デコレータを使用できることが挙げられます。

コマンドライン

bq cp コマンドで --destination_kms_key フラグを使用すると、Cloud KMS で保護されているテーブルの鍵を変更できます。--destination_kms_key フラグでは、テーブルで使用する鍵のリソース ID を指定します。この鍵の形式は次のとおりです。

projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY]

鍵のリソース ID を取得する方法については、鍵のリソース ID をご覧ください。

bq update \
--destination_kms_key projects/[PROJECT_ID]/locations/[LOCATION]/keyRings/[KEYRING]/cryptoKeys/[KEY] \
-t [DATASET_ID].[TABLE_ID]

Python

Table.encryption_configuration プロパティを新しい EncryptionConfiguration オブジェクトに変更してからテーブルを更新することによって、テーブルの顧客管理の暗号鍵を変更します。

assert table.encryption_configuration.kms_key_name == original_kms_key_name

# Set a new encryption key to use for the destination.
# TODO: Replace this key with a key you have created in KMS.
updated_kms_key_name = (
    'projects/cloud-samples-tests/locations/us-central1/'
    'keyRings/test/cryptoKeys/otherkey')
table.encryption_configuration = bigquery.EncryptionConfiguration(
    kms_key_name=updated_kms_key_name)

table = client.update_table(
    table, ['encryption_configuration'])  # API request

assert table.encryption_configuration.kms_key_name == updated_kms_key_name
assert original_kms_key_name != updated_kms_key_name

Cloud KMS 鍵への BigQuery のアクセス権を削除する

Cloud KMS 鍵への BigQuery のアクセス権は、その鍵に対する IAM 権限を取り消すことによって、いつでも削除できます。

BigQuery が Cloud KMS 鍵へのアクセスを失うと、ユーザー エクスペリエンスが大幅に低下し、データが失われる可能性があります。

  • その CMEK で保護されているテーブルのデータにアクセスできなくなるため、querycpextract、および tabledata.list はすべて失敗します。

  • その CMEK で保護されているテーブルに新しいデータを追加できません。

  • アクセス権を付与し直しても、数日間は、そのテーブルへのクエリのパフォーマンスが低下する可能性があります。

制限事項

Cloud KMS 鍵への BigQuery のアクセス

Cloud KMS 鍵は、次の場合に BigQuery から使用でき、アクセス可能とみなされます。

  • その鍵が有効になっている
  • BigQuery サービス アカウントに、その鍵に対する暗号化および復号化の権限がある

以下のセクションでは、鍵にアクセスできない場合のストリーミング挿入と長期間アクセスできないデータへの影響について説明します。

ストリーミング挿入への影響

Cloud KMS 鍵は、ストリーミング挿入リクエスト後の 48 時間で 24 時間以上連続して利用可能かつアクセス可能である必要があります。鍵が利用不能またはアクセス不能である場合、ストリーミング データは完全には保持されず、失われる可能性があります。ストリーミング挿入の詳細については、BigQuery へのデータのストリーミングをご覧ください。

長期間アクセスできないデータへの影響

BigQuery はマネージド ストレージを提供するため、長期間アクセスできないデータは BigQuery のアーキテクチャと互換性がありません。特定の BigQuery テーブルの Cloud KMS 鍵が 60 日間連続して利用不能またはアクセス不能である場合、BigQuery はそのテーブルと関連データを削除することを選択する場合があります。データが削除される 7 日前までに、BigQuery は請求先アカウントに関連付けられているメールアドレスにメールを送信します。

テーブル デコレータの使用

Cloud KMS によって保護されているテーブルのデータが、loadcp、または query オペレーションの書き込み処理 WRITE_TRUNCATE によって置き換えられると、スナップショット デコレータがスナップショットを取得する時刻によっては、テーブル デコレータを介したクエリではテーブルにアクセスできなくなります。

テーブルが時刻 T に置き換えられて、スナップショット デコレータ snapshot_timeT より早い時刻であるとした場合に、snapshot_time をクエリできるかどうかを以下の表に示します。

T 前の暗号化タイプ T 後の暗号化タイプ snapshot_time
Cloud KMS 暗号化 Cloud KMS 暗号化 クエリ不可
デフォルトの暗号化 Cloud KMS 暗号化 クエリ可能
Cloud KMS 暗号化 デフォルトの暗号化 クエリ不可

範囲デコレータを使用する場合は、同様のロジックが <time2> に適用されます。

よくある質問

Cloud KMS 鍵への権限が必要なのは誰ですか?

顧客管理の暗号鍵を使用している場合、権限を繰り返し指定する必要はありません。Cloud KMS 鍵を使用して暗号化と復号化を行う権限が BigQuery サービス アカウントにある限り、BigQuery テーブルへのアクセス権限を持つユーザーは、Cloud KMS 鍵への直接アクセス権がないユーザーであっても、データにアクセスできます。

どのサービス アカウントが使用されますか?

テーブルの GCP プロジェクトに関連付けられている BigQuery サービス アカウントは、そのテーブルのデータを復号化するために使用されます。BigQuery サービス アカウントはプロジェクトごとに一意です。Cloud KMS で保護されている匿名テーブルにデータを書き込むジョブでは、そのジョブのプロジェクトのサービス アカウントが使用されます。

たとえば、CMEK で保護されている table1table2table3 という 3 つのテーブルについて考えてみます。宛先テーブルを {project3.table3} として {project1.table1, project2.table2} からデータをクエリする場合は、次のようになります。

  • project1.table1 に対しては project1 のサービス アカウントが使用される
  • project2.table2 に対しては project2 のサービス アカウントが使用される
  • project3.table3 に対しては project3 のサービス アカウントが使用される

BigQuery はどのように Cloud KMS 鍵を使用できますか?

BigQuery は、Cloud KMS 鍵を使用して、ユーザークエリ(Tabledata.listjobs.insert など)に応じてデータを復号化します。

BigQuery は、データを読み取り最適化された形式に変換するなど、データのメンテナンスやストレージ最適化タスクにこの鍵を使用することもできます。

追加のサポートを得る方法

ここで回答されていない質問がある場合は、cmek-feedback@google.com に問い合わせるか、BigQuery サポートまたは Cloud KMS サポートをご覧ください。

エラーのトラブルシューティング

よくあるエラーと推奨される軽減策について以下に説明します。

エラー 推奨
Please grant Cloud KMS CryptoKey Encrypter/Decrypter role プロジェクトに関連付けられている BigQuery サービス アカウントに、指定した Cloud KMS 鍵を操作するための十分な Cloud IAM 権限がありません。エラー メッセージ内またはこのドキュメントの手順に従って、適切な Cloud IAM 権限を付与してください。
Existing table encryption settings do not match encryption settings specified in the request このエラーは、宛先テーブルの暗号化設定がリクエストの暗号化設定と一致しない場合に発生することがあります。軽減策として、書き込み処理 TRUNCATE を使用してテーブルを置き換えるか、別の宛先テーブルを指定します。
This region is not supported Cloud KMS 鍵のリージョンが、宛先テーブルの BigQuery データセットのリージョンと一致していません。軽減策として、データセットに一致するリージョンにある鍵を選択するか、鍵リージョンに一致するデータセットに読み込みます。

既知の問題

  • BigQuery クライアント ライブラリでは、顧客管理の暗号鍵を構成するコマンドはまだサポートされていません。
このページは役立ちましたか?評価をお願いいたします。

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

ご不明な点がありましたら、Google のサポートページをご覧ください。