このドキュメントでは、Cloud Key Management Service の Cloud KMS が管理する鍵を使用して、ディスクやその他のストレージ関連のリソースを暗号化する方法について説明します。Cloud KMS が管理する鍵は、顧客管理の暗号鍵(CMEK)と呼ばれます。
CMEK は、ディスク、マシンイメージ、インスタント スナップショット、標準スナップショットなどの Compute Engine リソースを暗号化するときに使用できます。
顧客管理の暗号鍵(CSEK)を使用してディスクやその他のストレージ リソースを暗号化する方法については、顧客指定の暗号鍵でディスクを暗号化するをご覧ください。
ディスクの暗号化についての詳細をご確認ください。
始める前に
- ディスク、イメージ、永続ディスクのスナップショット、仮想マシン(VM)インスタンスについて理解します。
- Compute Engine と Cloud KMS を同じ Google Cloud プロジェクトで実行するか、別のプロジェクトで実行するかを決定します。Google Cloud プロジェクト ID とプロジェクト番号については、プロジェクトの識別をご覧ください。
- Cloud KMS を実行する Google Cloud プロジェクトで、次の操作を行います。
-
Enable the Cloud KMS API.
-
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
必要なロール
Compute Engine サービス エージェントに、Cloud KMS 鍵を使用してリソースを保護するために必要な権限を付与するには、プロジェクトに対するクラウド KMS 暗号鍵の暗号化 / 復号(roles/cloudkms.cryptoKeyEncrypterDecrypter
)IAM ロールを Compute Engine サービス エージェントに付与するよう管理者に依頼してください。ロールの付与の詳細については、アクセスの管理をご覧ください。
管理者は、カスタムロールや他の事前定義ロールを使用して、Compute Engine サービス エージェントに必要な権限を付与することもできます。
Compute Engine サービス エージェントの形式は次のとおりです。
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
ロールの割り当てには、Google Cloud CLI を使用できます。
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
次のように置き換えます。
KMS_PROJECT_ID
: Cloud KMS を実行している Google Cloud プロジェクトの ID(Compute Engine を実行するプロジェクトと同じプロジェクトの場合も)PROJECT_NUMBER
: Compute Engine リソースを実行する Google Cloud プロジェクトのプロジェクト番号(Google Cloud プロジェクト ID ではありません)
暗号化の仕様
Compute Engine でデータを保護するために使用される Cloud KMS 鍵は、AES-256 鍵です。これらの鍵は鍵暗号鍵であり、データ自体を暗号化するのではなく、データを暗号化するデータ暗号鍵を暗号化します。
ディスク上のデータは、Google が所有し、Google が管理する鍵を使用して暗号化されます。Google Cloud のデフォルトの暗号化に関する仕様については、セキュリティ ドキュメントのデフォルトの保存データの暗号化をご覧ください。
制限事項
CMEK で既存のリソースを暗号化することはできません。ディスク、イメージ、スナップショットは、作成時にのみ CMEK で暗号化できます。
CMEK で暗号化されたインスタント スナップショットからディスクを作成する場合は、ソースディスクの暗号化に使用した鍵を指定する必要があります。ディスククローンや標準スナップショットなど、他の CMEK で暗号化されたリソースを操作する場合は、鍵を指定する必要はありません。
ローカル SSD ディスクでは、鍵は Google Cloud インフラストラクチャにより管理され、VM が停止すると削除されるため、独自の鍵を使用することはできません。
リージョン リソース(ディスク)は、次のいずれかの Cloud KMS ロケーションの鍵でのみ暗号化できます。
- ディスクと同じリージョン内の鍵
- ディスクと同じ地理的ロケーションにあるマルチリージョン鍵
- グローバル ロケーション内の鍵
たとえば、ゾーン
us-west1-a
内のディスクは、グローバル ロケーション、us-west1
リージョン、またはus
マルチリージョンの鍵によって暗号化できます。グローバル リソース(イメージやスナップショットなど)は、任意のロケーションの鍵で暗号化できます。詳細については、Cloud KMS のロケーションの種類をご覧ください。
ディスク、スナップショット、イメージによる鍵の暗号化は永続的です。リソースから暗号化を削除することや、使用する鍵を変更することはできません。暗号化や変更鍵を削除するには、新しい暗号化オプションを指定して、リソースのコピーを作成する必要があります。
手動または自動での鍵の作成
Cloud KMS 鍵は手動で作成することも、Cloud KMS Autokey(プレビュー)で作成することもできます。Autokey は、プロビジョニングと割り当てを自動化することで、Cloud KMS 鍵の作成と管理を簡素化します。Autokey を使用する場合、キーリング、鍵、サービス アカウントを事前にプロビジョニングする必要はありません。これらは、Compute Engine リソースの作成中にオンデマンドで生成されます。詳細については、Autokey の概要をご覧ください。
キーリングと鍵を手動で作成する
Cloud KMS を実行する Google Cloud プロジェクトでは、キーリングと鍵の作成の説明に沿ってキーリングと鍵を作成します。
CMEK で新しい Persistent Disk を暗号化する
VM またはディスクの作成時に鍵を指定することにより、新しい Persistent Disk を暗号化できます。
コンソール
- Google Cloud コンソールで、[ディスク] ページに移動します。
- [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
- [暗号化] で、[顧客管理の暗号鍵] を選択します。
- プルダウン メニューで、このディスクの暗号化に使用する Cloud KMS 鍵を選択します。
- ディスクを作成するには、[作成] をクリックします。
gcloud
gcloud compute disks create
コマンドを使用して暗号化されたディスクを作成し、--kms-key
フラグを使用して鍵を指定します。
gcloud compute disks create DISK_NAME \ --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前KMS_PROJECT_ID
: Cloud KMS 鍵を所有するプロジェクトREGION
: 鍵が配置されているリージョンKEY_RING
: 鍵を含むキーリングの名前KEY
: ディスクの暗号化に使用された鍵の名前
REST
instances.insert
メソッドに対して POST
リクエストを作成します。ディスクを暗号化するには、diskEncryptionKey
プロパティで kmsKeyName
プロパティを使用します。たとえば、VM の作成時に Cloud KMS 鍵を使用して新しいディスクを暗号化するには、次のコマンドを使用します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE", "disks": [ { "type": "PERSISTENT", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" }, "initializeParams": { "sourceImage": "SOURCE_IMAGE" }, "boot": true } ], ... }
次のように置き換えます。
PROJECT_ID
: Compute Engine を実行する Google Cloud プロジェクトの IDZONE
: VM を作成するゾーンMACHINE_TYPE
: マシンタイプ(例:c3-standard-4
)。KMS_PROJECT_ID
: Cloud KMS 鍵を所有するプロジェクトREGION
: ディスクが配置されるリージョンKEY_RING
: 鍵を含むキーリングの名前KEY
: ディスクの暗号化に使用された鍵の名前SOURCE_IMAGE
: VM の作成時に使用するイメージ(例:projects/debian-cloud/global/images/debian-11-bullseye-v20231115
)
同様に、disks.insert
メソッドを使用して新しいスタンドアロン Persistent Disk を作成し、Cloud KMS 鍵で暗号化できます。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks?sourceImage=SOURCE_IMAGE { "name": "DISK_NAME", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" }, "type": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE" }
次のように置き換えます。
PROJECT_ID
: Compute Engine を実行する Google Cloud プロジェクトの IDZONE
: ディスクを作成するゾーンSOURCE_IMAGE
: ディスクの作成時に使用するイメージ(例:projects/debian-cloud/global/images/debian-11-bullseye-v20231115
)DISK_NAME
: 新しいディスクの名前。KMS_PROJECT_ID
: Cloud KMS 鍵を所有するプロジェクトREGION
: ディスクが配置されるリージョンKEY_RING
: 鍵を含むキーリングの名前KEY
: ディスクの暗号化に使用された鍵の名前DISK_TYPE
: 作成するディスクのタイプ。
CMEK で暗号化されたディスクからスナップショットを作成する
CMEK で暗号化されたディスクから作成されたスナップショットを保護するには、ディスクの暗号化に使用した同じ暗号鍵を使用する必要があります。
ソースディスクが CMEK を使用していない場合は、CMEK を使用するスナップショットは作成できません。また、CMEK で暗号化されたディスクまたはスナップショットを変換して Google Cloud のデフォルトの暗号化を使用することはできません。このためには、まったく新しいディスク イメージと新しい永続ディスクを作成する必要があります。
CMEK で暗号化されたディスクのスナップショットは増分です。
コンソール
- Google Cloud コンソールで、[スナップショット] ページに移動します。
- [スナップショットを作成] をクリックします。
- [ソースディスク] で、スナップショットのソースディスクを選択します。スナップショットは、ソースディスクと同じ鍵で自動的に暗号化されます。
gcloud
顧客管理の暗号化では、ディスクの暗号化に使用された Cloud KMS 鍵が、スナップショットの暗号化にも使用されます。
スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成するか、別の保存場所を使用して作成できます。詳細については、スナップショットの保存場所を選択するをご覧ください。
スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、
gcloud compute snapshots create
コマンドを使用します。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE
-
また、スナップショット設定をオーバーライドしてスナップショットをカスタマイズされた保存場所に作成するには、
--storage-location
フラグを含めて、スナップショットの保存先を指定します。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --storage-location=STORAGE_LOCATION
次のように置き換えます。
- SNAPSHOT_NAME: スナップショットの名前。
- SOURCE_ZONE: ソースディスクのゾーン。
- SOURCE_DISK_NAME: スナップショットを作成するディスク ボリュームの名前。
- SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。スナップショットの種類が指定されていない場合は、
STANDARD
(標準)スナップショットが作成されます。 -
STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。
--storage-location
パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。
REST
スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成することも、別のお好きな保存場所を使用して作成することもできます。詳細については、スナップショットの保存場所を選択するをご覧ください。
-
スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、
snapshots.insert
メソッドにPOST
リクエストを発行します。POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY" }, "snapshotType": "SNAPSHOT_TYPE" }
-
または、スナップショット設定をオーバーライドしてカスタマイズされた保存場所にスナップショットを作成するには、
snapshots.insert
メソッドにPOST
リクエストをstorageLocations
プロパティを含めて送信します。POST https://compute.googleapis.com/compute/v1/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/SNAPSHOT_KEY" }, "snapshotType": "SNAPSHOT_TYPE", "storageLocations": [ "STORAGE_LOCATION" ], }
次のように置き換えます。
- DESTINATION_PROJECT_ID: スナップショットを作成するプロジェクトの ID。
- SNAPSHOT_NAME: スナップショットの名前。
- SOURCE_PROJECT_ID: ソースディスク プロジェクトの ID。
- SOURCE_ZONE: ソースディスクのゾーン。
- SOURCE_DISK_NAME: スナップショットを作成するディスクの名前。
- KMS_PROJECT_ID: Cloud Key Management Service に保存されている暗号鍵を含むプロジェクト。
- KEY_REGION: Cloud KMS 鍵が配置されているリージョン。
- KEY_RING: Cloud KMS 鍵を含むキーリングの名前。
- SNAPSHOT_KEY: ソースディスクの暗号化に使用した Cloud KMS 鍵の名前。
- SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。
スナップショットの種類が指定されていない場合は、
STANDARD
(標準)スナップショットが作成されます。 -
STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。
storageLocations
パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。
インポートしたイメージを CMEK で暗号化する
Compute Engine へのカスタム イメージのインポート時に新しいイメージを暗号化できます。イメージをインポートする前に、ディスク イメージ ファイルを作成して圧縮し、圧縮したファイルを Cloud Storage にアップロードする必要があります。
コンソール
- Google Cloud コンソールで、[イメージ] ページに移動します。
- [イメージを作成] をクリックします。
- [ソースディスク] で、イメージを作成するディスクを選択します。
- [暗号化] で、[顧客管理の暗号鍵] を選択します。
- プルダウン メニューで、このイメージの暗号化に使用する Cloud KMS 鍵を選択します。
- イメージ作成プロセスを続けます。
gcloud
イメージをインポートして暗号化するには、gcloud compute images create
コマンドを使用します。顧客管理の暗号化の場合は、イメージの Cloud KMS 鍵を指定します。
gcloud compute images create IMAGE_NAME \ --source-disk=SOURCE_DISK \ --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
次のように置き換えます。
IMAGE_NAME
: 作成するイメージの名前SOURCE_DISK
: スナップショットを作成するディスクの名前KMS_PROJECT_ID
: Cloud KMS 鍵を含むプロジェクトREGION
: Cloud KMS 鍵が配置されているリージョンKEY_RING
: Cloud KMS 鍵を含むキーリングKEY
: 新しいディスクの暗号化に使用する鍵の名前
REST
インポートしたイメージを暗号化するには、images.insert
メソッドに対する POST
リクエストを作成します。圧縮されたファイルの URI を指定し、イメージ作成リクエストに imageEncryptionKey
プロパティを追加して、イメージを暗号化するための鍵を kmsKeyName
プロパティに指定します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "rawDisk": { "source": "http://storage.googleapis.com/example-image/example-image.tar.gz" }, "name": "IMAGE_NAME", "sourceType": "RAW", "imageEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" } }
次のように置き換えます。
PROJECT_ID
: 暗号化されたイメージを作成するプロジェクトIMAGE_NAME
: 作成するイメージの名前KMS_PROJECT_ID
: Cloud KMS 鍵を含むプロジェクトREGION
: Cloud KMS 鍵が配置されているリージョンKEY_RING
: Cloud KMS 鍵を含むキーリングKEY
: ソースディスクの暗号化に使用した鍵の名前
CMEK で暗号化されたスナップショットから Persistent Disk を作成する
暗号化されたスナップショットを使用して新しいスタンドアロンの Persistent Disk を作成する手順は次のとおりです。
コンソール
- Google Cloud コンソールで、[ディスク] ページに移動します。
- [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
- [ソースの種類] で使用するスナップショットまたはイメージを選択します。
省略可: 新しい暗号鍵を指定する場合は、[暗号化] で使用する暗号鍵のタイプを指定し、暗号鍵の情報を入力します。
顧客管理の暗号鍵または顧客指定の暗号鍵を削除するには、[暗号化] でデフォルト値の [Google が管理する暗号鍵] を使用します。
Persistent Disk の作成プロセスを続けます。
gcloud
暗号化されたスナップショットから新しいスタンドアロン Persistent Disk を作成するには、gcloud compute disks create
コマンドを使用します。
gcloud compute disks create DISK_NAME \ --source-snapshot SNAPSHOT_NAME \ --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY
次のように置き換えます。
DISK_NAME
: 新しいディスクの名前SNAPSHOT_NAME
: 暗号化されたスナップショットの名前スナップショットの代わりにイメージを使用するには、
--source-snapshot SNAPSHOT_NAME
を--image IMAGE_NAME
に置き換えます。KMS_PROJECT_ID
: 省略可。Cloud KMS 鍵を含むプロジェクトREGION
: 省略可。Cloud KMS 鍵が配置されているリージョンKEY_RING
: 省略可。Cloud KMS 鍵を含むキーリングKEY
: 省略可。新しいディスクの暗号化に使用する Cloud KMS 鍵の名前新しいディスクを暗号化するには、次のいずれかを行います。
- 新しい顧客管理の暗号鍵を指定するには、
--kms-key
フラグを使用します。 - Google が所有し管理するデフォルトの鍵を使用するには、
--kms-key
フラグを指定しないでください。
- 新しい顧客管理の暗号鍵を指定するには、
REST
暗号化されたスナップショットから新しいスタンドアロン Persistent Disk を作成するため、compute.disks.insert
メソッドに対する POST
リクエストを作成します。sourceSnapshot
プロパティを使用してスナップショットを指定します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "DISK_NAME", "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/SNAPSHOT_NAME", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" } }
次のように置き換えます。
PROJECT_ID
: 新しいディスクを作成するプロジェクトZONE
: 新しいディスクを作成するゾーン。DISK_NAME
: 新しいディスクの名前SNAPSHOT_PROJECT_ID
: スナップショットを含むプロジェクトSNAPSHOT_NAME
: 暗号化されたスナップショットの名前スナップショットの代わりにイメージを使用するには、
sourceSnapshot
をsourceImage
に置き換えます。KMS_PROJECT_ID
: 省略可。Cloud KMS 鍵を含むプロジェクトREGION
: 省略可。Cloud KMS 鍵が配置されているリージョンKEY_RING
: 省略可。Cloud KMS 鍵を含むキーリングKEY
: 省略可。新しいディスクの暗号化に使用する Cloud KMS 鍵の名前diskEncryptionKey
を指定すると、指定された Cloud KMS 鍵を使用してディスクが暗号化されます。diskEncryptionKey
を指定しない場合、Google が所有し、Google が管理する鍵を使用してディスクが暗号化されます。
CMEK で暗号化されたブートディスクを新しい VM にアタッチする
コンソール
Google Cloud コンソールで、[インスタンスの作成] ページに移動します。
VM の詳細を指定し、[ブートディスク] セクションで [変更] をクリックします。次に、以下の操作を行います。
- [既存のディスク] をクリックします。
- [ディスク] リストで、VM にアタッチする既存のディスクを選択します。
- [選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
新しい VM を作成するときに暗号化されたディスクをアタッチするには、gcloud compute instances create
コマンドを使用します。暗号化されたブートディスクを指定するには、次の例のように --disk
フラグを使用します。
gcloud compute instances create VM_NAME \ ... --disk name=DISK_NAME,boot=yes
次のように置き換えます。
VM_NAME
: 作成する VM の名前DISK_NAME
: 暗号化されたディスクの名前
REST
compute.instances.insert
メソッドに対して POST
リクエストを作成します。次の例に示すように、disks
プロパティを使用して、暗号化されたブートディスクを指定します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "disks": [ { "deviceName": "DISK_ALIAS", "source": "projects/PROJECT_ID/zones/ZONE/disks/DISK_NAME" } ] }
次のように置き換えます。
PROJECT_ID
: 新しい VM を作成するプロジェクトZONE
: 新しい VM を作成するゾーンDISK_ALIAS
: Linux オペレーティング システムを実行する VM の/dev/disk/by-id/google-*
ディレクトリでディスク エイリアスとして使用する一意のデバイス名。この名前を使用して、インスタンスからマウントやサイズ変更などのためにディスクを参照できます。デバイス名を指定しない場合、VM はこのディスクに適用するデフォルトのデバイス名を選択します。このデバイス名の形式はpersistent-disk-x
であり、x
は Compute Engine により割り当てられた番号です。このフィールドは、Persistent Disk ボリュームにのみ適用されます。DISK_NAME
: 暗号化されたディスクの名前
Persistent Disk から Cloud KMS 暗号鍵を削除する
暗号化されたディスクの内容を復号し、代わりに Google Cloud のデフォルトの暗号化を使用する新しいディスクを作成できます。Google Cloud はデフォルトですべての保存データを暗号化します。
- 暗号化されたディスクのスナップショットを作成します。
- 暗号化された新しいスナップショットを使用して、新しい永続ディスクを作成します。
新しい Persistent Disk を作成すると、Google Cloud のデフォルトの暗号化を使用してディスクの内容が保護されます。そのディスクから作成されるスナップショットはいずれも、デフォルトの暗号化を使用する必要があります。
ディスクの Cloud KMS 暗号鍵をローテーションする
新しい Cloud KMS 鍵バージョンを使用する新しいディスクを作成し、ディスクの暗号化に使用する鍵をローテーションします。鍵のローテーションは、標準化されたセキュリティ プラクティスを遵守するためのベスト プラクティスです。鍵をローテーションする手順は次のとおりです。
- Cloud KMS 鍵をローテーションします。
- 暗号化されたディスクのスナップショットを作成します。
- 新しいスナップショットを使用して、前の手順でローテーションした鍵で新しいディスクを作成します。
- 古い暗号鍵を使用している VM にアタッチされているディスクを交換します。
新しいディスクを作成すると、新しい鍵バージョンが暗号化に使用されます。そのディスクから作成するスナップショットでは、最新の主キーのバージョンが使用されます。
鍵をローテーションする場合、以前の鍵バージョンで暗号化されたデータは自動的に再暗号化されません。詳細については、データの再暗号化をご覧ください。鍵をローテーションしても、既存の鍵バージョンが自動的に無効化または破棄されることはありません。
CMEK の無効化または削除の影響
暗号鍵を無効化または削除すると、その鍵で保護されているリソースに次のような影響があります。
- ディスクがアタッチされている VM は起動できません。鍵取り消し時の VM シャットダウンを有効にしている場合、鍵で保護されているディスクがアタッチされた VM はシャットダウンされます。
- ディスクは VM にアタッチできません。また、VM のスナップショットも作成できません。
- スナップショットはディスクの作成には使用できません。
- イメージを使用してディスクを作成することはできません。
鍵を無効にしている場合は、鍵を有効にすることで上記の影響を元に戻すことができます。キーを削除した場合、上記の影響を元に戻すことはできません。
Cloud KMS 鍵取り消し時の VM シャットダウンを構成する
VM にアタッチされている Persistent Disk を保護する Cloud KMS 鍵を取り消すと、VM を自動的にシャットダウンするように構成できます。鍵を取り消すには、鍵を無効化または削除します。この設定を有効にすると、VM は鍵の取り消しから 7 時間以内にシャットダウンされます。
鍵を再度有効にすると、鍵で保護されたディスクがアタッチされた VM を再起動できます。鍵を有効にした後、VM は自動的に再起動されません。
コンソール
Cloud KMS 鍵が取り消されたときにシャットダウンするように VM を構成するには、次の操作を行います。
- Cloud KMS 鍵で保護されているディスクを含む VM の作成を開始します。
- [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] メニューを開きます。
- [管理] セクションを開きます。
- [顧客管理の暗号鍵(CMEK)の取り消しポリシー] で [シャットダウン] を選択します。
gcloud
VM を作成するには gcloud compute instances create
コマンドを使用し、--key-revocation-action-type=stop
を指定します。
gcloud compute instances createVM_NAME
\ --imageIMAGE
\ --key-revocation-action-type=stop
REST
instances.insert
メソッドを使用して VM を作成し、プロパティ "keyRevocationActionType"
を "STOP"
に設定します。次の例では、公開イメージから VM を作成します。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
"machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
"name": "VM_NAME
",
"disks": [
{
"initializeParams": {
"sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE"
},
"boot": true
}
],
"keyRevocationActionType": "STOP"
}
また、Google Cloud CLI または REST を使用して、鍵取り消し時にシャットダウンされる VM を作成するインスタンス テンプレートを構成することもできます。
コンソール
インスタンス テンプレートを使用して、Cloud KMS 鍵の取り消し時にシャットダウンされる VM を作成できます。
- Cloud KMS 鍵で保護されているディスクを含む新しいインスタンス テンプレートの作成を開始します。
- [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] メニューを開きます。
- [管理] セクションを開きます。
- [顧客管理の暗号鍵(CMEK)の取り消しポリシー] で [シャットダウン] を選択します。
gcloud
gcloud compute instance-templates create
コマンドを使用してインスタンス テンプレートを作成し、--key-revocation-action-type=stop
を指定します。
gcloud compute instance-templates create INSTANCE_TEMPLATE_NAME
\
--key-revocation-action-type=stop
REST
instanceTemplates.insert
メソッドに対する POST リクエストを作成します。リクエスト本文で、必要なすべての構成フィールドを明示的に定義する必要があります。このテンプレートから作成された VM を鍵取り消し時にシャットダウンする場合は、"keyRevocationActionType":"STOP"
を指定します。
たとえば、鍵取り消し時にシャットダウンされる VM を作成するために最小限必要なフィールドを持つインスタンス テンプレートは、次のようになります。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID
/zones/ZONE
/instanceTemplates { "name": "example-template", "properties": { "machineType": "e2-standard-4", "networkInterfaces": [ { "network": "global/networks/default", "accessConfigs": [ { "name": "external-IP", "type": "ONE_TO_ONE_NAT" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/family/debian-11" } } ], "keyRevocationActionType": "STOP" } }
Cloud KMS の取り消し時にシャットダウンされるように構成された VM を作成してから、Cloud KMS 鍵で暗号化された Persistent Disk を作成してアタッチします。