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

本页介绍了 Spanner 的客户管理加密密钥 (CMEK)。如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档

默认情况下,Spanner 会静态加密客户内容。Spanner 会为您处理加密,您无需执行任何其他操作。此选项称为“Google 默认加密”

如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Spanner)搭配使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。 使用 Cloud KMS 还可让您查看审核日志和控制密钥生命周期。 这样您就可以在 Cloud KMS 中控制和管理用于保护数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。

使用 CMEK 设置资源后,访问 Spanner资源的体验与使用 Google 默认加密功能类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)

如需了解如何使用手动创建的 CMEK 来保护 Spanner 资源,请参阅使用 CMEK 保护数据库

功能

  • 数据访问权限控制:管理员可以轮替用于保护 Spanner 中的静态数据的密钥、管理对该密钥的访问权限以及停用或销毁该密钥。
  • 可审核性:如果您为项目中的 Cloud KMS API 启用审核日志记录,则针对密钥的所有操作(包括由 Spanner 执行的操作)会在 Cloud Logging 中记录并可供查看。 Cloud EKM 密钥支持密钥访问理由,这会为所有密钥请求添加一个理由字段。借助特定的外部密钥管理合作伙伴,您可以根据理由自动批准或拒绝这些请求。
  • 性能:使用 CMEK 不会改变 Spanner 的性能服务等级协议
  • 支持多个区域级密钥:您可以创建多个区域级(单区域)Cloud KMS 密钥,以保护采用 Spanner 自定义、双区域或多区域实例配置的数据库。

价格

Spanner 像任何其他数据库一样对启用 CMEK 的数据库进行计费。启用 CMEK 不会产生额外的 Spanner 费用。如需了解详情,请参阅 Spanner 价格

将会向您收取该密钥以及针对该密钥执行的任何加密操作的费用(每当 Spanner 使用该密钥进行加密/解密时)。根据 Spanner 生成的加密操作的预期数量,我们预计这些费用会很小。如需了解详情,请参阅 Cloud KMS 价格

受 CMEK 保护的内容

在启用 CMEK 的数据库中,Spanner 使用您的 Cloud KMS 密钥来保护静态数据。这包括存储在磁盘或闪存上的数据库中的数据。

有一些例外情况。以下类型的数据受 Google 默认静态加密保护,而不是受 CMEK 密钥保护:

  • 行密钥的子集,用于标记范围边界
  • 调试数据,包括核心转储和操作日志
  • 传输中的数据或内存中的数据
  • 数据库元数据

在 Spanner 中,有三层加密。静态数据分成子文件区块进行存储,每个区块都在存储系统层级以单独的加密密钥进行加密。用于对块中的数据进行加密的密钥称为数据加密密钥 (DEK)。由于 Google 的密钥很多,且需要提供低延迟、高可用性的服务,因此这些密钥都存储在用其加密的数据附近。DEK 本身使用“密钥加密密钥”(KEK) 进行加密(或封装)。最后,每个 KEK 都通过您的 CMEK 进行加密。

当您轮替 CMEK 密钥时,Spanner 只会使用最新主要版本的 CMEK 密钥重新加密中间 KEK。重新加密完成后,停用或删除旧版本的 CMEK 密钥不会停用对数据库的访问权限。您还可以查看密钥版本(要使用这些版本来保护数据库)。

使用 CMEK

演示使用客户管理的加密密钥进行加密的图表

不使用 CMEK

说明如何使用 Google-owned and Google-managed encryption key进行加密的图表

启用 CMEK

如需将 CMEK 用于 Spanner 数据库,您必须在创建数据库时创建新的数据库并指定 Cloud KMS 密钥。将 Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色授予 Spanner 服务账号后,Spanner 将能够代表您访问该密钥。如需了解详细说明,请参阅使用 CMEK 保护数据库