本页将帮助您通过 Google Cloud 控制台中的备份保险柜恢复 Compute Engine 实例。
准备工作
为执行恢复操作的目标项目中的保险库的备份保险柜服务代理授予 Backup and DR Compute Engine Operator (
roles/backupdr.computeEngineOperator) IAM 角色。如果您使用的是共享 VPC,请为 VPC 宿主项目中的备份保险库服务代理 () 授予 Compute Network User (
roles/compute.networkUser) IAM 角色。为在备份保险库项目中执行恢复操作的用户授予以下 IAM 角色。
- 备份保险柜和目标项目的 Backup and DR Restore User (
roles/backupdr.restoreUser)。 - 仅针对目标资源的 Compute Viewer (
roles/compute.viewer)。
这些预定义角色包含访问 Compute Engine 项目中的备份保险柜所需的权限。如需了解特定权限,请参阅以下列表。
backupdr.bvbackups.restorebackupdr.compute.restoreFromBackupVaultbackupdr.backupVaults.getbackupdr.backupVaults.listbackupdr.bvbackups.listbackupdr.bvdataSources.getbackupdr.bvdataSources.listbackupdr.bvbackups.get
如需使用 gcloud CLI CLI 或 API 恢复实例,用户必须拥有以下权限:
- 针对备份资源的
backupdr.bvbackups.restore权限。 - 目标项目上的
backupdr.compute.restoreFromBackupVault权限,实例将恢复到该项目中。
- 备份保险柜和目标项目的 Backup and DR Restore User (
Google Cloud 控制台的其他权限
使用 Google Cloud 控制台恢复实例时,用户需要拥有 CLI 权限以及以下权限。控制台需要这些额外的权限才能在界面中列出并显示必要的 Compute Engine 资源以供选择:
compute.acceleratorTypes.listcompute.disks.listcompute.machineTypes.listcompute.projects.getcompute.regions.listcompute.zones.list
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
恢复 Compute Engine 实例
请按照以下说明恢复 Compute Engine 实例。
控制台
在 Google Cloud 控制台中,前往保险库备份页面。
此处列出了所有具有保险库备份的 Compute Engine 实例。
点击操作图标,选择恢复操作。“恢复”页面会显示以下恢复选项,供您选择:
- 选择资源名称。
- 选择备份创建时间。
- 选择要将虚拟机恢复到的项目名称。
点击继续。
- 随即会显示下一个页面基于备份新建一个虚拟机实例,其中会根据源虚拟机的属性预先填充虚拟机属性。您可以修改属性以创建新的虚拟机,例如更改区域或机器类型的选择。
点击创建以基于所选备份创建新的虚拟机。
gcloud
如果尚未授予,请向正在恢复虚拟机的恢复项目中的备份库服务代理授予 Backup and DR Compute Engine Operator (
roles/backupdr.computeEngineOperator) IAM 角色。如需获取备份保险柜服务账号,请使用以下命令。
gcloud backup-dr backup-vaults describe BACKUPVAULT_NAME --location=REGION替换以下内容:
- BACKUPVAULT_NAME:您要从中恢复数据的备份保险柜名称。
- REGION:备份保险柜的区域。
在恢复 Compute Engine 实例之前,请使用以下命令获取数据源 ID 和所需备份的 ID。
查找数据源 ID
gcloud backup-dr data-sources list \ --project=PROJECT \ --location=REGION \ --backup-vault=BACKUPVAULT_NAME \ "--filter=dataSourceGcpResource.computeInstanceDatasourceProperties.name:(DATA_SOURCE)" \ "--format=get(name)")列出数据源的现有备份,以找到正确的 BACKUP_ID。
gcloud backup-dr backups list \ --location=REGION \ --backup-vault=BACKUPVAULT_NAME \ --data-source=DATA_SOURCE \ "--format=yaml(backupType,computeInstanceBackupProperties.sourceInstance,consistencyTime,enforcedRetentionEndTime,expireTime,name)"
如需恢复 Compute Engine 实例,请使用以下命令。
恢复与工作负载项目位于同一项目中的虚拟机,并提供备份 ID。
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使用备份完整资源网址在与工作负载项目相同的项目中恢复虚拟机。
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恢复具有自定义服务账号和网络配置的 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:恢复的虚拟机的名称。
- TARGET_ZONE:虚拟机恢复到的区域。
- TARGET_PROJECT:虚拟机恢复到的项目。
- NETWORK:虚拟机的网络 URI。
- SUBNET:虚拟机的子网 URI。
- SERVICE_ACCOUNT:已恢复虚拟机的服务账号。
- SCOPE:服务账号的授权范围。
如需替换其他虚拟机属性,请参阅 Backup and DR Service 概览 gcloud CLI 命令。
从启用了 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 密钥版本处于已停用或已销毁状态,您将无法从相应备份中恢复数据。