使用 Cloud KMS 密钥保护资源


本文档介绍如何使用手动创建的 Cloud Key Management Service Cloud KMS 密钥来加密磁盘和其他存储相关资源。在 Cloud KMS 中管理的密钥称为客户管理的加密密钥 (CMEK)

您可以使用 CMEK 加密 Compute Engine 资源,例如磁盘机器映像即时快照标准快照

如需详细了解如何使用客户提供的加密密钥 (CSEK) 来加密磁盘和其他存储资源,请参阅使用客户提供的加密密钥来加密磁盘

详细了解磁盘加密

准备工作

  • 了解磁盘映像永久性磁盘快照虚拟机 (VM) 实例
  • 决定是在同一个 Google Cloud 项目中还是在不同的项目中运行 Compute Engine 和 Cloud KMS。如需了解 Google Cloud 项目 ID 和项目编号,请参阅识别项目
  • 对于运行 Cloud KMS 的 Google Cloud 项目,请执行以下操作:
    1. Enable the Cloud KMS API.

      Enable the API

  • + 如果您想在机密模式下创建新的 Hyperdisk Balanced 卷,请查看相关限制受支持的区域,确保您的用例受支持。
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 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 密钥保护资源所需的权限,请让您的管理员为 Compute Engine 服务代理授予项目的 Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您的管理员还可以通过自定义角色或其他预定义角色为 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) 具有硬件支持的 Enclave 提供的额外安全属性。

限制

  • 您无法使用 CMEK 加密现有资源。您只能在创建磁盘、映像和快照时使用 CMEK 来将其加密。

  • 通过 CMEK 加密的即时快照创建磁盘时,您必须指定用于加密来源磁盘的密钥。在使用其他 CMEK 加密的资源(例如磁盘克隆和标准快照)时,您无需指定密钥。

  • 您不能将自己的密钥用于本地 SSD 磁盘,因为这些密钥由 Google 基础设施管理并在虚拟机终止时被删除。

  • 区域级资源(磁盘)只能通过以下 Cloud KMS 位置之一中的密钥进行加密:

    • 与磁盘位于同一区域的密钥
    • 与磁盘位于同一地理位置的多区域密钥
    • 全球位置的密钥。

    例如,us-west1-a 可用区中的磁盘可以通过位于全球位置、us-west1 区域或 us 多区域的密钥进行加密。

    全球资源(例如映像和快照)可以通过位于任何位置的密钥进行加密。如需了解详情,请参阅 Cloud KMS 的位置类型

  • 使用密钥加密磁盘、快照或映像的操作是永久性的。您不能从资源中移除加密、更改加密类型或更改使用的密钥。移除加密或更改加密密钥的唯一方法是在指定新的加密选项时创建资源的副本。例如,如需将磁盘从使用 Google 生成的密钥更改为使用 CMEK,请按以下步骤操作:

    1. 创建磁盘的快照
    2. 根据快照创建一块新的磁盘。创建新磁盘时,选择所需的加密类型。

    如需了解详情,请参阅更改磁盘的类型

手动或自动密钥创建

您可以手动创建 Cloud KMS 密钥,也可以使用 Cloud KMS Autokey。Autokey 通过自动执行预配和分配来简化 Cloud KMS 密钥的创建和管理。借助 Autokey,您无需提前预配密钥环、密钥和服务账号。而是在 Compute Engine 资源创建过程中按需生成它们。如需了解详情,请参阅 Autokey 概览

手动创建密钥环和密钥

对于运行 Cloud KMS 的 Google Cloud 项目,请按照创建密钥环和密钥中所述创建密钥环和密钥。

使用 CMEK 加密新的永久性磁盘

您可以在创建虚拟机或磁盘期间通过提供密钥来加密新的永久性磁盘。

控制台

  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 属性。例如,在创建虚拟机期间,您可以通过以下方式,使用 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:要在其中创建虚拟机的可用区
  • MACHINE_TYPE:机器类型,例如 c3-standard-4
  • KMS_PROJECT_ID:拥有 Cloud KMS 密钥的项目
  • REGION:磁盘所在的区域
  • KEY_RING:包含密钥的密钥环的名称
  • KEY:用于加密磁盘的密钥的名称
  • SOURCE_IMAGE:创建虚拟机时使用的映像,例如 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. 机密计算部分中,选择启用机密计算服务
  8. 如需创建磁盘,请点击创建

