Cloud KMS 鍵によるリソースの保護

デフォルトでは、Compute Engine は保存されている顧客コンテンツを暗号化します。Compute Engine はこの暗号化を自動的に処理および管理するため、お客様側での作業は必要ありません。ただし、この暗号化を自分で制御して管理する場合は、鍵暗号鍵を使用できます。鍵暗号鍵ではデータは直接暗号化されませんが、データを暗号化するデータ暗号鍵を暗号化するために使用されます。

Compute Engine の鍵暗号鍵には 2 つのオプションがあります。

  • Cloud Key Management Service を使用して鍵暗号鍵を作成し、管理します。詳細については、鍵管理をご覧ください。このトピックでは、顧客管理の暗号鍵(CMEK)と呼ばれるこのオプションの詳細について説明します。

  • 独自の鍵暗号鍵を作成して管理します。顧客指定の暗号鍵(CSEK)とも呼ばれるこのオプションの詳細については、顧客指定の暗号鍵でディスクを暗号化するをご覧ください。

Cloud KMS によって保護される Compute Engine リソースを作成した後、Compute Engine は使用された KMS 鍵を知っているため、鍵を指定する必要はありません。これは、Compute Engine が顧客指定の鍵で保護されたリソースにアクセスする方法とは異なります。そのようなアクセスの場合、顧客指定の鍵を指定する必要があります。

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

始める前に

  1. ディスクイメージ永続ディスク スナップショットインスタンスについて理解します。

  2. Compute Engine と Cloud KMS を同じ Google Cloud Platform プロジェクトで実行するか、異なるプロジェクトで実行するかを決定します。以下の説明のサンプルでは次の表記方法を使用します。

    • [PROJECT_ID] は、Compute Engine を実行するプロジェクトのプロジェクト ID です
    • [PROJECT_NUMBER] は、Compute Engine を実行するプロジェクトのプロジェクト番号です
    • [KMS_PROJECT_ID] は、Cloud KMS を実行するプロジェクトのプロジェクト ID です(Compute Engine を実行するプロジェクトと同じプロジェクトである可能性もあります)。

    GCP プロジェクト ID とプロジェクト番号については、プロジェクトの識別をご覧ください。

  3. Compute Engine を実行する GCP プロジェクトで、Compute Engine の API アクセスを設定します。

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

    1. Cloud KMS API を有効化します。
    2. 鍵リングと鍵の作成の説明に従って、鍵リングと鍵を作成します。
  5. Cloud KMS CryptoKey Encrypter/Decrypter 役割Compute Engine Service Agent に割り当てます。このアカウントの形式は次のとおりです。

    service-[PROJECT_NUMBER]@compute-system.iam.gserviceaccount.com
    

    役割を割り当てるには、gcloud コマンドライン ツールを使用できます。

    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 を実行する GCP プロジェクトの ID に置き換え、[PROJECT_NUMBER] は Compute Engine リソースを実行する GCP プロジェクトのプロジェクト番号(プロジェクト ID ではありません)で置き換えてください。

仕様

暗号化

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

制限事項

  • 独自の鍵で暗号化できるのは、新しい永続ディスク、イメージ、スナップショットのみです。独自の鍵で既存のリソースを暗号化することはできません。

  • ローカル SSD が存続するのは仮想マシンの存続期間内に限られます。したがって、ローカル SSD で独自の鍵を使うことはできません。ローカル SSD はエフェメラル暗号鍵ですでに保護されていますが、Google はこの鍵を保持しません。

独自の鍵で新しい永続ディスクを暗号化する

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

Console

  1. Google Cloud Platform Console で、[ディスク] ページに移動します。

    [ディスク] ページに移動

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

コマンドライン

gcloud compute disks \
create encrypted-disk \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

diskEncryptionKey プロパティと kmsKeyName プロパティを使用してディスクを暗号化します。たとえば、インスタンスを作成するときに Cloud KMS 鍵を使用して新しいディスクを暗号化するには、次のようにします。

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

{
"machineType": "zones/[ZONE]/machineTypes/n1-standard-1",
"disks": [
 {
  "type": "PERSISTENT",
  "diskEncryptionKey": {
    "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
  "initializeParams": {
   "sourceImage": "projects/debian-cloud/global/images/debian-8-jessie-v20160301"
  },
  "boot": true
 }
],
...
}

同様に、API を使用して新しいスタンドアロン永続ディスクを作成し、Cloud KMS 鍵で暗号化することもできます。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/
[ZONE]/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F
projects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-8-jessie-v20160301

{
 "name": "new-encrypted-disk-key",
 "diskEncryptionKey": {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]"
  },
 "type": "zones/[ZONE]/diskTypes/pd-standard"
}

