使用客户提供的加密密钥 (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 加密磁盘。
可选:如果现有的 CSEK 加密磁盘是正在运行的计算实例的启动磁盘,请停止该实例。
根据标准快照创建新磁盘,并使用 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:用于指定位置的标志,可以是
zone或region。 - ZONE_OR_REGION:新磁盘所在的可用区或区域,例如
us-central1-a或us-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-a或us-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 加密密钥的值。
- NEW_CMEK_DISK_NAME:新磁盘的名称,例如
将新磁盘与计算实例搭配使用:
迁移 CSEK 加密的即时快照
您无法直接从即时快照中移除 CSEK。您必须完成以下任务,将快照转换为 CMEK 加密的即时快照:
创建 CMEK 加密的即时快照后,删除 CSEK 加密的标准快照和临时磁盘。
迁移 CSEK 加密的映像和快照
您无法从映像、归档快照、即时快照或标准快照中移除 CSEK。您必须根据映像或快照创建新的 CMEK 加密磁盘,然后创建新磁盘的映像或快照。
通过映像或快照创建新的 Google Cloud Hyperdisk 或 Persistent Disk 卷:
创建新磁盘的映像或标准快照。使用 CMEK 加密新映像或快照。
删除您之前创建的磁盘。
迁移 CSEK 加密的机器映像
如需通过 CSEK 加密的机器映像创建 CMEK 加密的机器映像,您必须先通过该机器映像创建临时实例,然后再通过该临时实例创建 CMEK 加密的机器映像。请按以下步骤操作。
通过 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 密钥的名称。
- NEW_INSTANCE_NAME:新实例的名称,例如
验证实例是否按预期运行。
测试实例后,请从新实例创建 CMEK 加密的机器映像。
移除未使用的资源
为避免因未使用资源而产生费用,请删除不再需要的任何磁盘、机器映像、快照、实例和映像。
后续步骤
- 了解使用 CMEK 的最佳实践
- 管理用于 Compute Engine 磁盘和快照的 CMEK: