本页面可帮助您在 控制台 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)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含 从备份保险柜恢复 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
-
-
使用控制台恢复 Compute Engine 实例(其他权限): Google Cloud
-
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 实例属性,请参阅 Backup and DR Service 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 所需的权限会 授予 Backup and DR 服务代理,如 CMEK 概念中所述。
单个磁盘恢复的 CMEK 处理
当您选择单个磁盘 恢复范围以从 Compute Engine 实例备份恢复单个磁盘时,会发生以下行为:
默认行为:通过备份创建的新磁盘会尝试 使用原始 Compute Engine 实例中的与来源磁盘相同的加密密钥。
如果来源磁盘使用 Google 管理的加密,则恢复的磁盘也会使用 Google 管理的加密。
如果来源磁盘使用特定的 CMEK,则恢复的磁盘会尝试使用该相同的 CMEK。
密钥不可用:如果目标项目或区域中无法访问来源磁盘使用的原始 CMEK(例如,由于密钥删除、权限更改或跨区域恢复),则恢复操作会失败,除非您替换加密设置。
替换加密设置 :您可以在恢复过程中更改恢复的磁盘的加密设置,具体方法如下:
控制台
在恢复向导的目标磁盘属性 部分中,您可以使用以下选项之一修改加密 设置:
选择其他客户管理的加密密钥 (CMEK)。
切换到 Google 管理的加密。
gcloud
当使用带有
--source-instance-boot-disk或--source-instance-disk-device-name标志的gcloud backup-dr backups restore disk命令时:- 如需为恢复的磁盘指定其他 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 永久性
磁盘或 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 权限 :向要恢复虚拟机的目标项目的 Compute Engine 服务代理授予此目标密钥的 Cloud KMS CryptoKey Encrypter/Decrypter (
roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色。执行恢复 :使用以下方法之一执行恢复,并替换每个磁盘的 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 实例
- 导入永久性磁盘快照映像