暗号化されたディスクからスナップショットを作成する

CMEK で暗号化されたディスクからスナップショットを作成する場合は、ディスクの暗号化に使用したのと同じ暗号鍵でスナップショットを保護する必要があります。

Console

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

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

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

コマンドライン

gcloud compute \
disks snapshot encrypted-disk \
--zone [ZONE]

API

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/example-disk/createSnapshot

{
 "snapshotEncryptionKey":  {
   "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[SNAPSHOT_KEY]"
 },
 "name": "snapshot-encrypted-disk"
}

CMEK によって保護されるスナップショットは、ディスク自体がすでに CMEK で保護されていない限り作成できません。さらに、暗号化されたディスクまたは暗号化されたスナップショットを変換して Compute Engine のデフォルトの暗号化を使用するには、完全に新しいディスク イメージと新しい永続ディスクを作成する必要があります。

インポートしたイメージを暗号化する

Compute Engine へのカスタム イメージのインポート時に新しいイメージを暗号化できます。イメージをインポートする前に、ディスク イメージ ファイルを作成して圧縮し、圧縮されたファイルを Google Cloud Storage にアップロードする必要があります。

Console

  1. Google Cloud Platform Console で、[イメージ] ページに移動します。

    [イメージ] ページに移動

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

コマンドライン

gcloud compute \
images create [...] \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

API

インポートしたイメージを暗号化するには、圧縮ファイルへの URI を指定し、イメージ作成リクエストに imageEncryptionKey プロパティを追加し、イメージを暗号化するための鍵を kmsKeyName プロパティに指定します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images

{
"rawDisk": {
 "source": "http://storage.googleapis.com/example-image/example-image.tar.gz"
},
"name": "new-encrypted-image",
"sourceType": "RAW",
"imageEncryptionKey": {
  "kmsKeyName": "projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[IMAGE_KEY]"
  }
}

暗号化されたリソースから永続ディスクを作成する

暗号化されたスナップショットからディスクを作成する

暗号化されたスナップショットを使用して新しいスタンドアロンの永続ディスクを作成するには:

Console

  1. Google Cloud Platform Console で、[ディスク] ページに移動します。

    [ディスク] ページに移動

  2. [ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
  3. [ソースの種類] で、必要なスナップショットまたはイメージを選択します。
  4. 永続ディスクの作成プロセスを続けます。

コマンドライン

gcloud compute \
disks create [...] \
--source-snapshot example-snapshot \
--kms-key projects/[KMS_PROJECT_ID]/locations/[REGION]/keyRings/[KEY_RING]/cryptoKeys/[KEY]

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

API

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks

{
"name": "disk-from-encrypted-snapshot",
"sourceSnapshot": "global/snapshots/encrypted-snapshot"
}

暗号化されたディスクを新しいインスタンスに接続する

Console

  1. Google Cloud Platform Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [インスタンスを作成] をクリックします。
  3. [ブートディスク] の [変更] をクリックします。
  4. [既存のディスク] をクリックします。
  5. インスタンスに接続する既存のディスクを選択します。
  6. インスタンス作成処理を続けます。

コマンドライン

gcloud compute instances \
create example-instance \
--disk name=encrypted-disk,boot=yes

API

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/[PROJECT_ID]/zones/[ZONE]/disks/encrypted-disk"
  }
 }
]

永続ディスクから Cloud KMS 暗号鍵を削除する

暗号化されたディスクの内容を復号し、代わりに Compute Engine のデフォルトの暗号化を使用する新しいディスクを作成できます。

  1. 暗号化されたディスクのイメージを作成し、新しいイメージに対して自動暗号化を指定します。
  2. 新しいイメージを使用して、新しい永続ディスクを作成します。

このようにして作成された新しい永続ディスクは、Compute Engine のデフォルトの暗号化を使用してディスクの内容を保護します。そのディスクから作成されるスナップショットはいずれも、デフォルトの暗号化を使用する必要があります。

暗号鍵の無効化または有効化の影響

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

  • 鍵で保護されているディスクが接続されている VM は起動できません
  • 鍵で保護されているディスクは、仮想マシンに接続することも、スナップショットを作成することもできません
  • 鍵で保護されたスナップショットはディスクの作成に使用できません
  • 鍵で保護されたイメージは、ディスクの作成に使用できません

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

制限事項

  • リージョン リソース(ディスク)は、同じロケーションまたは global ロケーションの鍵で暗号化できます。たとえば、ゾーン us-west1-a のディスクは us-west1 または global の鍵で暗号化できます。グローバル リソース(イメージ、スナップショット)は、任意のロケーションの鍵で暗号化できます。
このページは役立ちましたか?評価をお願いいたします。

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

Compute Engine ドキュメント