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

本文档介绍如何在 Cloud Key Management Service (Cloud KMS) 中为 Memorystore for Redis 实例使用客户管理的加密密钥 (CMEK) 。本文档还概述了哪些数据在永久性存储空间中进行了加密,以及实例在密钥生命周期事件期间的行为。

借助 CMEK,您可以控制用于保护存储数据的加密密钥。通过在 Cloud KMS 中管理自己的密钥,您可以更好地控制密钥访问、轮替和使用,这有助于您满足严格的合规性和监管要求。

实施 CMEK 可为永久性数据(例如备份和持久性文件)提供额外的安全和控制层。您只能在新实例上启用 CMEK。您无法将 CMEK 应用于现有实例。

哪些人应使用 CMEK?

CMEK 适用于拥有敏感数据或受监管数据且需要控制自己的加密密钥的组织。如需详细了解 是否使用 CMEK 加密此类数据,请参阅 决定是否使用 CMEK

客户管理的加密

借助 CMEK,您可以使用加密密钥来保护实例中存储的数据。 如需加密此类数据,Memorystore for Redis 会使用 Google 管理的数据加密密钥 (DEK) 和客户管理的密钥加密密钥 (KEK)。

您可以采用以下加密级别:

  • DEK 加密:DEK 会加密 Memorystore for Redis 中的数据。
  • KEK 加密:KEK 会加密 DEK。

Memorystore for Redis 使用 KEK 加密 DEK,并使用 DEK 加密存储的数据。如果您使用 CMEK,则可以管理用于加密实例中 DEK 的 KEK。

下图显示了实例如何使用 CMEK 加密数据。上传到 Google 存储基础架构的数据会进行分块,每个区块使用自己的 DEK 进行加密。Cloud KMS 提供 KEK 来加密 DEK,而 Google 的存储基础架构会在整个系统中分发加密的数据区块和加密的 DEK。

数据会上传到 Google 的存储基础设施,并分成多个块。每个块都使用自己的 DEK 进行加密。然后,使用从 Cloud KMS 检索到的 KEK 对 DEK 进行加密。加密的区块和加密的 DEK 分布在存储基础架构中。

下图显示了 Memorystore for Redis 如何解密使用 CMEK 加密的数据。如需访问此加密数据,Memorystore for Redis 会向管理 KEK 的 Cloud KMS 发送请求,以解密 DEK。然后,Cloud KMS 会返回解密的 DEK,实例会使用该 DEK 解密存储的数据。

数据区块使用 DEK 进行加密,使用加密的 DEK 进行存储。系统会将解密 DEK 的请求发送到 Cloud KMS,该服务用于存储 KEK。Cloud KMS 返回解密的 DEK。

Memorystore 何时与 CMEK 交互?

操作 说明
创建实例 创建实例时,您可以将其配置为使用 CMEK。
更新实例 在对启用了 CMEK 的实例进行更新期间,Memorystore for Redis 会检查 CMEK。

哪些数据使用 CMEK 加密?

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

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

服务账号简介

使用 CMEK 创建实例时,您必须向 Memorystore for Redis 服务帐号授予 cloudkms.cryptoKeyEncrypterDecrypter 角色,该服务账号采用以下格式:

  service-PROJECT_NUMBER@cloud-redis.
  

授予此权限后,服务帐号可以向 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 被停用或销毁,Memorystore for Redis 也会关闭该实例。 这包括实例使用的任何旧密钥版本。

如需查看 Memorystore for Redis 是否暂停了您的实例,请使用以下任一界面:

  • Google Cloud 控制台:在“实例”页面中,您的实例旁边会显示红色感叹号 提示。如果您将鼠标悬停在该提示上,则会显示 No state 状态。
  • gcloud CLI:使用 gcloud redis instances describe 命令。验证您是否在实例元数据中看到 state: READYstate: REPAIRING 或任何其他状态。

手动重新加密受 CMEK 保护的数据

Memorystore for Redis 不支持按需重新封装现有静态数据。您无法手动触发进程以使用新密钥版本重新加密现有备份或活跃的持久性文件。不过,您可以使用新密钥版本加密新写入的数据。

替换受保护的 KMS 密钥

如果您将受保护的 KMS 密钥替换为其他 KMS 密钥或新的主密钥版本,则 Memorystore for Redis 仅将此更改应用于未来的操作。

替换受保护的 KMS 密钥会以以下方式影响您的资源:

  • 备份:Memorystore for Redis 会将备份导出到 Cloud Storage 存储分区。Cloud Storage 加密密钥控制用于加密数据的密钥。
  • 持久性:下次实例重启或发生维护 事件时,系统会使用新的 KMS 密钥。
  • 主缓存:替换此密钥没有任何影响。CMEK 不会加密内存中的数据,因为此类数据不被视为静态数据。

启用或恢复主 CMEK 密钥版本

如果您 启用或恢复 主密钥 版本,则 Memorystore for Redis 不再隐藏您的实例。

组织政策限制条件

Memorystore for Redis 支持 CMEK 的组织政策限制条件。通过使用这些限制条件,您可以为实例强制执行 CMEK 保护,并限制可用于此保护的 Cloud KMS 密钥。

您可以配置以下组织政策限制条件:

  • constraints/gcp.restrictNonCmekServices:使用此限制条件为实例强制执行 CMEK 保护。如果 Memorystore for Redis API 位于此限制条件的 Deny 政策服务列表中,则您无法 创建非 CMEK 保护的实例。
  • constraints/gcp.restrictCmekCryptoKeyProjects:使用此限制条件限制可用于 CMEK 保护的 Cloud KMS 密钥。如果您配置此限制条件,则使用 CMEK 加密的实例必须使用允许的项目、文件夹或组织中的密钥。

由于 Memorystore for Redis 和 Memorystore for Redis Cluster 共享同一端点 (redis.googleapis.com),因此您无法在 Memorystore for Redis Cluster 中独立于集群为 实例强制执行 CMEK。

如需详细了解 Google 为 Memorystore for Redis 管理的与 CMEK 相关的组织政策限制条件,请参阅组织政策限制条件

价格

Memorystore for Redis 对启用了 CMEK 的实例的计费方式与任何其他实例相同;不会产生额外的费用。如需了解详情,请参阅 Memorystore for Redis 价格

您可以使用 Cloud KMS API 管理 CMEK。 使用 CMEK 创建实例时,Memorystore 会定期使用该密钥来加密数据。

当 Memorystore for Redis 使用相应密钥时,Cloud KMS 会向您收取该密钥的费用以及加密和解密操作的费用。如需了解详情,请参阅 Cloud KMS 价格

限制

将 CMEK 与 Memorystore for Redis 搭配使用时,存在以下限制:

  • 您无法在现有实例上启用 CMEK。
  • 密钥、密钥环和实例必须位于同一区域中。
  • 您必须为密钥使用对称加密算法。
  • Cloud KMS 加密和解密费率受配额限制。

后续步骤