使用客户管理的加密密钥来保护备份

本指南介绍了如何将客户管理的加密密钥 (CMEK) 与 Backup and DR 搭配使用,以增强备份安全性。您将学习如何授予必要的权限、创建启用 CMEK 的备份保险库,以及将这些保险库应用于资源,从而确保备份数据受到您在 Cloud Key Management Service 中控制的密钥的保护。这对于满足合规性要求和更好地控制数据加密至关重要。

如需详细了解 Backup and DR 中的 CMEK 概念和支持的工作负载类型,请参阅客户管理的加密密钥 (CMEK) 与 Backup and DR Service 概览

准备工作

在开始使用 CMEK 之前,请完成以下步骤:

  1. 启用 Cloud Key Management Service API

    启用该 API

    PROJECT_ID 替换为用于管理密钥的项目的 ID。

  2. 创建 Cloud Key Management Service 密钥环和密钥:创建密钥时,请确保选择的位置与备份保险库的位置一致。区域中的备份保险柜必须使用同一区域中的密钥。

  3. 根据需要创建 Backup and DR 服务代理:通常情况下,当在项目中创建第一个 Backup and DR 资源(例如管理控制台或备份保险柜)时,系统会自动创建服务代理。如果您需要在创建任何 Backup and DR 资源之前向服务代理授予权限,请手动触发其创建:

    gcloud beta services identity create --service=backupdr.googleapis.com --project=PROJECT_ID
    

    PROJECT_ID 替换为您的项目 ID。

启用了 CMEK 的备份保险柜所需的权限

Backup and DR Service 服务代理需要获得相应权限,才能使用指定的 Cloud KMS 密钥来加密和解密备份保险柜中的数据。

如需获得使用 CMEK 在备份保险库中加密和解密数据所需的权限,请让您的管理员向您授予为备份保险库指定的 Cloud KMS 密钥的以下 IAM 角色:

  • 对于 Backup and DR 服务代理 (service-VAULT_PROJECT_NUMBER@gcp-sa-backupdr.): Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter)

    VAULT_PROJECT_NUMBER 替换为包含备份保险柜的项目的项目编号。

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含使用 CMEK 在备份保险柜中加密和解密数据所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需使用 CMEK 加密和解密备份保险库中的数据,您需要拥有以下权限:

  • 如需使用密钥版本加密数据,请执行以下操作: cloudkms.cryptoKeyVersions.useToEncrypt
  • 如需使用密钥版本解密数据,请执行以下操作: cloudkms.cryptoKeyVersions.useToDecrypt
  • 如需获取有关密钥位置的元数据,请使用以下命令: cloudkms.locations.get
  • 列出密钥位置: cloudkms.locations.list
  • 如需获取有关密钥的项目元数据,请执行以下操作: resourcemanager.projects.get

您也可以使用自定义角色或其他预定义角色来获取这些权限。

如需向 gcp-sa-backupdr 服务代理授予所需的角色,请按以下说明操作:

控制台

  1. 在 Google Cloud 控制台中,前往备份保险库页面。

    前往“备份保险柜”

  2. 点击创建备份保险柜

  3. 输入备份保险柜的必要详细信息,例如名称和位置。

  4. 加密部分中,选择客户管理的加密密钥 (CMEK) 以使用您自己的密钥。

  5. 点击选择客户管理的密钥,然后从选择器中选择要使用的 Cloud KMS 密钥。

  6. 服务代理权限授予

    • 选择密钥后,控制台会检查 Backup and DR 服务代理是否具有使用该密钥的权限。该服务代理名为 service-VAULT_PROJECT_NUMBER@gcp-sa-backupdr.。

    • 如果您对密钥拥有足够的权限(例如 roles/cloudkms.admin),并且服务代理尚无访问权限,则控制台可能会建议自动向所选密钥的 Backup and DR 服务代理授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。

    • 如果系统提示,请确认授予权限,以允许 Backup and DR 使用您的 CMEK 加密和解密保险库中的数据。

    • 如果自动授予选项不可用,或者您没有授予角色的权限,则必须手动向服务代理授予 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色。如需查看相关说明,请参阅 gcloud 标签页。

  7. 根据需要配置任何其他备份保险柜设置。

  8. 点击创建

gcloud

gcloud kms keys add-iam-policy-binding KEY_NAME \
    --location=KMS_LOCATION \
    --keyring=KEY_RING \
    --member=serviceAccount:service-VAULT_PROJECT_NUMBER@gcp-sa-backupdr. \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project=KMS_PROJECT_ID

替换变量:

  • KEY_NAME:CMEK 密钥的名称。

  • KMS_LOCATION:密钥环的区域。

  • KEY_RING:密钥环的名称。

  • VAULT_PROJECT_NUMBER:备份保险柜所在项目的编号。

  • KMS_PROJECT_ID:CMEK 密钥的管理项目 ID。

建议遵循最小权限原则,针对特定密钥授予相应角色。

备份受 CMEK 保护的现有资源所需的权限

如果您要备份的源资源已使用其他 CMEK 密钥加密(例如具有 CMEK 加密磁盘的 Compute Engine 实例),则源资源的服务(例如 Compute Engine 服务代理)的服务代理需要有权访问保护该源资源的密钥。

<0

如需获得所需的权限,以允许源服务在备份操作期间访问其 CMEK 密钥,请让您的管理员为您授予保护源资源(例如 Compute Engine 磁盘)的 CMEK 密钥的以下 IAM 角色:

  • 对于托管源资源的服务的服务代理:通常为 Cloud Key Management Service CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter)

    例如,对于 CMEK 加密的 Compute Engine 实例,相应正文是源实例项目的 Compute Engine 服务代理

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含所需的权限,可让源服务在备份操作期间访问其 CMEK 密钥。如需查看所需的确切权限,请展开所需权限部分:

所需权限

如需允许源服务在备份操作期间访问其 CMEK 密钥,您需要具有以下权限:

  • 如需使用密钥版本加密数据,请执行以下操作: cloudkms.cryptoKeyVersions.useToEncrypt
  • 如需使用密钥版本解密数据,请执行以下操作: cloudkms.cryptoKeyVersions.useToDecrypt
  • 如需获取有关密钥位置的元数据,请使用以下命令: cloudkms.locations.get
  • 列出密钥位置: cloudkms.locations.list
  • 如需获取有关密钥的项目元数据,请执行以下操作: resourcemanager.projects.get

您也可以使用自定义角色或其他预定义角色来获取这些权限。

将 CMEK 与 Backup and DR 搭配使用

  1. 创建启用了 CMEK 的备份保险柜。 创建备份保险库时,在加密类型部分中选择客户管理的加密密钥 (CMEK) 选项,然后选择您创建的 Cloud Key Management Service 密钥。 CMEK 只能在创建保险库期间启用。无法在现有保险库中添加、移除或更改此设置。

  2. 创建备份方案创建备份方案时,请选择您创建的已启用 CMEK 的备份保险柜作为目标。

  3. 将备份方案应用于资源。兼容性取决于资源类型及其加密方式:

    • Compute Engine 实例

      实例磁盘加密 备份保险柜加密 支持 备注
      所有 Google 管理的 由 Google 管理
      所有 Google 管理的 CMEK 备份将使用备份保险柜的 CMEK 进行加密。
      任何磁盘采用 CMEK 加密 由 Google 管理 如果实例的磁盘采用 CMEK 加密,则备份该实例需要使用启用了 CMEK 的备份保险柜。
      任何磁盘采用 CMEK 加密 CMEK 备份保险柜 CMEK 可以与磁盘 CMEK 不同。

    • Persistent Disk 卷

      • Persistent Disk 卷的备份始终会保留源磁盘的加密方法。

      • 如果源 Persistent Disk 使用 Google 管理的加密,则备份也将使用 Google 管理的加密。

      • 如果源 Persistent Disk 使用 CMEK,则备份将受到与源磁盘相同的 CMEK 密钥版本保护。

      • 备份库的加密设置(CMEK 或 Google 管理)不会改变 Persistent Disk 备份数据本身的加密方式。不过,组织政策可能仍然适用,请参阅 CMEK 组织政策

恢复 CMEK 加密的备份

从 CMEK 加密的备份恢复工作负载时,恢复的资源默认使用在备份时保护源资源的同一 Cloud Key Management Service 密钥。您可以在恢复过程中选择为目标资源指定其他 Cloud Key Management Service 密钥。

Cloud Key Management Service 密钥轮替对备份可恢复性的影响

轮替密钥时,Cloud Key Management Service 会创建新的密钥版本,该版本会成为主版本。Backup and DR 使用此主密钥版本来加密配置了相应密钥的备份保险柜的所有备份。

现有备份仍使用最初创建时所用的密钥版本进行加密。如需恢复任何备份,用于加密该备份的特定密钥版本必须在 Cloud Key Management Service 中可用且已启用。

密钥版本无法访问的后果

  • 停用或销毁密钥版本会导致使用该版本加密的任何备份都无法访问。

  • 如果 Backup and DR 因 CMEK 密钥被停用、销毁或权限被撤消而无法访问该密钥,则可能会出现以下结果:

    • 向已启用 CMEK 的备份保险柜进行的新备份将失败。

    • 如果无法访问相应备份的特定密钥版本,则从备份进行恢复将会失败。

    • 使用无法访问的密钥创建新的备份保险库会失败。

重新启用已停用的密钥版本即可恢复访问权限。销毁密钥版本是一项永久性操作,会导致使用该版本加密的备份数据丢失且不可恢复。

CMEK 组织政策的应用方式

您可以使用组织政策限制条件来强制执行 Backup and DR 资源的 CMEK 要求。如需了解详情,请参阅 CMEK 组织政策

备份保险柜创建限制

  • constraints/gcp.restrictNonCmekServices:如果为 backupdr.googleapis.com 强制执行,则必须使用 CMEK 创建所有新的备份保险库。

  • constraints/gcp.restrictCmekCryptoKeyProjects:如果强制执行,启用 CMEK 的备份保险库必须使用允许的项目或文件夹中的密钥。

备份操作限制

  • constraints/gcp.restrictNonCmekServices:如果针对 backupdr.googleapis.com 强制执行:

    • Compute Engine 实例备份:如果目标备份保险柜使用 Google 管理的加密,则会失败。

    • 永久性磁盘备份:如果源 Persistent Disk 使用 Google 管理的加密,则会失败。

  • constraints/gcp.restrictCmekCryptoKeyProjects:如果强制执行:

    • Compute Engine 实例备份:如果目标备份保险库使用 CMEK 加密,则其密钥必须来自允许的项目或文件夹。

    • 永久性磁盘备份:如果来源 Persistent Disk 使用 CMEK 加密,则其密钥必须来自允许的项目或文件夹。

后续步骤