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

默认情况下,Bigtable 中的所有静态数据均使用 Google 的默认加密方式。Bigtable 会为您处理和管理此加密,您无需执行任何额外操作。

如果您对保护数据的密钥有特定的合规性或监管要求,则可以将客户管理的加密密钥 (CMEK) 用于 Bigtable。Bigtable 实例使用由您在 Cloud Key Management Service (Cloud KMS) 中控制和管理的密钥进行保护,而不是由 Google 管理用于保护您的数据的加密密钥。

本页面介绍如何将 CMEK 用于 Bigtable。如需大致了解 CMEK(包括其启用时间和原因),请参阅 Cloud KMS 文档。如需了解如何使用 Bigtable 执行与 CMEK 相关的任务,请参阅使用 CMEK

功能

  • 安全性:CMEK 提供与 Google 默认加密相同的安全级别,但提供更多的管理控制。

  • 数据访问权限控制:管理员可以轮替用于保护 Bigtable 中的静态数据的密钥、管理对该密钥的访问权限以及停用或销毁该密钥。

  • 可审核性:对 CMEK 密钥的所有操作都会在 Cloud Logging 中记录并可供查看。 Cloud EKM 密钥支持 Key Access Justifications,这会为所有密钥请求添加一个理由字段。借助特定的外部密钥管理合作伙伴,您可以根据理由自动批准或拒绝这些请求。

  • 相当的性能:受 CMEK 保护的实例提供了与使用 Google 默认加密的 Bigtable 实例相当的性能。

  • 灵活性:您可以在多个项目、实例或集群中使用相同的 CMEK 密钥,也可以根据业务需求使用不同的密钥。

  • 跨区域保护:您可以在提供 Bigtable 的任何区域中具有集群的实例中启用 CMEK。每个集群都受该集群区域中的 CMEK 密钥保护。

价格

Cloud KMS 会收取该密钥以及使用该密钥执行的任何加密操作的费用。如需了解详情,请参阅 Cloud KMS 价格

当 Bigtable 要求 Cloud KMS 密钥执行加密或解密操作时,您就需要支付相应的操作费用。每个加密或解密请求都会从实例中每个集群上的每个表中发送。由于 Bigtable 使用信封加密,因此,由于预期的加密操作数量较小,每个表的这些费用通常较低。如果将许多表存储在受 CMEK 保护的实例中,则费用会较高。

使用启用了 CMEK 的实例不会产生额外的 Bigtable 费用。

受 CMEK 保护的内容

在受 CMEK 保护的实例中,Bigtable 会使用您的 CMEK 密钥来保护您的静态数据。这些数据包括集群内所有表中的数据。存储在 HDD 和 SSD 存储空间中的数据都受到保护。

一些静态数据受 Google 默认加密保护,而不是受 CMEK 密钥保护:

  • 用于标记范围边界并用于路由的一部分行键
  • 调试数据,包括核心转储和操作日志
  • 传输中或内存中的数据
  • 用于垃圾回收的部分时间戳值

Bigtable 将信封加密用于静态数据。CMEK 密钥用作密钥加密密钥 (KEK) 来加密 Bigtable 使用的其他密钥。轮替 CMEK 密钥时,Bigtable 只需重新加密中间密钥。

启用 CMEK

概括来讲,要将 CMEK 与 Bigtable 搭配使用,请按以下步骤操作:

  1. 在将要放置实例集群的每个区域中创建并配置 CMEK 密钥。
  2. 创建新的 Bigtable 实例,为实例中的每个集群选择 CMEK 密钥。集群的 CMEK 密钥必须与集群位于同一区域。
  3. 为每个密钥安排密钥轮替

使用 Bigtable 的应用在读取、写入或删除数据时无需指定密钥或加密配置。您将 Cloud KMS Encrypter/Decrypter 角色授予 Bigtable 服务代理后,Bigtable 将能够代表您访问该密钥。

如需了解详细说明,请参阅使用 CMEK

将 CMEK 用于 Bigtable 时,您可以使用以下命令。

您也可以直接访问 Cloud Bigtable Admin API,但我们强烈建议只有在您无法使用对 API 进行 CMEK 调用的 Bigtable 客户端库时才直接访问。

密钥管理

密钥管理操作使用 Cloud KMS 执行。在 Cloud KMS 传播任何密钥更改之前,Bigtable 无法检测或处理任何密钥更改。某些操作(例如停用或销毁密钥)最多可能需要 4 小时才能传播;对密钥权限的更改传播通常快很多。

在受 CMEK 保护的实例中创建至少一个表后,Bigtable 每 5 分钟验证每个集群中的每个表的密钥。

如果 Bigtable 检测到已停用的密钥,则会以级联的方式一次停用一个集群,直到实例中的所有集群都被停用。在第一个集群报告某个密钥已停用或销毁后,在停用实例之前,一些数据请求可能会成功,而另一些请求会返回错误。发送到已停用集群的任何数据操作都会返回 FAILED_PRECONDITIONNOT_FOUND 错误。

此外,由于 Bigtable 复制最终将保持一致,因此在实例被停用之前,有可能出现集群已经确认了写入请求但尚未将其复制到实例中的其他集群的情况。

Bigtable 在停用一个密钥之后自动停用实例中所有集群的过程最多可能需要几个小时。为避免出现这种状态,我们建议您始终同时停用实例的所有密钥。

停用 Bigtable 集群后,整个实例限制以下管理操作:

  • 创建集群
  • 删除集群
  • 创建表
  • 修改列族
  • 恢复表

您仍然可以删除实例、删除表和删除备份。

如果 Bigtable 对 Cloud KMS 的调用检测到之前已停用的密钥已重新启用,则 Cloud KMS 会自动恢复对 Bigtable 集群的访问权限。

如果 Cloud KMS 密钥已销毁,则具有使用该密钥加密的集群的任何 Bigtable 实例都将永久无法访问。

如何处理不可用的密钥状态

在极少数情况下,例如 Cloud KMS 不可用期间,Bigtable 可能无法从 Cloud KMS 中检索密钥的状态。

如果 Bigtable 集群受密钥保护,而在 Bigtable 首次无法与 Cloud KMS 通信时已启用该密钥,则 Bigtable 将使用从 Cloud KMS 密钥派生的缓存密钥继续尽最大努力支持完整的实例操作最多 1 小时,以最大限度降低任何此类突发事件对工作负载的影响。

一小时后,如果 Bigtable 仍无法连接到 Cloud KMS,则 Bigtable 会开始让该实例离线作为保护措施。在 Bigtable 能够重新连接到 Cloud KMS 并且 Cloud KMS 回应表明该密钥处于活动状态之前,Bigtable 实例中的数据将保持无法访问状态。

相反,如果您的 Bigtable 实例中的集群受密钥保护,而 Bigtable 首次无法与 Cloud KMS 通信之前已停用该密钥,则您的实例在它能够重新连接到 Cloud KMS 并且您重新启用该密钥之前将保持无法访问状态。

外部密钥注意事项

当您使用 Cloud EKM 时,Google 无法控制由外部管理的密钥在外部密钥管理合作伙伴系统中的可用性。

如果外部管理的密钥不可用,Bigtable 将继续支持使用密钥的缓存版本的集群操作,最长可达一小时。

一小时后,如果 Bigtable 仍无法连接到 Cloud KMS,则会开始让该实例离线作为保护措施。在 Bigtable 实例能够重新连接到 Cloud KMS 并且 Cloud KMS 回应表明该外部密钥处于有效状态之前,该实例中的数据将保持无法访问状态。

如果您计划对在多个区域中拥有集群的 Bigtable 实例使用外部密钥,请确保这些区域都支持您的密钥。如需了解详情,请参阅外部密钥管理器和区域。此外,您不应同时使用 同一个实例中的外部密钥和非外部密钥。

如需详细了解如何将外部密钥与 Cloud Key Management Service 搭配使用,请参阅 Cloud External Key Manager (Cloud EKM)

组织政策

Bigtable 支持组织政策限制条件,这有助于确保在整个组织范围内使用 CMEK。如需详细了解如何使用组织政策,请参阅 CMEK 组织政策

备份

与其他数据一样,备份受存储备份的集群的 CMEK 密钥保护。从备份中恢复的新表受 CMEK 密钥从中恢复新表的集群的密钥保护。如需详细了解 CMEK 如何影响备份和恢复操作,请参阅备份。如需了解如何创建备份或从备份恢复,请参阅管理备份

日志记录

如果您已经为项目中的 Cloud KMS API 启用 Cloud KMS 审核日志,则可以在 Cloud Logging 中审核 Bigtable 代表您发送给 Cloud KMS 的请求。每个集群中的每个表大约每 5 分钟显示几个日志条目。

限制

  • CMEK 只能在集群层级配置。不能对备份、表或应用配置文件配置 CMEK。

  • 集群的 CMEK 密钥必须与集群位于同一区域。创建 Cloud KMS 密钥环时,请务必选择与计划的 Bigtable 地区配置相对应的区域。

  • Bigtable 资源(实例、集群、表或备份)的加密配置是不可变的。

    • 非 CMEK 实例无法转换为使用 CMEK。
    • CMEK 实例无法转换为使用 Google 默认加密。
    • 使用 CMEK 密钥创建的集群无法重新配置为使用其他密钥。
  • 对于受 CMEK 保护的 Bigtable 资源(实例、集群、表或备份),如果它们与用户触发的操作(例如,停用或销毁密钥,或通过撤消 Encrypter/Decrypter 角色)导致无法访问超过连续的 30 天的密钥关联,则会自动删除这些资源。

  • 如果您重新启用已停用的 CMEK 密钥以恢复对受该密钥保护的 Bigtable 实例的访问权限,则在让您的数据恢复在线状态期间,一些 Data API 请求可能会超时。

  • 在受 CMEK 保护的实例中创建表后最多五分钟内,密钥版本和密钥状态可能显示为未知。但是,在此期间写入表中的所有数据都仍受 CMEK 密钥保护。

  • 如果只停用或删除 Bigtable 使用的密钥的某个版本而不是密钥的所有版本,则可能会导致不可预测的行为。始终停用或删除 CMEK 密钥的所有版本

后续步骤