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

默认情况下,Cloud Firestore 中的所有静态数据均使用 Google 默认加密进行加密。Cloud Firestore 会为您处理和管理此加密,您无需执行任何其他操作。

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

本页面介绍了适用于 Cloud Firestore 的 CMEK。如需进一步了解 CMEK 的整体信息或常规概念,包括何时以及为何启用它,请参阅以下 Cloud KMS 文档:

如需了解如何使用 Cloud Firestore 执行与 CMEK 相关的任务,请参阅使用 CMEK

功能

  • 数据控制:借助 CMEK,您可以管理 KMS 密钥。您可以轮替、停用和销毁用于加密 Cloud Firestore 数据库中静态数据的密钥。
  • 性能:CMEK 不会影响 Cloud Firestore SLA
  • 可审核性:如果您为 Cloud KMS 启用审核日志记录,则针对密钥的所有操作都会被记录,并可在 Cloud Logging 中查看。
  • 组织政策限制条件:您可以使用 CMEK 组织政策限制条件为贵组织中的 Cloud Firestore 数据库指定加密合规性要求。

价格

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

Cloud Firestore 要求 Cloud KMS 密钥执行加密或解密操作时,您需支付相应的操作费用。客户管理的密钥每 5 分钟执行一次加密/解密操作,并且不会与数据库请求同步。鉴于 Cloud Firestore 生成的加密操作的预期数量,费用通常较低。Cloud Audit Logs 的费用是额外的开支,但考虑到预期的加密操作数量,预计费用通常较低。

使用受 CMEK 保护的数据库不会产生额外的 Cloud Firestore 费用,并且 Cloud Firestore 价格仍会继续适用。

如果您撤消数据库对该密钥的访问权限,系统将根据该密钥最后可用当日的数据库大小收取存储费用。在数据库被删除或密钥重新可用之前,您将继续按该数据库大小产生存储费用。

受 CMEK 保护的内容

创建受 Cloud Firestore CMEK 保护的数据库时,您的 Cloud KMS 密钥将用于保护静态数据。这包括您存储在磁盘或闪存盘上的数据,包括索引和备份。有一些例外情况。以下数据类型使用 Google 默认加密(而非 CMEK 密钥)进行加密:

  • 传输中的数据或内存中的数据
  • 数据库元数据

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

系统不会针对每个数据请求发出加密和解密操作。相反,Cloud Firestore 系统会每 5 分钟轮询一次 Cloud KMS 以检查密钥是否仍可用,如果可用,则执行加密和解密操作。

如果系统检测到密钥不可用,则在 10 分钟内,对 Cloud Firestore 数据库的任何后续调用(包括读取、写入和查询)都会返回 FAILED_PRECONDITION 错误,并附带 The customer-managed encryption key required by the requested resource is not accessible 消息。

如果数据库具有存留时间 (TTL) 政策,并且在密钥不可用时超过任何到期时间,根据存留时间删除数据将延迟到密钥恢复后。如果数据库有正在进行的长时间运行的操作,这些操作会受到以下影响:

  • 数据导入导出操作将停止进行,并会标记为 Failed。即使密钥恢复,系统也不会重试失败的操作。
  • 索引构建操作和启用新的 TTL 政策的操作将停止进行。如果密钥恢复,系统会重试已停止的操作。

在任何有意阻止 Cloud Firestore 访问密钥的情况下,密钥都被视为不可用。其中包括:

如果密钥恢复,轮询操作会检测到密钥再次可用。系统通常会在几分钟内重新启用访问权限,但在极少数情况下可能需要长达数小时的时间。请注意,对 Cloud KMS 密钥执行的某些操作(例如停用或销毁密钥)的变更最多可能需要 3 小时才能生效。在 Cloud KMS 中生效之前,Cloud Firestore 不会检测任何更改。

恢复密钥涉及以下操作,具体取决于具体情况:

  • 重新启用已停用的密钥版本。
  • 恢复已销毁的密钥版本。在永久销毁之前,密钥版本会被排程销毁。您只能在密钥版本处于销毁排程期间恢复该密钥。您无法恢复已永久销毁的密钥。
  • 重新授予 Cloud Firestore 服务代理对密钥的访问权限。