gcloud

使用 gcloud compute disks create 命令使用适用于平衡 Hyperdisk 的机密模式加密新磁盘。使用 --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 的机密模式加密磁盘,请将 diskEncryptionKey 属性与 kmsKeyName 属性搭配使用,并设置 enableConfidentialCompute 标志。例如,在创建虚拟机期间,您可以通过以下方式,使用 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:要在其中创建虚拟机的可用区
  • MACHINE_TYPE:机器类型,例如 n2d-standard-4
  • KMS_PROJECT_ID:拥有 Cloud HSM 密钥的项目
  • REGION:磁盘所在的区域
  • KEY_RING:包含密钥的密钥环的名称
  • KEY:用于加密磁盘的密钥的名称
  • SOURCE_IMAGE:创建虚拟机时要使用的支持机密虚拟机的映像,例如 projects/debian-cloud/global/images/debian-11-bullseye-v20231115

同样,您可以使用 disks.insert 方法为 Hyperdisk Balanced 创建新的机密模式:

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:创建磁盘时支持机密虚拟机的映像,例如 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:快照类型:STANDARDARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。
    • STORAGE_LOCATION:可选:要存储快照的 Cloud Storage 多区域Cloud Storage 区域。请注意,您只能指定一个存储位置。

      仅当您想要替换快照设置中配置的预定义或自定义默认存储位置时,才应使用 --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:快照类型:STANDARDARCHIVE。如果未指定快照类型,系统会创建 STANDARD 快照。
  • STORAGE_LOCATION:可选:要存储快照的 Cloud Storage 多区域Cloud Storage 区域。请注意,您只能指定一个存储位置。

    仅当您想要替换快照设置中配置的预定义或自定义默认存储位置时,才应使用 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 永久性磁盘,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 点击创建磁盘,然后输入新磁盘的属性。
  3. 对于来源类型,选择要使用的快照或映像。
  4. 可选:如要指定新的加密密钥,在加密字段中,请指定要使用的加密密钥类型,然后提供加密密钥信息。

    如果您要移除客户管理的加密密钥或客户提供的加密密钥,在加密字段中,请使用默认值 Google 管理的加密密钥

  5. 继续执行永久性磁盘创建过程。

gcloud

使用 gcloud compute disks create 命令根据加密快照创建新的独立 Persistent Disk 永久性磁盘。

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 拥有且由 Google 管理的密钥,请勿添加 --kms-key 标志。

REST

构建对 compute.disks.insert 方法的 POST 请求,以根据加密快照创建新的独立 Persistent Disk 永久性磁盘。使用 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 加密的启动磁盘挂接到新虚拟机

控制台

  1. 在 Google Cloud 控制台中,转到创建实例页面。

    转到“创建实例”

  2. 指定虚拟机详细信息,然后在启动磁盘部分中点击更改。之后,执行以下操作:

    1. 点击现有磁盘
    2. 磁盘列表中,选择要挂接到虚拟机的现有磁盘。
    3. 点击选择
  3. 继续虚拟机创建过程。

gcloud

如需在创建新虚拟机时挂接加密磁盘,请使用 gcloud compute instances create 命令。使用 --disk 标志指定加密的启动磁盘,如以下示例所示:

gcloud compute instances create VM_NAME \
  ...
  --disk name=DISK_NAME,boot=yes

替换以下内容:

  • VM_NAME:您要创建的虚拟机的名称
  • 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:创建新虚拟机的项目
  • ZONE:要在其中创建新虚拟机的可用区
  • DISK_ALIAS:用作磁盘别名的唯一设备名称,在运行 Linux 操作系统的虚拟机的 /dev/disk/by-id/google-* 目录中使用。此名称可用于引用磁盘以在实例中执行装载或调整大小等操作。如果您未指定设备名称,虚拟机将选择要应用于此磁盘的默认设备名称,格式为 persistent-disk-x,其中 x 是 Compute Engine 分配的号码。此字段仅适用于 Persistent Disk 卷。
  • DISK_NAME:加密磁盘的名称

