默认情况下, Google Cloud 会使用 Google 管理的加密密钥自动加密静态数据。如果您对保护数据的密钥有特定的合规性或监管要求,则可以使用客户管理的加密密钥 (CMEK)。
借助 CMEK,您可以使用通过 Cloud Key Management Service (Cloud KMS) 控制的加密密钥来保护 Backup and DR 数据。使用 CMEK 时,您可以在 Cloud Key Management Service 中管理密钥,并通过管理密钥的 Identity and Access Management 权限来控制哪些人可以访问该密钥。如果您暂时停用或永久销毁 CMEK 密钥,则受该密钥保护的数据将无法访问。如需大致了解 CMEK,请参阅客户管理的加密密钥 (CMEK)。
Backup and DR 使用 CMEK 来保护存储在备份保险柜中的备份数据。
Backup and DR 如何使用 CMEK
Backup and DR 会使用 CMEK 密钥来保护备份,具体取决于要备份的资源,如下所示:
对于存储在备份保险柜中的 Compute Engine 实例备份:如果附加到 Compute Engine 实例的一个或多个磁盘经过 CMEK 加密,Backup and DR 要求将该实例备份到启用 CMEK 的备份保险柜。如果附加到实例的所有磁盘都使用 Google 管理的加密,则在 Google Cloud 控制台中,您必须将备份存储在非 CMEK 备份保险柜中。不过,如果您使用 Google Cloud CLI、API 或 Terraform,则可以将此类实例的备份配置为存储在启用 CMEK 的备份保险库中。
如果 Compute Engine 实例备份存储在启用了 CMEK 的备份保险库中,则无论实例磁盘的加密状态如何,其备份数据都会使用保险库的 Cloud Key Management Service 密钥进行加密。
对于永久性磁盘备份:Backup and DR 会依赖于源工作负载的加密,从而保留源磁盘的加密。如果源 Persistent Disk 受 CMEK 保护,则其备份也会受同一 CMEK 密钥保护。如果源 Persistent Disk 使用 Google 管理的加密,则其备份也使用 Google 管理的加密,并且必须存储在未配置 CMEK 的备份保险柜中。
下表总结了不同工作负载类型的备份所使用的加密密钥:
| 工作负载 | 用于备份的加密密钥 | CMEK 支持状态 |
|---|---|---|
| Compute Engine 实例 | 备份保险柜 CMEK 密钥 | 支持 |
| Compute Engine 磁盘 | 来源磁盘的加密密钥 | 支持 |
| Cloud SQL | - | 不支持 |
| AlloyDB 集群 | - | 不支持 |
| Filestore 实例 | - | 不支持 |
| Google Cloud VMware Engine、Oracle 数据库和 SQL Server 数据库 | - | 不支持 |
限制
Backup and DR 对 CMEK 的支持存在以下限制:
- CMEK 保护仅适用于存储在备份保险柜中的 Compute Engine 实例和 Persistent Disk 备份。
- 您只能在创建备份保险库时配置 CMEK。您无法在现有备份保险库上启用、停用或更改 CMEK。
- Cloud Key Management Service 密钥必须与备份保险库位于同一位置。区域中的备份保险柜必须使用同一区域中的密钥。 多区域备份保险柜必须使用来自同一多区域的密钥。
- Backup and DR 不支持客户提供的加密密钥 (CSEK)。
- 默认备份保险柜和默认备份方案使用 Google 管理的加密。如需使用 CMEK,您必须创建新的备份保险库并明确启用 CMEK。
准备工作
在开始使用 CMEK 之前,请完成以下步骤:
在将存储 CMEK 密钥的项目中启用 Cloud Key Management Service API。
创建 Cloud Key Management Service 密钥环和密钥。创建密钥时,请确保选择的位置与备份保险柜的位置一致。区域中的备份保险柜必须使用同一区域中的密钥。多区域备份保险柜必须使用来自同一多区域的密钥。
创建 Backup and DR 服务代理(如果尚未创建)。 在项目中创建第一个 Backup and DR 资源(备份保险库、 Google Cloud 控制台等)后,系统会自动创建服务代理。如果您需要在创建备份保险柜之前向服务代理授予权限,可以使用以下命令触发其创建:
将gcloud beta services identity create --service=backupdr.googleapis.com --project=PROJECT_ID
PROJECT_ID替换为您的项目 ID。
授予 CMEK 权限
为了让 Backup and DR 使用 CMEK 保护备份,或备份受 CMEK 保护的资源,您需要向特定服务代理授予 IAM 角色。
授予使用保险库 CMEK 密钥的权限
为备份保险库配置 CMEK 时,Backup and DR 需要获得使用您的 CMEK 密钥加密和解密数据的权限。必须向 Backup and DR 服务代理授予此权限。
请务必区分 Backup and DR 使用的两个不同的服务账号:
- Backup and DR 服务代理:这是一个项目级服务账号,用于管理 Backup and DR 资源,以及在备份保险柜配置了 CMEK 时访问 Cloud Key Management Service 密钥。此服务代理需要 CMEK 密钥的
roles/cloudkms.cryptoKeyEncrypterDecrypter角色。 - 备份保险库服务账号:这是每个保险库独有的服务账号,您可以向其授予访问和备份源工作负载(例如 Compute Engine 实例)的权限。此服务账号不用于对备份保险库中的数据进行 CMEK 加密。
如需将 CMEK 与 Backup and DR 搭配使用,您必须向 Backup and DR 服务代理授予 Cloud KMS CryptoKey Encrypter/Decrypter 角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter)。此服务代理是 Backup and DR 用于代表您访问资源的服务账号,包括在加密和解密操作期间访问您的 Cloud Key Management Service 密钥。
Backup and DR 服务代理的命名格式如下:
service-VAULT_PROJECT_NUMBER@gcp-sa-backupdr.iam.gserviceaccount.com
将 VAULT_PROJECT_NUMBER 替换为包含备份保险库的项目的项目编号。
如果您有权授予 IAM 角色,可以在创建备份保管库时使用 Google Cloud 控制台授予此角色;也可以提前使用 gcloud kms keys add-iam-policy-binding 命令授予此角色:
gcloud kms keys add-iam-policy-binding KEY_NAME \
--location=KMS_LOCATION \
--keyring=KEY_RING \
--member=serviceAccount:service-VAULT_PROJECT_NUMBER@gcp-sa-backupdr.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
您可以为特定密钥授予此角色(如示例所示),也可以在密钥环或项目级层授予此角色。在密钥级别授予权限可提供最精细的控制,建议遵循最小权限原则。如果您打算让 Backup and DR 使用相应范围内的多个密钥,则在项目级或密钥环级授予权限会更方便,但这样会授予更广泛的权限。
授予备份受 CMEK 保护的资源的权限
如果您要备份的资源本身已使用其他 CMEK 密钥加密(例如,具有 CMEK 加密磁盘的 Compute Engine 实例),则需要额外权限。源资源的服务代理需要有权使用保护源资源的密钥。例如,如需备份采用 CMEK 加密的 Compute Engine 实例,源实例项目的 Compute Engine 服务代理必须对用于加密实例磁盘的 Cloud Key Management Service 密钥拥有 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。在大多数情况下,源工作负载已具备此权限,可正常运行。
将 CMEK 与 Backup and DR 搭配使用
本部分介绍了使用 CMEK 保护备份的工作流程。
1. 创建启用了 CMEK 的备份保险柜
创建备份保险库时,在加密部分中选择客户管理的加密密钥 (CMEK) 选项,然后选择您创建的 Cloud Key Management Service 密钥。 您只能在创建保险库期间启用 CMEK;无法在现有保险库上启用、停用或更改 CMEK。
2. 创建备份方案
创建备份方案时,请选择您在上一步中创建的启用了 CMEK 的备份保险柜作为备份的目标备份保险柜。
3. 将备份方案应用于资源
将备份方案应用于资源时,您必须确保该备份方案的目标备份保险柜与资源的加密配置兼容:
- 如果您要备份已挂接一个或多个 CMEK 加密磁盘的 Compute Engine 实例,则必须使用以启用了 CMEK 的备份保险柜为目标的备份方案。
- 如果您要备份的 Compute Engine 实例的所有挂接磁盘都使用 Google 管理的加密,请执行以下操作:
- 如果您使用 Google Cloud 控制台分配备份方案,则必须使用以非 CMEK 备份保险柜为目标的备份方案。
- 如果您使用 gcloud CLI、API 或 Terraform 分配备份方案,可以选择以启用 CMEK 的备份保险库为目标的备份方案。如果您选择使用 CMEK 密钥,则实例的备份将使用备份保管库的 CMEK 密钥进行加密。
- 如果您要备份使用 Google 管理的加密的 Persistent Disk,则必须使用以非 CMEK 备份保险库为目标的备份方案。
请确保您已授予所需的 KMS 权限,如授予 CMEK 权限中所述,以便备份成功运行。
Cloud Key Management Service 密钥轮替和备份可恢复性
Backup and DR 支持 Cloud Key Management Service 密钥轮替。轮替密钥时,Cloud Key Management Service 会创建新的密钥版本,该版本将成为主版本。Backup and DR 使用主密钥版本来加密配置了该密钥的备份保险库的所有新备份。
现有备份不会重新加密,仍会使用创建时所用的密钥版本进行加密。如需恢复备份,用于加密备份的密钥版本必须在 Cloud Key Management Service 中可用。如果您停用或销毁某个密钥版本,则使用该版本加密的所有备份都将无法访问。为确保备份可恢复,请勿停用或销毁仍被您可能需要恢复的备份使用的密钥版本。
如果 Backup and DR 因任何原因无法访问您的 CMEK 密钥(例如,加密或解密所需的密钥版本被停用或销毁,或者 Backup and DR 服务代理的密钥 IAM 权限被撤消),您可能会遇到以下情况:
- 如果主密钥版本无法访问,则向启用 CMEK 的备份保险库进行的新备份将失败。
- 如果用于加密备份的特定密钥版本无法访问,则从备份保险库进行的恢复将失败。
- 您将无法创建使用无法访问的密钥的新备份保险库。
如果您停用了用于备份的密钥版本,重新启用该版本即可恢复对使用该版本加密的备份的访问权限。如果您销毁某个密钥版本,则使用该密钥版本加密的所有备份都将永久丢失,并且无法恢复。
价格
使用 CMEK 时,Backup and DR 不会收取任何额外费用。不过,您需要为在 Cloud Key Management Service 中使用密钥付费。如需了解详情,请参阅 Cloud Key Management Service 价格。
后续步骤
- 了解如何创建和管理备份保险库。