本页面介绍了如何将客户管理的加密密钥 (CMEK) 与 Memorystore for Redis 配合使用。如需开始使用此功能,请参阅使用客户管理的加密密钥 (CMEK)。
默认情况下,Memorystore for Redis 会对静态客户内容进行加密。Memorystore for Redis 会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密”。
如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Memorystore for Redis)结合使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。
使用 CMEK 设置资源后,访问 Memorystore for Redis 资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)。
哪些人应该使用 CMEK?
CMEK 适用于拥有敏感或受监管数据且必须加密的组织。如需详细了解是否应使用 CMEK 加密此数据,请参阅决定是否使用 CMEK。
Google 管理的加密与客户管理的加密
借助 CMEK 功能,您可以为 Memorystore for Redis 中的静态数据使用自己的加密密钥。对于启用了 CMEK 的 Memorystore for Redis 实例,Google 会使用您的密钥来访问所有静态数据。
Memorystore 使用 Google 管理的数据加密密钥 (DEK) 和密钥加密密钥 (KEK) 来加密 Memorystore for Redis 中的数据。因此存在两层加密:
- DEK 加密:Memorystore 使用 DEK 对 Memorystore for Redis 中的数据进行加密。
- KEK 加密:Memorystore 使用 KEK 加密 DEK。
Memorystore for Redis 实例将加密的 DEK 与加密的数据一起存储在永久性磁盘上,而 Google 管理 Google KEK。CMEK 是封装 DEK 的 KEK。借助 CMEK,您可以创建、停用或销毁 KEK,还可以启用或恢复 KEK。
您可以使用 Cloud Key Management Service API 管理 CMEK。
下图分别展示了在使用默认 Google 管理的加密与 CMEK 的情况下,Memorystore for Redis 实例内部的数据静态加密的工作原理。
不使用 CMEK
使用 CMEK
在解密使用 CMEK 封装的数据时,Memorystore 会使用 Cloud Key Management Service 中的 KEK 来解密 DEK,并使用未加密的 DEK 来解密静态数据。

价格
Memorystore for Redis 对启用了 CMEK 的实例的计费方式与任何其他实例相同;不会产生额外的费用。如需了解详情,请参阅 Memorystore for Redis 价格。
您可以使用 Cloud KMS API 管理 CMEK。 当您使用 CMEK 创建 Memorystore for Redis 实例时,Memorystore 会定期使用该密钥来加密数据。
当 Memorystore for Redis 使用相应密钥时,Cloud KMS 会向您收取该密钥的费用以及加密和解密操作的费用。如需了解详情,请参阅 Cloud KMS 价格。
Memorystore 何时与 CMEK 进行交互?
| 操作 | 说明 |
|---|---|
| 创建实例 | 创建实例时,您可以将其配置为使用 CMEK。 |
| 更新实例 | 在对启用了 CMEK 的实例进行更新期间,Memorystore for Redis 会检查 CMEK。 |
哪些数据使用 CMEK 加密?
CMEK 会加密以下类型的数据:
服务账号简介
创建使用 CMEK 的实例时,您必须向具有以下格式的 Memorystore for Redis 服务账号授予 cloudkms.cryptoKeyEncrypterDecrypter 角色:
service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com
授予此权限后,服务账号便可向 Cloud KMS 请求密钥访问权限。
如需了解如何向服务账号授予此权限,请参阅向 Memorystore for Redis 服务账号授予对密钥的访问权限。
密钥简介
在 Cloud KMS 中,您需要创建一个包含加密密钥的密钥环,该密钥使用对称加密算法。创建 Memorystore for Redis 实例时,您可以选择使用此密钥来加密该实例。您可以为密钥和实例创建一个项目,也可以为它们分别创建不同的项目。
CMEK 在所有 Memorystore for Redis 实例位置均可用。您必须在要创建实例的同一区域中创建密钥环和密钥。多区域密钥或全球区域密钥将不起作用。如果区域或位置不匹配,则创建实例的请求将失败。
对于密钥的资源 ID,CMEK 使用以下格式:
projects/CMEK_ENABLED_PROJECT/locations/REGION/keyRings/KEY_RING_NAME/cryptoKeys/KEY_NAME
如果 Memorystore for Redis 无法访问任何正在使用的密钥版本(例如,您停用了所有密钥版本),则 Memorystore for Redis 会关闭实例。在 Google Cloud 控制台中,暂停的实例会在实例页面上显示红色感叹号提示。如果您将鼠标悬停在工具提示上,系统会显示 No state 状态。密钥可供访问后,Memorystore for Redis 会自动恢复实例。
外部密钥
您可以通过 Cloud External Key Manager (Cloud EKM) 使用您管理的外部密钥加密Google Cloud 中的数据。
当您使用 Cloud EKM 密钥时,Google 无法控制外部管理的密钥的可用性。如果您在创建实例时密钥不可用,则系统不会创建该实例。
如需了解使用外部密钥的更多注意事项,请参阅 Cloud External Key Manager。
如何使 CMEK 加密的数据永远无法访问?
您可能遇到这样的情况,即您需要使使用 CMEK 加密的数据永远无法访问。为此,您需要销毁密钥版本。如需详细了解如何销毁密钥版本,请参阅销毁和恢复密钥版本。
如何为启用了 CMEK 的实例导入或导出数据?
如果您希望在导出数据时仍使用 CMEK 加密数据,则必须先在 Cloud Storage 存储桶上设置 CMEK,然后再将数据导出到其中。
如果您的数据存储在启用了 CMEK 的实例上,则将数据导入新实例时不存在特殊要求或限制。
CMEK 密钥版本的行为
本部分介绍了停用、销毁、轮替、启用和恢复密钥版本时会发生的情况。
停用或销毁 CMEK 密钥版本
如果您想确保无法访问您的实例中的任何数据,请停用 CMEK 的主密钥版本。此操作会关停您的实例。此外,如果正在使用的任何 CMEK 被停用或销毁,Memorystore for Redis 会关闭相应实例。这包括实例使用的任何旧密钥版本。
如需查看 Memorystore for Redis 是否暂停了您的实例,请使用以下任一界面:
- Google Cloud 控制台:在实例页面中,您的实例旁边会显示红色感叹号提示。如果您将鼠标悬停在工具提示上,系统会显示
No state状态。 - gcloud CLI:使用
gcloud redis instances describe命令。验证您是否未在实例元数据中看到state: READY、state: REPAIRING或任何其他状态。
启用或恢复主 CMEK 密钥版本
如果您启用或恢复 CMEK 的主密钥版本,Memorystore for Redis 将不再隐藏您的实例。
限制
将 CMEK 与 Memorystore for Redis 搭配使用时,存在以下限制:
- 您无法在现有 Memorystore for Redis 实例上启用 CMEK。
- 密钥、密钥环和实例的区域必须完全相同。
- 您必须为密钥使用对称加密算法。
- Cloud KMS 加密和解密费率受配额限制。
CMEK 组织政策
Memorystore for Redis 支持可用于 CMEK 保护的组织政策限制条件。
政策可以限制哪些 Cloud KMS 密钥可用于 CMEK 保护。
如果 Memorystore for Redis API 位于
constraints/gcp.restrictNonCmekServices限制条件的服务Deny政策列表中,则您无法创建未受 CMEK 保护的实例。如果您配置
constraints/gcp.restrictCmekCryptoKeyProjects限制条件,Memorystore for Redis 会创建受 CMEK 保护的实例,这些实例使用允许的项目、文件夹或组织中的密钥进行加密。
如需详细了解如何配置 CMEK 组织政策,请参阅 CMEK 组织政策。