密钥轮替注意事项

轮替 CMEK 密钥时,Cloud Firestore 会使用最新主要版本的 CMEK 密钥重新加密数据库。在重新加密过程中,请同时保留旧版密钥和新版密钥。重新加密完成后,停用或删除旧版 CMEK 密钥不会停用对数据库的访问权限,因为数据库是使用新版主密钥加密的。

您还可以查看用于保护数据库的密钥版本。如需了解详情,请参阅查看正在使用的密钥

外部密钥注意事项

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

如果外部管理的密钥不可用,Cloud Firestore 会继续尽力支持完整的数据库操作,最长可达一小时。

一小时后,如果 Cloud Firestore 仍无法连接到 Cloud KMS,Cloud Firestore 会将数据库设为离线状态作为保护措施。对数据库的调用将失败,并返回包含更多详细信息的 FAILED_PRECONDITION 错误。

如需详细了解如何使用外部密钥,请参阅 Cloud External Key Manager 文档

备份和恢复

备份使用与创建它的数据库相同的加密机制。受 CMEK 保护的 Cloud Firestore 数据库创建备份时,会使用在创建备份时所用的主密钥版本对备份进行加密。

Cloud Firestore 会在您启用备份时间表后的 24 小时后创建 CMEK 数据库的首次备份。

如需详细了解 Cloud Firestore 备份,请参阅备份和恢复数据

从备份恢复的数据库默认使用与备份相同的加密机制。恢复数据库时,您可以通过以下任一方式指定不同的加密类型:

  • 使用新指定的密钥恢复到 CMEK 数据库。
  • 恢复到未启用 CMEK 且使用 Google 默认加密的数据库。
  • 恢复到与备份使用相同加密方式的数据库。

如需详细了解如何从备份恢复 Cloud Firestore 数据库,请参阅从数据库备份恢复数据。如需详细了解如何从备份中恢复受 CMEK 保护的 Cloud Firestore 数据库,请参阅恢复受 CMEK 保护的数据库

密钥跟踪

您可以使用密钥跟踪功能查看密钥所保护的资源,例如 Cloud Firestore 数据库。如需详细了解密钥跟踪,请参阅查看密钥使用情况

CMEK 和密钥可用性

当密钥不可用或已停用时,请注意启用了 CMEK 的数据库中可能会出现以下行为:

  • 您可以更改启用了 CMEK 的数据库的Cloud Firestore时间点恢复 (PITR) 设置,即使密钥不可用也是如此,因为 PITR 设置是数据库元数据,而数据库元数据不会被 CMEK 加密。
  • 您可以删除密钥不可用的 CMEK 数据库。
  • 创建启用了 CMEK 的数据库时,已停用的密钥不会显示在 Google Cloud 控制台中的可用密钥列表中。如果您手动输入已停用的密钥,数据库创建过程将失败,并返回 FAILED_PRECONDITION 错误 400。

限制

  • 您无法更换受 CMEK 保护的数据库所使用的密钥。您可以旋转、启用和停用密钥。
  • 受 CMEK 保护的数据库仅支持对实体和文档数据使用密钥可视化工具,不支持用于索引数据。
  • 您无法在现有数据库上启用 CMEK。您只能在新数据库上启用 CMEK,并且必须在创建数据库时启用 CMEK。如需将现有未启用 CMEK 的数据库中的数据迁移到受 CMEK 保护的数据库,请导出数据,然后将数据导入到受 CMEK 保护的新数据库。您还可以将数据从未启用 CMEK 的数据库恢复到 CMEK 数据库。
  • Cloud Firestore 支持数量有限的受 CMEK 保护的数据库。
  • 我们不支持与 Cloud Functions(第 1 代)集成使用 CMEK 保护。如果您希望使用 CMEK 保护,请使用 Cloud Run functions Firestore 触发器(第 2 代)

后续步骤