Cloud KMS 鍵を使用してリソースを保護する


このドキュメントでは、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 プロジェクトで、次の操作を行います。
    1. Cloud KMS API を有効にします。

      API を有効にする

    2. キーリングと鍵の作成の説明に沿って、キーリングと鍵を作成します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      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 Cloud のデフォルトの暗号化に関する仕様については、セキュリティ ドキュメントのデフォルトの保存データの暗号化をご覧ください。

制限事項

  • CMEK で既存のリソースを暗号化することはできません。ディスク、イメージ、スナップショットは、作成時にのみ CMEK で暗号化できます。

  • ローカル SSD ディスクは VM の存続期間を超えて存続しないため、ローカル SSD で独自の鍵を使用することはできません。ローカル SSD ディスクは、Google のデフォルトの暗号化によって保護されます。

  • リージョン リソース(ディスク)は、同じロケーションまたは global ロケーションの鍵によって暗号化できます。たとえば、ゾーン us-west1-a 内のディスクは、us-west1 または global の鍵によって暗号化できます。グローバル リソース(イメージ、スナップショット)は、任意のロケーションの鍵で暗号化できます。

  • ディスク、スナップショット、イメージによる鍵の暗号化は永続的です。リソースから暗号化を削除することや、使用する鍵を変更することはできません。暗号化や変更鍵を削除するには、新しい暗号化オプションを指定して、リソースのコピーを作成する必要があります。

CMEK で新しい Persistent Disk を暗号化する

VM またはディスクの作成時に鍵を指定することにより、新しい Persistent Disk を暗号化できます。

