使用 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. 启用 Cloud KMS API。

      启用 API

    2. 按照创建密钥环和密钥中所述创建密钥环和密钥。
  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

所需的角色

为确保 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 Cloud 中的默认加密相关的规范,请参阅安全文档中的默认静态加密

限制

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

  • 您不能将自己的密钥用于本地 SSD,因为本地 SSD 磁盘的存续时间不会超过虚拟机的生命周期。本地 SSD 磁盘使用 Google 默认加密来得到保护。

  • 区域级资源(磁盘)可以通过位于同一位置或 global 位置的密钥进行加密。例如,us-west1-a 地区中的磁盘可以通过位于 us-west1global 的密钥进行加密。全球资源(映像、快照)可以通过位于任何位置的密钥进行加密。

  • 使用密钥加密磁盘、快照或映像的操作是永久性的。您不能从资源中移除加密,也不能更改所用的密钥。移除加密或更改密钥的唯一方法是在指定新的加密选项时创建资源的副本。

使用 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:要创建的磁盘类型

通过使用 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 管理的加密密钥,则不添加 --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 管理的加密密钥进行加密。

将使用 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 的影响

停用删除加密密钥会对受该密钥保护的如下资源产生下面这些影响:

  • 挂接了磁盘的虚拟机无法启动。如果您启用了密钥撤销后的虚拟机关闭功能,则挂接了受该密钥保护的磁盘的虚拟机将会关闭。
  • 磁盘无法挂接到虚拟机,也不能为它们创建快照。
  • 快照不能用于创建磁盘。
  • 映像不能用于创建磁盘。

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

在 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 永久性磁盘。