客户管理的加密密钥 (CMEK)

本页面介绍了如何将客户管理的加密密钥 (CMEK) 与 Memorystore for Redis 结合使用。如需立即使用此功能,请参阅使用客户管理的加密密钥 (CMEK)

CMEK 是否适合我的企业?

如果组织具有敏感数据或受监管数据并且这些数据需要组织管理自己的加密密钥,则 CMEK 就很适合该组织。

Google 管理的加密与客户管理的加密

借助 CMEK 功能,您可以将自己的加密密钥用于 Memorystore 中的 Redis 静态数据。添加客户管理的加密密钥后,每当进行 API 调用时,Memorystore 都会使用您的密钥来访问数据。

Memorystore 使用 Google 管理的数据加密密钥 (DEK) 和密钥加密密钥 (KEK) 来加密 Memorystore for Redis。因此存在两层加密:

  • DEK 加密数据。
  • KEK 加密 DEK。

Memorystore 实例将加密的 DEK 与加密的数据一起存储在永久性磁盘上,并且 Google 会管理 Google KEK。您可以使用客户管理的加密密钥来创建封装 Google KEK 的密钥。通过客户管理的加密密钥,您可以创建、撤消和删除 KEK。

客户管理的加密密钥通过 Cloud Key Management Service API 管理。

下图显示了在使用默认 Google 加密与使用客户管理的加密密钥时,静态数据在内部存储实例中的工作原理。

不使用 CMEK

数据会上传到 Google,然后进行分块,每个区块使用自己的数据加密密钥进行加密。数据加密密钥使用密钥加密密钥进行封装。如果使用默认 Google 加密,系统会从 Google 的内部密钥库检索密钥加密密钥。加密的区块和封装的加密密钥分布在 Google 的存储基础架构中。

使用 CMEK

数据会上传到 Google,然后进行分块,每个区块使用自己的数据加密密钥进行加密。数据加密密钥使用密钥加密密钥进行封装。通过使用 Cloud KMS 的 CMEK,系统会从 Cloud KMS 中检索密钥加密密钥。加密的区块和封装的加密密钥分布在 Google 的存储基础架构中。

解密使用客户管理的加密密钥封装的数据时,Memorystore 会使用 KEK 来解密 DEK,并使用未加密的 DEK 来解密静态数据。

数据区块使用 DEK 进行加密,使用封装的 DEK 进行存储。系统会将解封 DEK 的请求发送到 KMS 存储空间,该存储空间用于存储不可导出的 KEK。KMS 存储空间返回解封后的 DEK。

Memorystore 何时与 CMEK 密钥进行交互?

操作 说明
创建实例 在创建实例期间,您可以将实例配置为使用客户管理的加密密钥。
实例更新 Memorystore 在更新启用了 CMEK 的实例期间检查 CMEK 密钥。

哪些数据使用 CMEK 加密?

CMEK 会对以下类型的数据进行加密:

  • 存储在永久性存储空间中的客户数据。
  • AUTH传输加密等安全功能相关的元数据。

服务帐号简介

创建使用 CMEK 的实例时,您必须向 Cloudstore 服务帐号授予以下格式的 cloudkms.cryptoKeyEncrypterDecrypter 角色:

  • service-[PROJECT_NUMBER]@cloud-redis.iam.gserviceaccount.com

授予此权限后,服务帐号就可以向 Cloud KMS 请求密钥访问权限。

如需了解如何向服务帐号授予此权限,请参阅向服务帐号授予访问密钥的权限

密钥简介

在 Cloud KMS 中,您需要创建一个使用对称加密/解密算法的加密密钥。创建新的 Memorystore 实例时,请选择此密钥来加密实例。您可以为键和 Memorystore 实例创建一个项目,也可以为每个实例创建不同的项目。

所有 Memorystore 实例位置都支持 CMEK。密钥和密钥环区域必须设置为与 Memorystore for Redis 实例所在的区域。多区域密钥或全球区域密钥不起作用。如果区域不匹配,则创建 Memorystore 实例的请求将失败。

适用于 Memorystore 的 CMEK 目前不支持 Cloud External Key Manager (Cloud EKM)

CMEK 使用以下格式:

projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]

如果 Memorystore 无法访问当前使用的任何密钥版本(例如,如果您停用密钥版本),则 Memorystore 会在不适当延迟的情况下关停实例。在 Google Cloud Console 中,已暂停的实例的实例页面上会显示红色感叹号提示。将鼠标悬停在提示上时,系统会显示“无状态”。一旦可再次访问该密钥,Memorystore 会自动恢复该实例。

如何使 CMEK 加密的数据永远无法访问?

您可能遇到这样的情况,即您需要永久销毁使用 CMEK 加密的数据。为此,您需要销毁 CMEK 版本。您不能销毁密钥环或密钥,但可以销毁密钥的密钥版本。

如何为启用了 CMEK 的实例导出和导入数据?

如果您希望在导入或导出期间继续使用客户管理的密钥加密数据,则必须先在 Cloud Storage 存储桶上设置客户管理的加密密钥,然后再将数据导出到其中。

当数据以前存储在启用了 CMEK 的 Memorystore 实例上时,将数据导入至新的 Memorystore 实例没有特殊要求或限制。

销毁/停用 CMEK 密钥版本的行为

如果您希望确保没有数据访问实例,可以通过停用客户管理的加密密钥的主密钥版本来实现此目的。这样做会立即关停您的实例,而且不会出现不当延迟。此外,如果任何正在使用的客户管理的加密密钥被停用/销毁,Memorystore 将在没有过度延迟的情况下关停实例。这包括 Memorystore 实例仍在使用的任何旧版密钥。您可以使用 gcloud 或 Google Cloud 控制台查看实例是否已暂停:

对于 Google Cloud Console,如果您的实例被暂停,您会在 Memorystore for Redis 实例页面中的实例旁边看到红色提示通知。当光标悬停在消息提示上时,工具提示会显示“无状态”。

对于 gcloud,如果您运行 gcloud beta redis instances describe,并且在实例元数据中没有看到 state: READYstate: REPAIRING 或任何其他状态,则表示您的实例已暂停。

重新启用/恢复使用中的 CMEK 密钥版本

重新启用/恢复使用中的 CMEK 密钥版本后,实例会取消隐藏。

限制

在 Memorystore 中使用客户管理的加密密钥时,存在以下限制: