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. Enable the Cloud KMS API.

      Enable the API

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

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

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

Hyperdisk Balanced と Cloud HSM の情報保護モードでは、データ暗号鍵(DEK)にハードウェアベース エンクレーブによる追加のセキュリティ プロパティが付与されます。

制限事項

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

  • CMEK で暗号化されたインスタント スナップショットからディスクを作成する場合は、ソースディスクの暗号化に使用した鍵を指定する必要があります。ディスククローンや標準スナップショットなど、他の CMEK で暗号化されたリソースを操作する場合は、鍵を指定する必要はありません。

  • ローカル SSD ディスクでは、鍵は Google Cloud インフラストラクチャにより管理され、VM が停止すると削除されるため、独自の鍵を使用することはできません。

  • リージョン リソース(ディスク)は、次のいずれかの Cloud KMS ロケーションの鍵でのみ暗号化できます。

    • ディスクと同じリージョン内の鍵
    • ディスクと同じ地理的ロケーションにあるマルチリージョン鍵
    • グローバル ロケーション内の鍵

    たとえば、ゾーン us-west1-a 内のディスクは、グローバル ロケーション、us-west1 リージョン、または us マルチリージョンの鍵によって暗号化できます。

    グローバル リソース(イメージやスナップショットなど)は、任意のロケーションの鍵で暗号化できます。詳細については、Cloud KMS のロケーションの種類をご覧ください。

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

  • Hyperdisk Balanced の情報保護モードは、既存の Hyperdisk の制限事項を継承します。また、次の制限事項があります。

    • 情報保護モードの Hyperdisk Balanced ディスクをアタッチできるのは、次のリージョンの Confidential VM または Confidential Google Kubernetes Engine ノードを使用する N2D VM に限られます。
      • europe-west4
      • us-central1
      • us-east4
      • us-east5
      • us-south1
      • us-west4
    • Hyperdisk Balanced ディスクの情報保護モードの仮想マシン(VM)インスタンスを一時停止または再開することはできません。
    • Hyperdisk Balanced の情報保護モードでは、Hyperdisk ストレージ プールを使用できません。
    • Hyperdisk Balanced ディスクの情報保護モードからカスタム イメージを作成することはできません。

手動または自動での鍵の作成

Cloud KMS 鍵は手動で作成することも、Cloud KMS Autokey(プレビュー)で作成することもできます。Autokey は、プロビジョニングと割り当てを自動化することで、Cloud KMS 鍵の作成と管理を簡素化します。Autokey を使用する場合、キーリング、鍵、サービス アカウントを事前にプロビジョニングする必要はありません。これらは、Compute Engine リソースの作成中にオンデマンドで生成されます。詳細については、Autokey の概要をご覧ください。

キーリングと鍵を手動で作成する

Cloud KMS を実行する Google Cloud プロジェクトでは、キーリングと鍵の作成の説明に沿ってキーリングと鍵を作成します。

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: 作成するディスクのタイプ

情報保護モードで Hyperdisk Balanced ボリュームを作成する

Google Cloud コンソール、Google Cloud CLI、または REST を使用して、情報保護モードで新しい Hyperdisk を作成します。

コンソール

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

    [ディスク] に移動

  2. [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
  3. [ディスクの設定] セクションで、ディスクタイプに [Hyperdisk Balanced] を選択します。
  4. 省略可。ディスクのデフォルトのディスクの [サイズ]、[プロビジョニングされた IOPS]、[プロビジョニングされたスループット] の設定を変更します。
  5. [暗号化] セクションで、[Cloud KMS 鍵] を選択します。
  6. 鍵のリストで、このディスクの暗号化に使用する Cloud HSM 鍵を選択します。
  7. [Confidential Computing] セクションで、[Confidential Computing サービスを有効にする] を選択します。
  8. ディスクを作成するには、[作成] をクリックします。

gcloud

gcloud compute disks create コマンドを使用して、Hyperdisk Balanced の情報保護モードで新しいディスクを暗号化します。--confidential-compute フラグを使用して情報保護モードを有効にし、--kms-key フラグを使用して鍵を指定します。

gcloud compute disks create DISK_NAME \
  --type=hyperdisk-balanced \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY \
  --confidential-compute

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

  • DISK_NAME: 新しいディスクの名前
  • KMS_PROJECT_ID: Cloud HSM 鍵を所有するプロジェクト
  • REGION: 鍵が配置されているリージョン
  • KEY_RING: 鍵を含むキーリングの名前
  • KEY: ディスクの暗号化に使用された鍵の名前

REST

instances.insert メソッドに対して POST リクエストを作成します。Hyperdisk Balanced の情報保護モードでディスクを暗号化するには、diskEncryptionKey プロパティで kmsKeyName プロパティを使用し、enableConfidentialCompute フラグを設定します。たとえば、VM の作成時に Cloud HSM 鍵を使用して新しいディスクを暗号化するには、次のコマンドを使用します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
"machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
"disks": [
 {
  "type": "DISK_TYPE",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
  "initializeParams": {
   "sourceImage": "SOURCE_IMAGE",
   "enableConfidentialCompute": true
  },
  "boot": true
 }
],
"networkInterfaces": [
  {
   "network": "global/networks/default"
  }
]
}

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

  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced
  • PROJECT_ID: Compute Engine を実行する Google Cloud プロジェクトの ID
  • ZONE: VM を作成するゾーン
  • MACHINE_TYPE: マシンタイプ。例: n2d-standard-4
  • KMS_PROJECT_ID: Cloud HSM 鍵を所有するプロジェクト
  • REGION: ディスクが配置されるリージョン
  • KEY_RING: 鍵を含むキーリングの名前
  • KEY: ディスクの暗号化に使用された鍵の名前
  • SOURCE_IMAGE: VM の作成時に使用する Confidential VM をサポートするイメージ(例: projects/debian-cloud/global/images/debian-11-bullseye-v20231115

同様に、disks.insert メソッドを使用して、Hyperdisk Balanced の新しい Confidential モードを作成できます。

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",
 "enableConfidentialCompute": true
}

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

  • PROJECT_ID: Compute Engine を実行する Google Cloud プロジェクトの ID
  • ZONE: ディスクを作成するゾーン
  • SOURCE_IMAGE: ディスクの作成時に Confidential VM をサポートするイメージ。例: projects/debian-cloud/global/images/debian-11-bullseye-v20231115
  • DISK_NAME: 新しいディスクの名前
  • KMS_PROJECT_ID: Cloud HSM 鍵を所有するプロジェクト
  • REGION: ディスクが配置されるリージョン
  • KEY_RING: 鍵を含むキーリングの名前
  • KEY: ディスクの暗号化に使用された鍵の名前
  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced

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 が所有し、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 を作成してアタッチします。