本页面可帮助您在 Google Cloud 控制台中从备份保险柜恢复 Compute Engine 实例,该实例可以定位到新的 Compute Engine 实例或新的 Persistent Disk。如需选择性地将单个磁盘恢复到新的 Persistent Disk,请参阅从 Compute Engine 实例备份执行选择性磁盘恢复。
所需的角色
如需获得从备份保险柜恢复 Compute Engine 实例所需的权限,请让管理员向您授予项目、目标项目、Backup and DR 服务代理和 VPC 宿主项目的以下 IAM 角色:
-
恢复 Compute Engine 实例:
- Backup and DR Restore User (
roles/backupdr.restoreUser) - Compute Viewer (
roles/compute.viewer)
- Backup and DR Restore User (
-
向服务代理授予角色:Backup and DR Compute Engine Operator (
roles/backupdr.computeEngineOperator) -
使用共享 VPC(可选):Compute Network User (
roles/compute.networkUser) -
从 Compute Engine 实例备份执行选择性磁盘恢复操作:Backup and DR Disk Operator (
roles/backupdr.diskOperator) -
使用跨项目服务账号(可选):Service Account User (
roles/iam.serviceAccountUser)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含从备份保险柜恢复 Compute Engine 实例所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
您需要具备以下权限,才能从备份保险柜恢复 Compute Engine 实例:
-
恢复 Compute Engine 实例:
-
backupdr.bvbackups.restore -
backupdr.compute.restoreFromBackupVault -
backupdr.backupVaults.get -
backupdr.backupVaults.list -
backupdr.bvbackups.list -
backupdr.bvdataSources.get -
backupdr.bvdataSources.list -
backupdr.bvbackups.get
-
-
使用 Google Cloud 控制台恢复 Compute Engine 实例(需要额外权限):
-
compute.acceleratorTypes.list -
compute.disks.list -
compute.machineTypes.list -
compute.projects.get -
compute.regions.list -
compute.zones.list
-
恢复 Compute Engine 实例
请按照以下说明恢复 Compute Engine 实例。
控制台
在 Google Cloud 控制台中,前往已保管的备份页面。
此处列出了所有具有保险柜备份的 Compute Engine 实例。
点击操作图标,选择恢复操作。系统会显示恢复页面,您可以在其中选择以下恢复选项:
- 选择资源名称。
- 选择备份创建时间。
- 选择恢复范围,即整个 Compute Engine 实例或单个磁盘。如需恢复单个磁盘,请参阅从 Compute Engine 实例备份执行选择性磁盘恢复。
- 选择要将虚拟机恢复到的项目名称。
点击继续。
系统会显示通过备份创建新的 Compute Engine 实例页面,其中 Compute Engine 实例属性会根据源 Compute Engine 实例属性预先填充。您可以修改属性以创建新的 Compute Engine 实例,例如,更改区域或机器类型的选择。
点击创建,基于所选备份创建新的虚拟机。
gcloud
使用
gcloud backup-dr backup-vaults describe命令获取备份保险柜服务账号:gcloud backup-dr backup-vaults describe BACKUP_VAULT_NAME / --location=REGION_NAME
替换以下内容:
BACKUP_VAULT_NAME:要从中恢复数据的备份保险柜名称。
REGION_NAME:备份保险柜的区域。
在恢复 Compute Engine 实例之前,请使用以下命令获取数据源 ID 和所需备份的 ID:
使用
gcloud backup-dr data-sources list命令查找数据源 ID:gcloud backup-dr data-sources list \ --project=PROJECT_NAME \ --location=REGION_NAME \ --backup-vault=BACKUP_VAULT_NAME \ "--filter=dataSourceGcpResource.computeInstanceDatasourceProperties.name:(DATA_SOURCE)" \ "--format=get(name)"
使用
gcloud backup-dr backups list命令列出数据源的现有备份,以找到正确的BACKUP_ID:gcloud backup-dr backups list \ --location=REGION_NAME \ --backup-vault=BACKUP_VAULT_NAME \ --data-source=DATA_SOURCE \ "--format=yaml(backupType,computeInstanceBackupProperties.sourceInstance,consistencyTime,enforcedRetentionEndTime,expireTime,name)"
如需恢复 Compute Engine 实例,请使用以下命令:
使用
gcloud backup-dr backups restore compute命令,在与工作负载项目相同的项目中恢复具有备份 ID 的 Compute Engine 实例:gcloud backup-dr backups restore compute test-backup-id \ --project=PROJECT_NAME --location=REGION_NAME \ --backup-vault=BACKUP_VAULT_NAME --data-source=DATA_SOURCE\ --name=NAME --target-zone=TARGET_ZONE \ --target-project=TARGET_PROJECT
使用
gcloud backup-dr backups restore compute projects命令,通过备份完整资源网址在与工作负载项目相同的项目中恢复 Compute Engine 实例:gcloud backup-dr backups restore compute projects/test-project-id/locations/us-central1/backupVaults/test-vault/dataSources/test-ds/backups/test-backup-id \ --name=NAME --target-zone=TARGET_ZONE \ --target-project=TARGET_PROJECT
使用
gcloud backup-dr backups restore compute命令恢复具有自定义服务账号和网络配置的 Compute Engine 实例:gcloud backup-dr backups restore compute test-backup-id \ --project=PROJECT --location=REGION \ --backup-vault=BACKUPVAULT_NAME --data-source=DATA_SOURCE\ --name=NAME --target-zone=TARGET_ZONE \ --target-project=TARGET_PROJECT \ --network-interface=network=NETWORK,subnet=SUBNET \ --service-account=SERVICE_ACCOUNT \ --scopes=SCOPE
替换以下内容:
PROJECT:备份保险柜项目的名称。
REGION:备份保险柜的位置。
BACKUPVAULT_NAME:要从中恢复数据的备份保险柜名称。
DATA_SOURCE:要从中恢复数据的数据源名称。
NAME:恢复的 Compute Engine 实例的名称。
TARGET_ZONE:Compute Engine 实例恢复到的区域。
TARGET_PROJECT:Compute Engine 实例恢复到的项目。
NETWORK:Compute Engine 实例的网络 URI。
SUBNET:Compute Engine 实例的子网 URI。
SERVICE_ACCOUNT:已恢复的 Compute Engine 实例的服务账号。
SCOPE:服务账号的授权范围。
使用
gcloud backup-dr backups restore disk命令恢复 Compute Engine 磁盘。如需详细了解如何从 Compute Engine 实例备份中恢复单个磁盘,请参阅从 Compute Engine 实例备份执行选择性磁盘恢复。gcloud backup-dr backups restore disk BACKUP_NAME \ --name=DISK_NAME \ --target-project=TARGET_PROJECT_NAME \ [--source-instance-boot-disk | --source-instance-disk-device-name=DEVICE_NAME] \ [--target-zone=TARGET_ZONE_NAME | --target-region=TARGET_REGION_NAME --replica-zones=ZONE_NAME] \ [DISK_OVERRIDE_FLAGS...] \ [--async]
如需替换其他 Compute Engine 实例属性,请参阅备份和灾难恢复 gcloud CLI 命令概览。
选择性磁盘备份的恢复限制
从使用选择性磁盘备份创建的备份中恢复 Compute Engine 实例时,系统只会恢复备份时受保护的磁盘,并将其挂接到新的虚拟机 (VM) 实例。在 Google Cloud 控制台中,摘要部分会突出显示备份中包含的受保护磁盘(例如 Protected disks: 2 out of 3)。
为防止在恢复包含已排除磁盘的虚拟机时出现启动失败,请将源虚拟机的启动配置设为忽略缺失的磁盘(例如,在 /etc/fstab 中添加 nofail 装载选项)。如需详细了解此 Compute Engine 限制,请参阅永久性磁盘恢复限制和注意事项。
从启用了 CMEK 的备份保险柜恢复备份
从启用了 CMEK 的备份保险柜进行恢复时的加密处理方式取决于您是要恢复整个 Compute Engine 实例还是单个磁盘。
整个 Compute Engine 实例恢复的 CMEK 处理
当您从存储在启用了 CMEK 的备份保险柜中的备份恢复整个 Compute Engine 实例时,备份本身受保险柜的 CMEK 保护。默认情况下,恢复的 Compute Engine 实例中的磁盘会保留其原始加密设置,即 Google 管理的加密密钥或其原始 CMEK。如 CMEK 概念中所述,访问保险柜的 CMEK 所需的权限会授予 Backup and DR 服务代理。
针对单个磁盘恢复的 CMEK 处理
如果您选择单个磁盘恢复范围,从 Compute Engine 实例备份中恢复单个磁盘,则会发生以下行为:
默认行为:通过备份创建的新磁盘会尝试使用与原始 Compute Engine 实例中的来源磁盘相同的加密密钥。
如果来源磁盘使用 Google 管理的加密,则恢复的磁盘也使用 Google 管理的加密。
如果来源磁盘使用了特定 CMEK,则恢复的磁盘会尝试使用同一 CMEK。
密钥不可用:如果目标项目或区域无法访问来源磁盘使用的原始 CMEK(例如,由于密钥删除、权限更改或跨地区恢复),则恢复操作会失败,除非您替换加密设置。
替换加密设置:您可以在恢复过程中使用以下说明更改已恢复磁盘的加密设置:
控制台
在恢复向导的目标磁盘属性部分中,您可以使用以下选项之一修改加密设置:
选择其他客户管理的加密密钥 (CMEK)。
改用由 Google 管理的加密。
gcloud
将
gcloud backup-dr backups restore disk命令与--source-instance-boot-disk或--source-instance-disk-device-name标志结合使用时:- 如需为恢复的磁盘指定其他 CMEK,请使用
--kms-key标志:
--kms-key=projects/MY-KEY-PROJECT/locations/us-central1/keyRings/MY-RING/cryptoKeys/MY-NEW-KEY- 如需强制恢复的磁盘使用 Google 管理的加密,请使用
--clear-encryption-key标志。
- 如需为恢复的磁盘指定其他 CMEK,请使用
CMEK 替换项的权限:
如果您替换加密以使用新或不同的 CMEK,则必须确保目标项目的 Compute Engine 服务代理对指定的 KMS 密钥具有
Cloud KMS CryptoKey Encrypter/Decrypter角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。服务代理账号格式为:service-TARGET_PROJECT_NUMBER@compute-system.。Compute Engine 需要此权限才能创建使用所选密钥加密的新磁盘。
如需详细了解磁盘恢复操作和标志用法,请参阅从备份保险柜恢复 Persistent Disk。
从启用了 CMEK 的备份保险柜恢复备份
从启用了 CMEK 的备份保险柜恢复备份时,恢复的资源的加密方式取决于来源的加密方式:
- 如果源资源受 CMEK 保护:恢复的资源默认使用与源资源相同的 CMEK 密钥。例如:
- 使用密钥
K1加密的 Compute Engine 永久性磁盘会恢复到使用K1加密的磁盘。 - 如果虚拟机有多个磁盘,则恢复的虚拟机中的每个磁盘都会沿用其对应源磁盘的加密方式(CMEK 加密的磁盘仍使用其原始密钥加密,Google 管理的加密磁盘仍由 Google 管理)。
- 使用密钥
- 如果源资源使用 Google 管理的加密:恢复的资源默认使用 Google 管理的加密。
使用 API 或 gcloud CLI 恢复 Compute Engine Persistent Disk 或 Compute Engine 实例时,您可以替换此默认行为。例如,您可以将受 CMEK 保护的资源的备份恢复到使用 Google 管理的加密的新资源,或恢复到受其他 CMEK 密钥保护的新资源。如需恢复到受新 CMEK 密钥保护的资源,请确保目标项目的相关服务代理(例如 Compute Engine 服务代理)对新的目标密钥具有 roles/cloudkms.cryptoKeyEncrypterDecrypter 权限。
使用 CMEK 执行跨地区恢复
由于 Cloud Key Management Service 密钥是区域性的,因此当您执行跨地区恢复(例如,将实例从 asia-south1 恢复到 asia-south2)时,如果您使用默认行为,恢复操作会失败。恢复的虚拟机的磁盘无法使用来源区域的 KMS 密钥进行加密。
这是 Google Cloud 控制台中的一项当前限制。如需对受 CMEK 保护的虚拟机执行跨地区恢复,您必须使用 gcloud CLI、API 或 Terraform 替换加密设置,并在目标区域中指定新的 KMS 密钥。
如需恢复到受新 CMEK 密钥保护的资源,请执行以下步骤:
- 确保目标区域中有密钥:确保您在恢复虚拟机的区域(目标项目或共享 KMS 项目中)有 Cloud Key Management Service 密钥,如果没有,请创建一个。
授予 KMS 权限:将此目标密钥的 Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色授予要恢复虚拟机的目标项目的 Compute Engine 服务代理。执行恢复:使用以下方法之一执行恢复,并替换每个磁盘的 KMS 密钥:
gcloud
获取备份详细信息:使用
gcloud backup-dr backups list命令从备份中检索备份名称和磁盘的设备名称:gcloud backup-dr backups list \ --project=PROJECT_ID \ --location=SOURCE_REGION \ --backup-vault=BACKUP_VAULT_NAME \ --filter="computeInstanceBackupProperties.sourceInstance~SOURCE_INSTANCE_NAME"替换以下内容:
- PROJECT_ID:备份保险柜所在项目的名称。
- SOURCE_REGION:备份保险柜的位置。
- BACKUP_VAULT_NAME:要从中恢复数据的备份保险柜的名称。
- SOURCE_INSTANCE_NAME:来源 Compute Engine 实例的名称。
运行恢复命令:执行恢复命令,并使用
--create-disk参数替换每个磁盘的 KMS 密钥。恢复具有单个磁盘的虚拟机:
gcloud backup-dr backups restore compute BACKUP_ID \ --project=PROJECT_ID \ --location=SOURCE_REGION \ --backup-vault=BACKUP_VAULT_NAME \ --data-source=DATA_SOURCE \ --name=RESTORED_VM_NAME \ --target-zone=TARGET_ZONE \ --target-project=TARGET_PROJECT_ID \ --create-disk=device-name=DEVICE_NAME,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME替换以下内容:
- BACKUP_ID:您要恢复的备份的 ID。
- PROJECT_ID:备份保险柜所在项目的名称。
- SOURCE_REGION:备份保险柜的位置。
- BACKUP_VAULT_NAME:要从中恢复数据的备份保险柜的名称。
- DATA_SOURCE:要从中恢复数据的数据源的 ID。
- RESTORED_VM_NAME:已恢复虚拟机的名称。
- TARGET_ZONE:虚拟机恢复到的可用区。
- TARGET_PROJECT_ID:虚拟机恢复到的项目。
- DEVICE_NAME:磁盘的设备名称。
- KMS_PROJECT_ID:Cloud Key Management Service 密钥所在项目的 ID。
- TARGET_REGION:Cloud Key Management Service 密钥所在的区域。
- KEYRING:Cloud Key Management Service 密钥环的名称。
- KEY_NAME:磁盘 1 的 Cloud Key Management Service 密钥的名称。
恢复具有多个磁盘的虚拟机:为每个磁盘提供单独的
--create-disk标志:gcloud backup-dr backups restore compute BACKUP_ID \ --project=PROJECT_ID \ --location=SOURCE_REGION \ --backup-vault=BACKUP_VAULT_NAME \ --data-source=DATA_SOURCE \ --name=RESTORED_VM_NAME \ --target-zone=TARGET_ZONE \ --target-project=TARGET_PROJECT_ID \ --create-disk=device-name=DEVICE_NAME_1,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1 \ --create-disk=device-name=DEVICE_NAME_2,kms-key=projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2替换以下内容:
- BACKUP_ID:您要恢复的备份的 ID。
- PROJECT_ID:备份保险柜所在项目的名称。
- SOURCE_REGION:备份保险柜的位置。
- BACKUP_VAULT_NAME:要从中恢复数据的备份保险柜的名称。
- DATA_SOURCE:要从中恢复数据的数据源的 ID。
- RESTORED_VM_NAME:已恢复虚拟机的名称。
- TARGET_ZONE:虚拟机恢复到的可用区。
- TARGET_PROJECT_ID:虚拟机恢复到的项目。
- DEVICE_NAME_1:磁盘 1 的设备名称。
- KMS_PROJECT_ID:Cloud Key Management Service 密钥所在项目的 ID。
- TARGET_REGION:Cloud Key Management Service 密钥所在的区域。
- KEYRING:Cloud Key Management Service 密钥环的名称。
- KEY_NAME_1:磁盘 1 的 Cloud Key Management Service 密钥的名称。
- DEVICE_NAME_2:磁盘 2 的设备名称。
- KEY_NAME_2:磁盘 2 的 Cloud Key Management Service 密钥的名称。
API
获取备份详细信息:通过发送
GET请求列出备份,检索备份名称和磁盘的设备名称:GET https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups运行恢复 API:向备份的
restoreURI 发送POST请求。恢复具有单个磁盘的虚拟机:
POST https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups/BACKUP_ID:restore载荷:
{ "computeInstanceTargetEnvironment": { "project": "TARGET_PROJECT_ID", "zone": "TARGET_ZONE" }, "computeInstanceRestoreProperties": { "name": "RESTORED_VM_NAME", "machineType": "projects/TARGET_PROJECT_ID/zones/TARGET_ZONE/machineTypes/e2-medium", "disks": [ { "deviceName": "DEVICE_NAME", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME" } } ] } }恢复具有多个磁盘的虚拟机:
POST https://backupdr.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_REGION/backupVaults/BACKUP_VAULT_NAME/dataSources/DATA_SOURCE/backups/BACKUP_ID:restore载荷:
{ "computeInstanceTargetEnvironment": { "project": "TARGET_PROJECT_ID", "zone": "TARGET_ZONE" }, "computeInstanceRestoreProperties": { "name": "RESTORED_VM_NAME", "machineType": "projects/TARGET_PROJECT_ID/zones/TARGET_ZONE/machineTypes/e2-medium", "disks": [ { "deviceName": "DEVICE_NAME_1", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1" } }, { "deviceName": "DEVICE_NAME_2", "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2" } } ] } }
Terraform
使用 google_backup_dr_restore_workload 资源
恢复具有单个磁盘的虚拟机:
resource "google_backup_dr_restore_workload" "restore_single" { location = "SOURCE_REGION" backup_vault_id = "BACKUP_VAULT_NAME" data_source_id = "DATA_SOURCE" backup_id = "BACKUP_ID" compute_instance_target_environment { project = "TARGET_PROJECT_ID" zone = "TARGET_ZONE" } compute_instance_restore_properties { name = "RESTORED_VM_NAME" machine_type = "zones/TARGET_ZONE/machineTypes/e2-medium" disks { device_name = "DEVICE_NAME" disk_encryption_key { kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME" } } } }恢复具有多个磁盘的虚拟机:
resource "google_backup_dr_restore_workload" "restore_multi" { location = "SOURCE_REGION" backup_vault_id = "BACKUP_VAULT_NAME" data_source_id = "DATA_SOURCE" backup_id = "BACKUP_ID" compute_instance_target_environment { project = "TARGET_PROJECT_ID" zone = "TARGET_ZONE" } compute_instance_restore_properties { name = "RESTORED_VM_NAME" machine_type = "zones/TARGET_ZONE/machineTypes/TARGET_MACHINETYPE" disks { device_name = "DEVICE_NAME_1" disk_encryption_key { kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_1" } } disks { device_name = "DEVICE_NAME_2" disk_encryption_key { kms_key_name = "projects/KMS_PROJECT_ID/locations/TARGET_REGION/keyRings/KEYRING/cryptoKeys/KEY_NAME_2" } } } }
如果在恢复操作期间,保护源工作负载的 Cloud Key Management Service 密钥不可用,则恢复操作默认会失败。在这种情况下,您必须使用 API 或 gcloud CLI,通过指定新的 CMEK 密钥或将加密类型更改为 Google 管理的加密来覆盖已恢复资源的加密设置。
如果用于加密备份保险柜中数据的 Cloud Key Management Service 密钥版本被停用或销毁,您将无法从该备份进行恢复。
Backup and DR Compute Engine 指南
- 为保险柜备份创建和管理备份方案
- 检查云凭证
- 发现和保护 Compute Engine 实例
- 装载 Compute Engine 永久性磁盘的备份映像
- 恢复 Compute Engine 实例
- 导入永久性磁盘快照映像