弃用 Compute Engine 中的客户提供的加密密钥 (CSEK)

使用客户提供的加密密钥 (CSEK) 来加密以下 Compute Engine 资源的做法已弃用。自 2026 年 7 月 20 日起,您将无法再使用 CSEK 加密以下任何 Compute Engine 资源:

  • Persistent Disk
  • 图片
  • 机器映像
  • 标准快照和归档快照
  • 即时快照

CSEK 将于 2027 年 7 月 20 日从 Compute Engine 中完全移除。

CSEK 的替代方案

使用由 Cloud Key Management Service 管理的客户管理的加密密钥 (CMEK)。Cloud KMS 可为您的密钥提供增强的安全控制、可审核性和轮替支持,并支持 Hyperdisk 卷。

本文档介绍了如何迁移 CSEK 加密的 Compute Engine 资源以改用 CMEK

如需详细了解如何为 Compute Engine 磁盘、快照和映像使用 CMEK,请参阅使用 Cloud KMS 密钥保护资源

迁移 CSEK 加密的资源以使用客户管理的加密密钥 (CMEK)

您无法移除用于加密资源的 CSEK 并将其替换为 CMEK。您必须创建现有资源的副本,并使用 CMEK 加密该副本。

本部分介绍如何迁移以下 Compute Engine 资源以使用 CMEK 而不是 CSEK:

  • Persistent Disk 卷
  • 图片
  • 机器映像
  • 标准快照和归档快照
  • 即时快照

准备迁移 CSEK 加密的资源

您必须拥有至少一个 Cloud KMS 密钥环和密钥,然后才能使用 CMEK 加密资源。如需创建密钥环和密钥,请按照创建密钥环和密钥中的步骤操作。

迁移 CSEK 加密的 Persistent Disk 卷以使用 CMEK

您无法从磁盘中移除 CSEK。您必须改为通过 CSEK 加密磁盘的快照创建新的 CMEK 加密磁盘。

  1. 可选:如果现有的 CSEK 加密磁盘是正在运行的计算实例的启动磁盘,请停止该实例

  2. 创建 CSEK 加密磁盘的标准快照

  3. 根据标准快照创建新磁盘,并使用 Cloud KMS 密钥对其进行加密。您可以使用 Google Cloud CLI 或 REST。

    gcloud CLI

    使用 gcloud compute disks create 命令

    如果快照的 CSEK 是 RSA 封装密钥,请使用 gcloud beta compute disks create command。 。

    使用 --kms-key 标志为新磁盘指定 CMEK。

    如需创建区域级磁盘,请使用 replica-zones 标志指定磁盘的副本可用区:`--replica-zones=^:^ZONE:REPLICA_ZONE

        gcloud compute disks create NEW_CMEK_DISK_NAME \
        --source-snapshot=CSEK_SNAPSHOT_NAME \
        --csek-key-file=PATH_TO_CSEK_KEY_FILE \
        --kms-key=projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeysKMS_KEY_NAME \
        --no-require-csek-key-create \
        --LOCATION_FLAG=ZONE_OR_REGION \
        --type=DISK_TYPE
    

    替换以下内容:

    • NEW_CMEK_DISK_NAME:新磁盘的名称,例如 migrated-cmek-disk
    • CSEK_SNAPSHOT_NAME:根据 CSEK 加密磁盘创建的快照的名称,例如 my-csek-snapshot
    • PATH_TO_CSEK_KEY_FILE:包含用于加密快照的 CSEK 的文件的路径,例如 /tmp/csek_key.json密钥文件格式中介绍了该文件的格式。
    • KMS_PROJECT_ID:Cloud KMS 密钥所在的项目 ID。
    • KEY_REGION:密钥所在的区域。
    • KEY_RING:包含密钥的密钥环的名称。
    • KMS_KEY_NAME:用于加密磁盘的密钥的名称
    • LOCATION_FLAG:用于指定位置的标志,可以是 zoneregion
    • ZONE_OR_REGION:新磁盘所在的可用区或区域,例如 us-central1-aus-central1
    • DISK_TYPE:新磁盘的类型,例如,如需创建新的平衡永久性磁盘卷,请指定 pd-balanced。如需了解有效值,请参阅 Hyperdisk 卷支持的类型永久性磁盘类型变量

    REST

    disks.insert 方法发出 POST 请求。

    POST https://compute.googleapis.com/compute/API_VERSION_TO_USE/projects/PROJECT_ID/LOCATION_TYPE/ZONE_OR_REGION/disks
    
    {
     "name": "NEW_CMEK_DISK_NAME",
     "type": "https://compute./compute/v1/projects/PROJECT_ID/LOCATION_TYPE/ZONE_OR_REGION/diskTypes/DISK_TYPE",
     "sourceSnapshot": "projects/SNAPSHOT_PROJECT_ID/global/snapshots/CSEK_SNAPSHOT_NAME",
     "diskEncryptionKey": {
        "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KEY_REGION/keyRings/KEY_RING/cryptoKeys/KMS_KEY_NAME"
     },
     "sourceSnapshotEncryptionKey": {
        "CSEK_KEY_TYPE": "RAW_OR_RSA_KEY"
     }
    }
    

    替换以下内容:

    • API_VERSION_TO_USE:要使用的 API 版本。如果 CSEK 密钥是 RSA 封装密钥,请指定 beta。否则,请指定 v1
    • PROJECT_ID:您的项目的 ID,例如 myproject-171
    • LOCATION_TYPE:位置类型,zones 表示创建可用区级磁盘,regions 表示创建区域级磁盘。
    • ZONE_OR_REGION:新磁盘所在的可用区或区域,例如 us-central1-aus-central1
    • DISK_TYPE:新磁盘的类型,例如,如需创建新的平衡永久性磁盘卷,请指定 pd-balanced。如需了解有效值,请参阅 Hyperdisk 卷支持的类型永久性磁盘类型变量
    • NEW_CMEK_DISK_NAME:新磁盘的名称,例如 migrated-cmek-disk
    • SNAPSHOT_PROJECT_ID:快照的项目 ID。
    • CSEK_SNAPSHOT_NAME:根据 CSEK 加密磁盘创建的快照的名称,例如 my-csek-snapshot
    • KMS_PROJECT_ID:Cloud KMS 密钥所在的项目 ID。
    • KEY_REGION:密钥所在的区域。
    • KEY_RING:包含密钥的密钥环的名称。
    • KMS_KEY_NAME:用于加密磁盘的密钥的名称
    • CSEK_KEY_TYPE:客户提供的加密密钥的类型,rawKey 表示原始密钥,rsaEncryptedKey 表示密钥已用 RSA 封装。
    • RAW_OR_RSA_KEY:原始密钥或 RSA 加密密钥的值。
  4. 将新磁盘与计算实例搭配使用:

    1. 如果现有的 CSEK 加密磁盘是正在运行的计算实例的启动磁盘,请停止该实例

    2. 如需开始使用新磁盘,请将 CSEK 加密的源磁盘与实例分离,然后挂接您刚刚创建的新磁盘。

    3. 启动实例

    4. 验证新磁盘是否按预期运行。

    5. 测试新磁盘后,删除快照和原始 CSEK 加密磁盘。

      在您删除磁盘和快照之前,您需要继续为它们支付费用。

迁移 CSEK 加密的即时快照

您无法直接从即时快照中移除 CSEK。您必须完成以下任务,将快照转换为 CMEK 加密的即时快照:

  1. 根据即时快照创建临时 CSEK 加密的标准快照

  2. 通过 CSEK 加密的快照创建临时 CMEK 加密的磁盘

  3. 创建新磁盘的 CMEK 加密即时快照

  4. 创建 CMEK 加密的即时快照后,删除 CSEK 加密的标准快照和临时磁盘。

迁移 CSEK 加密的映像和快照

您无法从映像、归档快照、即时快照或标准快照中移除 CSEK。您必须根据映像或快照创建新的 CMEK 加密磁盘,然后创建新磁盘的映像或快照。

  1. 通过映像或快照创建新的 Google Cloud Hyperdisk 或 Persistent Disk 卷:

  2. 创建新磁盘的映像或标准快照。使用 CMEK 加密新映像或快照。

  3. 删除您之前创建的磁盘。

迁移 CSEK 加密的机器映像

如需通过 CSEK 加密的机器映像创建 CMEK 加密的机器映像,您必须先通过该机器映像创建临时实例,然后再通过该临时实例创建 CMEK 加密的机器映像。请按以下步骤操作。

  1. 通过 CSEK 加密的机器映像创建新实例,并为机器映像中的每个磁盘指定 Cloud KMS 密钥。您必须使用 REST 或 Google Cloud CLI。 如需详细了解如何在创建机器映像时替换属性,请参阅通过机器映像创建实例(使用属性替换)

    Google Cloud CLI

    使用 gcloud compute instances create 命令

    gcloud compute instances create NEW_INSTANCE_NAME \
     --project=PROJECT_ID \
     --zone=ZONE \
     --machine-type=INSTANCE_MACHINE_TYPE \
     --source-machine-image=CSEK_MACHINE_IMAGE_NAME \
     --source-machine-image-csek-key-file=PATH_TO_CSEK_KEY_FILE \
     --create-disk=device-name=BOOT_DISK_DEVICE_NAME,boot=yes,auto-delete=yes,kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/BOOT_DISK_KMS_KEY \
     --create-disk=device-name=DEVICE_NAME_FOR_DATA_DISK_1,boot=no,kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KMS_KEY_FOR_DATA_DISK_1 \
     --create-disk=device-name=DEVICE_NAME_FOR_DATA_DISK_2,boot=no,kms-key=projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KMS_KEY_FOR_DATA_DISK_2
    
    

    替换以下内容:

    • NEW_INSTANCE_NAME:新实例的名称,例如 migrated-instance
    • PROJECT_ID:您要在其中创建实例的项目的 ID,例如 myproject-123
    • ZONE:新实例所在的可用区,例如 us-central1-a
    • INSTANCE_MACHINE_TYPE:新实例的机器类型,例如 c3-standard-4
    • CSEK_MACHINE_IMAGE_NAME:来源 CSEK 加密机器映像的名称。
    • PATH_TO_CSEK_KEY_FILE:包含用于加密源机器映像的 CSEK 的文件的路径,例如 /tmp/csek_key.json。如需了解所需的文件格式,请参阅密钥文件格式
    • BOOT_DISK_DEVICE_NAME:机器映像中定义的启动磁盘的新设备名称。
    • KMS_PROJECT_ID:Cloud KMS 密钥所在的项目 ID。
    • REGION:Cloud KMS 密钥所在的区域,例如 us-central1
    • KEY_RING:包含密钥的密钥环的名称。
    • BOOT_DISK_KMS_KEY:用于加密新实例的启动磁盘的 Cloud KMS 密钥的名称。
    • DEVICE_NAME_FOR_DATA_DISK_1:来源机器映像中定义的第一个数据磁盘的新设备名称。
    • KMS_KEY_FOR_DATA_DISK_1:用于加密第一个数据磁盘的 Cloud KMS 密钥的名称。
    • KMS_KEY_FOR_DATA_DISK_2:用于加密第二个数据磁盘的 Cloud KMS 密钥的名称。

    REST

    instances.insert 方法发出 POST 请求

     POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    
     {
        "name": "NEW_INSTANCE_NAME",
        "sourceMachineImage": "projects/PROJECT_ID/global/machineImages/CSEK_MACHINE_IMAGE_NAME",
           "disks": [
           {
              "deviceName": "BOOT_DISK_DEVICE_NAME",
              "boot": true,
              "diskEncryptionKey": {
                 "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/BOOT_DISK_KMS_KEY"
              }
           },
           {
              "deviceName": "DEVICE_NAME_FOR_DATA_DISK_1",
              "boot": false,
              "diskEncryptionKey": {
                 "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KMS_KEY_FOR_DATA_DISK_1"
              }
           },
           {
              "deviceName": "DEVICE_NAME_FOR_DATA_DISK_2",
              "boot": false,
              "diskEncryptionKey": {
                 "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys//KMS_KEY_FOR_DATA_DISK_2"
              }
           }
        ]
     }
    

    替换以下内容:

    • PROJECT_ID:您要在其中创建临时实例的项目的 ID,例如 myproject-123
    • ZONE:新实例所在的可用区,例如 us-central1-a
    • NEW_INSTANCE_NAME:要创建的临时实例的名称,例如 migrated-instance
    • CSEK_MACHINE_IMAGE_NAME:来源 CSEK 加密机器映像的名称,例如 csek-encrypted-image
    • BOOT_DISK_DEVICE_NAME:来源机器映像中定义的启动磁盘的设备名称,例如 boot-disk-0
    • KMS_PROJECT_ID:Cloud KMS 密钥所在的项目 ID。
    • REGION:Cloud KMS 密钥所在的区域,例如 us-central1
    • KEY_RING:包含加密密钥的密钥环的名称。
    • BOOT_DISK_KMS_KEY:用于加密新启动磁盘的 Cloud KMS 密钥的名称。
    • DEVICE_NAME_FOR_DATA_DISK_1:来源机器映像中定义的第一个数据磁盘的设备名称。
    • KMS_KEY_FOR_DATA_DISK_1:用于加密第一个数据磁盘的 Cloud KMS 密钥的名称。
    • DEVICE_NAME_FOR_DATA_DISK_2:来源机器映像中定义的第二个数据磁盘的设备名称。
    • KMS_KEY_FOR_DATA_DISK_2:用于加密第二个数据磁盘的 Cloud KMS 密钥的名称。
  2. 验证实例是否按预期运行。

  3. 测试实例后,请从新实例创建 CMEK 加密的机器映像

  4. 删除临时实例

移除未使用的资源

为避免因未使用资源而产生费用,请删除不再需要的任何磁盘、机器映像、快照、实例和映像。

后续步骤