客户管理的加密密钥 (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

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

使用 CMEK

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

在解密使用 CMEK 封装的数据时,Memorystore 会使用 Cloud Key Management Service 中的 KEK 来解密 DEK,并使用未加密的 DEK 来解密静态数据。

数据区块使用 DEK 进行加密,使用封装的 DEK 进行存储。系统会将解封 DEK 的请求发送到 KMS 存储空间,该存储空间用于存储不可导出的 KEK。KMS 存储空间返回解封后的 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 会加密以下类型的数据:

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

服务账号简介

使用 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: READYstate: REPAIRING 或任何其他状态。

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

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

替换受保护的 KMS 密钥

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

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

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

启用或恢复主 CMEK 密钥版本

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

限制

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

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

CMEK 组织政策限制条件简介

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

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

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