このページでは、暗号化に Cloud KMS Autokey で作成された鍵を使用して保護されたリソースを作成する方法について説明します。Autokey の詳細については、Autokey の概要をご覧ください。
始める前に
Autokey を使用して保護されたリソースを作成する前に、次の手順を完了して準備する必要があります。
- 集中型または委任型の鍵管理で Autokey が有効になっているプロジェクトがまだない場合は、まず Cloud KMS Autokey を有効にするの設定手順を完了してから、このドキュメントに戻ります。
- 選択したプロジェクトでリソースを作成する権限が必要です。各リソースに必要な特定のロールについては、サービス固有のドキュメントをご覧ください。このドキュメントを確認するには、 CMEK 統合テーブルでサービスを見つけ、作成するリソースタイプのリンクにアクセスします。Autokey を使用してオンデマンドで鍵をリクエストする場合、追加の権限は必要ありません。
Compute Engine リソースでの Autokey の使用
Autokey では、作成中のリソースと同じ場所に、ディスク、イメージ、マシンイメージごとに新しい鍵が作成されます。
Autokey はスナップショットの新しい鍵を作成しません。スナップショットでは、ディスクの暗号化に使用した鍵と同じ鍵を使用する必要があります。コンソールを使用してスナップショットを作成する場合、ディスクで使用される暗号鍵がスナップショットに自動的に適用されます。Google Cloud gcloud CLI、Terraform、または Compute Engine API を使用してスナップショットを作成する場合、ディスクの暗号化に使用される鍵を特定し、その鍵を使用してスナップショットを暗号化する必要があります。
スナップショットで CMEK を使用する詳細については、CMEK で暗号化されたディスクからスナップショットを作成するをご覧ください。
保護された Compute Engine リソースを作成する
Console
ディスクを作成する手順は次のとおりです。
コンソールで、[ディスク] ページに移動します。 Google Cloud
[ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
[暗号化] で、[Cloud KMS 鍵] を選択します。
[鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できる状態になると、メッセージが表示されます。
ディスクの作成を完了するには、[作成] をクリックします。
同様の手順で、保護された VM インスタンス、イメージ、マシンイメージ リソースを作成できます。
Terraform
次の Terraform サンプルは、鍵ハンドルを作成し、返された鍵を使用して新しい永続ディスク リソースを保護します。
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "compute.googleapis.com/Disk"
}
resource "google_compute_disk" "persistent_disk" {
project = "RESOURCE_PROJECT_ID"
name = "DISK_NAME"
type = "pd-ssd"
zone = "ZONE"
size = 30
physical_block_size_bytes = 4096
disk_encryption_key {
kms_key_self_link = google_kms_key_handle.my_key_handle.kms_key
}
}
以下を置き換えます。
RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。KEY_HANDLE: 鍵ハンドルに使用する ID。LOCATION: 保護されたリソースを作成するロケーション。DISK_NAME: 新しいディスクの名前。ZONE: 保護されたリソースのゾーン。これは、リソースを作成するロケーション内のゾーンにする必要があります。たとえば、us-central1ロケーションにリソースを作成する場合、ゾーンはus-central1-aになります。
Cloud KMS では、KeyHandle リソースを削除できません。作成と破棄のパターンを使用している場合、KeyHandle を再作成しようとすると、ALREADY_EXISTS エラーが発生します。この問題を回避するには、以前に作成した KeyHandle をインポートします。詳細については、
この
ページの Terraform での作成と破棄のパターンをご覧ください。
API
KeyHandleを作成して、新しい Cloud KMS 鍵をリクエストします。curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。RESOURCE_TYPE: 作成するリソースのタイプ(compute.googleapis.com/Diskなど)。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }出力の
OPERATION_IDをメモに残しておきます。作成した鍵のリソース ID を取得するには、この値が必要です。鍵ハンドルに関連付けられた Cloud KMS 鍵を見つけます。
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。OPERATION_ID: 前のステップの出力の鍵ハンドルのリクエスト オペレーションの ID。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }出力の
kmsKey要素の値は、このリソースに対して Autokey によって作成された鍵の完全なリソース ID です。このリソース ID は、他の Cloud KMS リソースのリソース ID と同じように使用できます。--kms-keyフラグを指定し、gcloud compute disks createcommand コマンドを使用して暗号化されたディスクを作成します。gcloud compute disks create DISK_NAME \ --kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME以下を置き換えます。
DISK_NAME: 新しいディスクの名前。KEY_PROJECT_ID: 鍵が作成されたプロジェクトのプロジェクト ID。LOCATION: リソースを作成するロケーション。KEY_NAME: 前の手順の出力で返された鍵の名前。
Cloud Storage リソースでの Autokey の使用
Autokey は、バケットと同じロケーションに新しい鍵を作成します。Autokey によって作成された鍵は、バケットのデフォルト鍵として割り当てられます。
Autokey はオブジェクトの鍵を作成しません。デフォルトでは、バケットに作成されたオブジェクトはバケットのデフォルト鍵を使用します。バケットのデフォルト以外の鍵を使用してオブジェクトを暗号化する場合は、CMEK を作成し、オブジェクトの作成時にその鍵を使用できます。
バケットに割り当てられたデフォルト鍵を変更する場合は、Autokey で作成された鍵など、既存の CMEK を使用できます。
保護された Cloud Storage リソースを作成する
Console
コンソールで、[バケットの作成] ページに移動します。 Google Cloud
[新しいバケットを作成する] の手順に沿って、[**オブジェクト データを保護する方法を選択する**] の手順まで進みます。
[オブジェクト データを保護する方法を選択する] で、[データ 暗号化] セクションを開き、[Cloud KMS 鍵] を選択します。
[鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できる状態になると、メッセージが表示されます。
バケットの作成を完了するには、[作成] をクリックします。
Terraform
次の Terraform サンプルは、鍵ハンドルを作成し、返された鍵を使用して新しいストレージ バケットを保護します。
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "KEY_HANDLE"
location = "LOCATION"
resource_type_selector = "storage.googleapis.com/Bucket"
}
resource "google_storage_bucket" "simple_bucket_name" {
name = "BUCKET_NAME"
location = "LOCATION"
force_destroy = true
project = "RESOURCE_PROJECT_ID"
uniform_bucket_level_access = true
encryption {
default_kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
以下を置き換えます。
RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。KEY_HANDLE: 鍵ハンドルに使用する ID。LOCATION: 保護されたリソースを作成するロケーション。BUCKET_NAME: 新しいバケットの名前。
Cloud KMS では、KeyHandle リソースを削除できません。作成と破棄のパターンを使用している場合、KeyHandle を再作成しようとすると、ALREADY_EXISTS エラーが発生します。この問題を回避するには、以前に作成した KeyHandle をインポートします。詳細については、
この
ページの Terraform での作成と破棄のパターンをご覧ください。
API
KeyHandleを作成して、新しい Cloud KMS 鍵をリクエストします。curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。RESOURCE_TYPE: 作成するリソースのタイプ(storage.googleapis.com/Bucketなど)。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }出力の
OPERATION_IDをメモに残しておきます。作成した鍵のリソース ID を取得するには、この値が必要です。鍵ハンドルに関連付けられた Cloud KMS 鍵を見つけます。
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。OPERATION_ID: 前のステップの出力の鍵ハンドルのリクエスト オペレーションの ID。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }出力の
kmsKey要素の値は、このリソースに対して Autokey によって作成された鍵の完全なリソース ID です。このリソース ID は、他の Cloud KMS リソースのリソース ID と同じように使用できます。--default-encryption-keyフラグを指定し、gcloud storage buckets createコマンドを使用して暗号化されたバケットを作成します。gcloud storage buckets create gs://BUCKET_NAME \ --location=LOCATION \ --default-encryption-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME以下を置き換えます。
BUCKET_NAME: 新しいバケットの名前。バケット名はバケット名の要件を満たしている必要があります。LOCATION: バケットを作成するロケーション。KEY_PROJECT_ID: 鍵が作成されたプロジェクトのプロジェクト ID。LOCATION: リソースを作成するロケーション。KEY_NAME: 前の手順の出力で返された鍵の名前。
BigQuery リソースでの Autokey の使用
Cloud KMS は、いくつかのエディションの BigQuery で使用できます。Autokey を使用して BigQuery リソースを保護する前に、使用している BigQuery のエディションが Cloud KMS と互換性があることを確認してください。BigQuery エディションの詳細については、BigQuery のエディションの概要をご覧ください。
新しいデータセットごとに、Autokey はリソース自体と同じロケーションに新しい鍵を作成します。この鍵がデータセットのデフォルト鍵になります。
Autokey は、テーブル、クエリ、一時テーブル、モデルの鍵を作成しません。デフォルトでは、これらのリソースはデータセットのデフォルト鍵によって保護されます。データセットのデフォルト鍵以外の鍵を使用してデータセット内のリソースを保護する場合は、CMEK を手動で作成し、リソースの作成時にその鍵を使用できます。
データセットに含まれていないクエリと一時テーブルには、プロジェクトのデフォルト鍵を使用します。BigQuery リソースを含むプロジェクト内のロケーションごとに、異なるプロジェクトのデフォルト鍵を使用します。プロジェクトのデフォルト鍵の使用方法について詳しくは、プロジェクトのデフォルト鍵を設定するをご覧ください。
BigQuery で CMEK を使用する方法について詳しくは、顧客管理の Cloud KMS 鍵をご覧ください。
保護された BigQuery リソースを作成する
Console
Autokey を使用して BigQuery データセットを作成する前に、必要な権限があることを確認してください。データセット作成の詳細については、データセットの作成をご覧ください。
コンソールで、[BigQuery] ページに移動します。 Google Cloud
[詳細オプション] > [暗号化] が表示されるまで、データセットの作成の手順に従って操作します。
[暗号化] で [Cloud KMS 鍵] を選択します。
[鍵のタイプ] で [Cloud KMS with Autokey] を選択し、[新しい鍵をリクエスト] をクリックします。鍵が正常に作成され、使用できる状態になると、メッセージが表示されます。
データセットの作成を終了するには、[データセットの作成] をクリックします。
Terraform
次の Terraform サンプルは、鍵ハンドルを作成し、 返された鍵を使用して新しいデータセットを保護します。
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "LOCATION"
resource_type_selector = "bigquery.googleapis.com/Dataset"
}
resource "google_bigquery_dataset" "dataset" {
project = "RESOURCE_PROJECT_ID"
dataset_id = "DATASET_ID"
friendly_name = "DATASET_NAME"
description = "DATASET_DESCRIPTION"
location = "LOCATION"
default_table_expiration_ms = 3600000
default_encryption_configuration {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
以下を置き換えます。
RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。DATASET_ID: 新しいデータセットに使用する ID。DATASET_NAME: 新しいデータセットのわかりやすい名前。DATASET_DESCRIPTION: 新しいデータセットの説明。
Cloud KMS では、KeyHandle リソースを削除できません。作成と破棄のパターンを使用している場合、KeyHandle を再作成しようとすると、ALREADY_EXISTS エラーが発生します。この問題を回避するには、以前に作成した KeyHandle をインポートします。詳細については、
この
ページの Terraform での作成と破棄のパターンをご覧ください。
API
KeyHandleを作成して、新しい Cloud KMS 鍵をリクエストします。curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。RESOURCE_TYPE: 作成するリソースのタイプ(bigquery.googleapis.com/Datasetなど)。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }出力の
OPERATION_IDをメモに残しておきます。作成した鍵のリソース ID を取得するには、この値が必要です。鍵ハンドルに関連付けられた Cloud KMS 鍵を見つけます。
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。OPERATION_ID: 前のステップの出力の鍵ハンドルのリクエスト オペレーションの ID。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }出力の
kmsKey要素の値は、このリソースに対して Autokey によって作成された鍵の完全なリソース ID です。このリソース ID は、他の Cloud KMS リソースのリソース ID と同じように使用できます。--destination_kms_keyフラグを指定し、bq mkコマンドを使用して暗号化されたデータセットを作成します。bq --location=LOCATION mk \ --dataset \ --default_kms_key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME \ --default_table_expiration=TABLE_EXPIRATION \ --description="DATASET_DESCRIPTION" \ RESOURCE_PROJECT_ID:DATASET_ID以下を置き換えます。
LOCATION: データセットを作成するロケーション。KEY_PROJECT_ID: 鍵が作成されたプロジェクトのプロジェクト ID。KEY_NAME: 前の手順の出力で返された鍵の名前。TABLE_EXPIRATION: このデータセット内の新しいテーブルのデフォルトの存続期間(秒)。DATASET_DESCRIPTION: 新しいデータセットの説明。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。DATASET_ID: 作成するデータセットの ID。
bqツールの詳細については、bq コマンドライン ツールを使ってみるをご覧ください。
Secret Manager リソースでの Autokey の使用
Autokey は、同じプロジェクトとロケーション内のすべての Secret を保護するための単一の鍵を作成します。鍵がローテーションされると、プロジェクトに追加された新しい Secret は鍵の新しいメイン バージョンを使用します。
Terraform または REST API を使用してリソースを作成する場合、Secret Manager と互換性があるのは Cloud KMS Autokey のみです。
保護された Secret Manager リソースを作成する
Terraform
次の Terraform サンプルは、鍵ハンドルを作成し、返された鍵を使用して、自動レプリケーションで新しい Secret を保護します。
resource "google_kms_key_handle" "my_key_handle" {
provider = google-beta
project = "RESOURCE_PROJECT_ID"
name = "test-key-handle"
location = "global"
resource_type_selector = "secretmanager.googleapis.com/Secret"
}
resource "google_secret_manager_secret" "my_secret" {
project = "RESOURCE_PROJECT_ID"
secret_id = "SECRET_ID"
replication {
auto {
customer_managed_encryption {
kms_key_name = google_kms_key_handle.my_key_handle.kms_key
}
}
}
}
以下を置き換えます。
RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。SECRET_ID: 新しい Secret に使用する ID。
鍵ハンドルがすでに存在する同じプロジェクトとロケーションで Secret の鍵ハンドルを作成しようとすると、エラー メッセージで既存の鍵ハンドルの詳細が返されます。この場合は、鍵ハンドルを作成するブロックが 1 つだけであることを確認してください。ID(KEY_HANDLE)を使用して鍵ハンドルを再利用すると、鍵を共有する追加の Secret を作成できます。
Cloud KMS では、KeyHandle リソースを削除できません。作成と破棄のパターンを使用している場合、KeyHandle を再作成しようとすると、ALREADY_EXISTS エラーが発生します。この問題を回避するには、以前に作成した KeyHandle をインポートします。詳細については、
この
ページの Terraform での作成と破棄のパターンをご覧ください。
API
KeyHandleを作成して、新しい Cloud KMS 鍵をリクエストします。curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "RESOURCE_TYPE"}'以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。RESOURCE_TYPE: 作成するリソースのタイプ(secretmanager.googleapis.com/Secretなど)。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }出力の
OPERATION_IDをメモに残しておきます。作成した鍵のリソース ID を取得するには、この値が必要です。鍵ハンドルがすでに存在する同じプロジェクトとロケーションで Secret の鍵ハンドルを作成しようとすると、エラー メッセージで既存の鍵ハンドルの詳細が返されます。この場合は、次の手順をスキップして
existingKmsKeyフィールドの鍵のリソース ID を使用して新しい Secret を保護します。鍵ハンドルに関連付けられた Cloud KMS 鍵を見つけます。
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。OPERATION_ID: 前のステップの出力の鍵ハンドルのリクエスト オペレーションの ID。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }出力の
kmsKey要素の値は、このリソースに対して Autokey によって作成された鍵の完全なリソース ID です。このリソース ID は、他の Cloud KMS リソースのリソース ID と同じように使用できます。--kms-key-nameフラグを指定してgcloud secrets createコマンドを使用し、自動レプリケーションで暗号化された Secret を作成します。gcloud secrets create "SECRET_ID" \ --replication-policy "automatic" \ --kms-key-name "projects/KEY_PROJECT_ID/locations/global/keyRings/autokey/cryptoKeys/KEY_NAME" \ --project "RESOURCE_PROJECT_ID"以下を置き換えます。
SECRET_ID: 新しい Secret に使用する ID。KEY_PROJECT_ID: 鍵が作成されたプロジェクトのプロジェクト ID。KEY_NAME: 前の手順の出力で返された鍵の名前。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。
Dataflow リソースでの Autokey の使用
Autokey を使用すると、Dataflow ジョブごとに単一の鍵を作成できます。
API
KeyHandleを作成して、新しい Cloud KMS 鍵をリクエストします。curl -H "Content-Type: application/json" \ -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X POST https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles \ -d '{"resource_type_selector": "dataflow.googleapis.com/Job"}'以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.kms.v1.CreateKeyHandleMetadata" } }出力の
OPERATION_IDをメモに残しておきます。作成した鍵のリソース ID を取得するには、この値が必要です。鍵ハンドルに関連付けられた Cloud KMS 鍵を見つけます。
curl -H "X-Goog-User-Project: USER_PROJECT" \ -H "Authorization: Bearer TOKEN" \ -X GET https://cloudkms.googleapis.com/v1/projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID以下を置き換えます。
USER_PROJECT: このリクエストに関連する料金の請求先となるプロジェクト。RESOURCE_PROJECT_ID: Autokey が有効になっていて、保護されたリソースを作成するリソース プロジェクトのプロジェクト ID。LOCATION: 保護されたリソースを作成するロケーション。OPERATION_ID: 前のステップの出力の鍵ハンドルのリクエスト オペレーションの ID。
出力は次のようになります。
{ "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/operations/OPERATION_ID", "done": true, "response": { "@type": "type.googleapis.com/google.cloud.kms.v1.KeyHandle", "name": "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE", "kmsKey": "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/autokey/cryptoKeys/KEY_NAME", "resourceTypeSelector": "RESOURCE_TYPE" } }出力の
kmsKey要素の値は、このリソースに対して Autokey によって作成された鍵の完全なリソース ID です。このリソース ID は、他の Cloud KMS リソースのリソース ID と同じように使用できます。
Terraform での作成と破棄のパターン
Cloud KMS では、KeyHandle リソースを削除できません。Terraform と作成と破棄のパターンを使用している場合、KeyHandle を再作成しようとすると、ALREADY_EXISTS エラーが発生します。この問題は、
import ブロックを使用することで回避できます。google_kms_key_handle リソースの resource ブロックの前に、次のブロックを挿入します。
import {
to = google_kms_key_handle.KEY_HANDLE
id = "projects/RESOURCE_PROJECT_ID/locations/LOCATION/keyHandles/KEY_HANDLE"
}
次のステップ
- 詳しくは、Autokey を使用するタイミングをご覧ください。
- 詳しくは、Autokey の仕組みをご覧ください。