コンソール

  1. Google Cloud コンソールで、[ディスク] ページに移動します。

    [ディスク] に移動

  2. [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
  3. [暗号化] で、[顧客管理の暗号鍵] を選択します。
  4. プルダウン メニューで、このディスクの暗号化に使用する Cloud KMS 鍵を選択します。
  5. ディスクを作成するには、[作成] をクリックします。

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 プロジェクトの ID
  • ZONE: 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 プロジェクトの ID
  • ZONE: ディスクを作成するゾーン
  • 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 で暗号化されたディスクのスナップショットは増分です。

コンソール

  1. Google Cloud コンソールで、[スナップショット] ページに移動します。

    [スナップショット] に移動

  2. [スナップショットを作成] をクリックします。
  3. [ソースディスク] で、スナップショットのソースディスクを選択します。スナップショットは、ソースディスクと同じ鍵で自動的に暗号化されます。

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 にアップロードする必要があります。

コンソール

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

    [イメージ] に移動

  2. [イメージを作成] をクリックします。
  3. [ソースディスク] で、イメージを作成するディスクを選択します。
  4. [暗号化] で、[顧客管理の暗号鍵] を選択します。
  5. プルダウン メニューで、このイメージの暗号化に使用する Cloud KMS 鍵を選択します。
  6. イメージ作成プロセスを続けます。

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 を作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、[ディスク] ページに移動します。

    [ディスク] に移動

  2. [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
  3. [ソースの種類] で使用するスナップショットまたはイメージを選択します。
  4. 省略可: 新しい暗号鍵を指定する場合は、[暗号化] で使用する暗号鍵のタイプを指定し、暗号鍵の情報を入力します。

    顧客管理の暗号鍵または顧客指定の暗号鍵を削除するには、[暗号化] でデフォルト値の [Google が管理する暗号鍵] を使用します。

  5. 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: 暗号化されたスナップショットの名前

    スナップショットの代わりにイメージを使用するには、sourceSnapshotsourceImage に置き換えます。

  • KMS_PROJECT_ID: 省略可。Cloud KMS 鍵を含むプロジェクト

  • REGION: 省略可。Cloud KMS 鍵が配置されているリージョン

  • KEY_RING: 省略可。Cloud KMS 鍵を含むキーリング

  • KEY: 省略可。新しいディスクの暗号化に使用する Cloud KMS 鍵の名前

    diskEncryptionKey を指定すると、指定された Cloud KMS 鍵を使用してディスクが暗号化されます。diskEncryptionKey を指定しない場合、Google マネージド暗号化を使用してディスクが暗号化されます。

CMEK で暗号化されたブートディスクを新しい VM にアタッチする

コンソール

  1. Google Cloud コンソールで、[インスタンスの作成] ページに移動します。

    [インスタンスの作成] に移動

  2. VM の詳細を指定し、[ブートディスク] セクションで [変更] をクリックします。次に、以下の操作を行います。

    1. [既存のディスク] をクリックします。
    2. [ディスク] リストで、VM にアタッチする既存のディスクを選択します。
    3. [選択] をクリックします。
  3. 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 はデフォルトですべての保存データを暗号化します。

  1. 暗号化されたディスクのスナップショットを作成します
  2. 暗号化された新しいスナップショットを使用して、新しい永続ディスクを作成します。

新しい Persistent Disk を作成すると、Google Cloud のデフォルトの暗号化を使用してディスクの内容が保護されます。そのディスクから作成されるスナップショットはいずれも、デフォルトの暗号化を使用する必要があります。

ディスクの Cloud KMS 暗号鍵をローテーションする

新しい Cloud KMS 鍵バージョンを使用する新しいディスクを作成し、ディスクの暗号化に使用する鍵をローテーションします。鍵のローテーションは、標準化されたセキュリティ プラクティスを遵守するためのベスト プラクティスです。鍵をローテーションする手順は次のとおりです。

  1. Cloud KMS 鍵をローテーションします
  2. 暗号化されたディスクのスナップショットを作成します
  3. 新しいスナップショットを使用して、前の手順でローテーションした鍵で新しいディスクを作成します。
  4. 古い暗号鍵を使用している VM にアタッチされているディスクを交換します。

新しいディスクを作成すると、新しい鍵バージョンが暗号化に使用されます。そのディスクから作成するスナップショットでは、最新の主キーのバージョンが使用されます。

鍵をローテーションする場合、以前の鍵バージョンで暗号化されたデータは自動的に再暗号化されません。詳細については、データの再暗号化をご覧ください。鍵をローテーションしても、既存の鍵バージョンが自動的に無効化または破棄されることはありません。

CMEK の無効化または削除の影響

暗号鍵を無効化または削除すると、その鍵で保護されているリソースに次のような影響があります。

  • ディスクがアタッチされている VM は起動できません。鍵取り消し時の VM シャットダウンを有効にしている場合、鍵で保護されているディスクがアタッチされた VM はシャットダウンされます。
  • ディスクは VM にアタッチできません。また、VM のスナップショットも作成できません。
  • スナップショットはディスクの作成には使用できません。
  • イメージを使用してディスクを作成することはできません。

鍵を無効にしている場合は、鍵を有効にすることで上記の影響を元に戻すことができます。キーを削除した場合、上記の影響を元に戻すことはできません。

Cloud KMS 鍵取り消し時の VM シャットダウンを構成する

VM にアタッチされている Persistent Disk を保護する Cloud KMS 鍵を取り消すと、VM を自動的にシャットダウンするように構成できます。鍵を取り消すには、鍵を無効化または削除します。この設定を有効にすると、VM は鍵の取り消しから 7 時間以内にシャットダウンされます。

鍵を再度有効にすると、鍵で保護されたディスクがアタッチされた VM を再起動できます。鍵を有効にした後、VM は自動的に再起動されません。

コンソール

Cloud KMS 鍵が取り消されたときにシャットダウンするように VM を構成するには、次の操作を行います。

  1. Cloud KMS 鍵で保護されているディスクを含む VM の作成を開始します。
  2. [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] メニューを開きます。
  3. [管理] セクションを開きます。
  4. [顧客管理の暗号鍵(CMEK)の取り消しポリシー] で [シャットダウン] を選択します。

gcloud

VM を作成するには gcloud compute instances create コマンドを使用し、--key-revocation-action-type=stop を指定します。

gcloud compute instances create VM_NAME \
  --image IMAGE \
  --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 を作成できます。

  1. Cloud KMS 鍵で保護されているディスクを含む新しいインスタンス テンプレートの作成を開始します。
  2. [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] メニューを開きます。
  3. [管理] セクションを開きます。
  4. [顧客管理の暗号鍵(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 を作成してアタッチします。