从永久性磁盘中移除 Cloud KMS 加密密钥

您可以解密加密磁盘的内容,并创建一个使用 Google Cloud 默认加密密钥的新磁盘。默认情况下,Google Cloud 会对所有静态数据进行加密

  1. 创建加密磁盘的快照
  2. 使用新的加密快照来创建新的永久性磁盘

创建新的 Persistent Disk 永久性磁盘后,该磁盘使用 Google Cloud 的默认加密密钥来保护磁盘内容。您从该磁盘创建的任何快照也必须使用默认加密。

轮替磁盘的 Cloud KMS 加密密钥

通过创建使用新 Cloud KMS 密钥版本的新磁盘来轮替用于加密磁盘的密钥。轮替密钥是遵循标准化安全做法的最佳做法。如需轮替密钥,请执行以下操作:

  1. 轮替 Cloud KMS 密钥
  2. 创建加密磁盘的快照
  3. 使用新快照来创建新的磁盘,其中的密钥是在上一步中轮替的密钥。
  4. 替换挂接到虚拟机并使用旧加密密钥的磁盘。

在您创建新的磁盘时,该磁盘会使用新的密钥版本进行加密。您根据该磁盘创建的任何快照都会使用最新的主密钥版本。

轮替密钥时,使用先前的密钥版本加密的数据不会自动重新加密。如需了解详情,请参阅重新加密数据。轮替密钥不会自动停用销毁现有密钥版本。

停用或删除 CMEK

如果您不再需要 CMEK 或想阻止其使用,请删除停用该密钥。删除、停用或移除密钥的 IAM 权限也称为撤消密钥。

撤消密钥对加密资源的影响

撤消加密密钥后,受该密钥保护的资源会受到以下影响:

  • 如果虚拟机的任何挂接磁盘的密钥被撤消,您将无法启动该虚拟机。
  • 如果使用该密钥的磁盘已附加到正在运行的虚拟机,并且您为该虚拟机启用了密钥撤消后的虚拟机关闭功能,则 Compute Engine 会在 7 小时内关闭该虚拟机。
  • 您无法将已撤消密钥的磁盘挂接到虚拟机,也无法从该磁盘创建快照。
  • 您无法使用使用已撤消的密钥加密的映像或快照来创建磁盘。

如果您停用了密钥,则可以通过启用密钥来逆转上述效果。如果您删除了密钥,则无法逆转上述效果。

在 Cloud KMS 密钥撤销时配置虚拟机关闭

您可以将虚拟机配置为在撤消有助于保护挂接到虚拟机的磁盘的 Cloud KMS 密钥时自动关闭。您可以撤消密钥,方法是停用删除该密钥。启用此设置后,虚拟机将在密钥撤消后的 7 小时内关闭。

如果您再次启用密钥,则可以重启挂接了受该密钥保护的磁盘的虚拟机。启用密钥后,虚拟机不会自动重启。

控制台

要将虚拟机配置为在 Cloud KMS 密钥被撤消时关闭,请执行以下操作:

  1. 开始创建一个包含受 Cloud KMS 密钥保护的磁盘的虚拟机。
  2. 打开网络、磁盘、安全、管理、单租户菜单。
  3. 展开管理部分。
  4. 客户管理的加密密钥 (CMEK) 撤消政策下,选择关闭

gcloud

使用 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 方法创建虚拟机,并将属性 "keyRevocationActionType" 设置为 "STOP"。以下示例通过公共映像创建虚拟机。

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 创建在密钥撤消后关闭的虚拟机。

控制台

您可以使用实例模板创建在 Cloud KMS 密钥撤消后关闭的虚拟机。

  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 请求。在请求正文中,您必须明确定义所有必填的配置字段。如果您希望通过此模板创建的虚拟机在撤消密钥后关闭,请指定 "keyRevocationActionType":"STOP"。 例如,具有最少必需字段的实例模板将创建在密钥撤消后关闭的虚拟机,如下所示:

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 密钥撤消后关闭的虚拟机后,请创建挂接使用 Cloud KMS 密钥加密的 Persistent Disk 永久性磁盘。