客户管理的加密密钥 (CMEK)
默认情况下,Firestore 的静态数据均使用 Google 的默认加密进行加密。Firestore 会为您处理和管理这项加密工作,您无需执行任何额外操作。
如果您对保护数据的密钥有特定的合规性或监管要求,则可以将客户管理的加密密钥 (CMEK) 用于 Firestore。您的 Firestore 数据库由您在 Cloud Key Management Service (Cloud KMS) 中控制和管理的密钥进行保护,而不是由 Google 管理用于保护您的数据的加密密钥。
本页介绍了适用于 Firestore 的 CMEK。如需大致了解 CMEK(包括其启用时间和原因),请参阅以下 Cloud KMS 文档:
如需了解如何使用 Firestore 执行与 CMEK 相关的任务,请参阅使用 CMEK。
特性
- 数据控制:借助 CMEK,您可以管理 KMS 密钥。您可以轮替、停用和销毁用于加密 Firestore 数据库中静态数据的密钥。
- 性能:CMEK 不会影响 Firestore SLA。
- 可审核性:如果您为 Cloud KMS 启用审核日志记录,则对密钥的所有操作都会记录在 Cloud Logging 中并可供查看。
- 组织政策限制条件:您可以使用 CMEK 组织政策限制条件为组织中的 Firestore 数据库指定加密合规性要求。
价格
Cloud KMS 会收取该密钥以及使用该密钥执行的任何加密操作的费用。如需了解详情,请参阅 Cloud KMS 价格。
当 Firestore 要求 Cloud KMS 密钥执行加密或解密操作时,您就需要支付相应的操作费用。客户管理的密钥的加密/解密操作每 5 分钟发生一次,并且不会与数据库请求同步。由于预期的加密操作数量较小,费用通常较低。Cloud Audit Logs 的费用是一项额外开支,但考虑到预期的加密操作数量,预计费用通常也不高。
使用受 CMEK 保护的数据库不会产生额外的 Firestore 费用,Firestore 价格仍然适用。
如果您撤消对数据库的密钥,系统会根据密钥上次可用之日的数据大小收取存储费用。在该数据库被删除或密钥重新可用之前,您将继续按该数据库大小支付存储费用。
受 CMEK 保护的内容
创建受 CMEK 保护的 Firestore 数据库时,您的 Cloud KMS 密钥将用于保护静态数据。这包括您存储在磁盘或闪存盘上的数据,包括索引和备份。有一些例外情况。以下数据类型使用 Google 默认加密进行加密,而不是使用 CMEK 密钥:
- 传输中或内存中的数据
- 数据库元数据
如何处理不可用的密钥状态
系统不会针对每个数据请求发出加密和解密操作。而是 Firestore 系统每 5 分钟轮询一次 Cloud KMS,以检查密钥是否仍可用,如果密钥可用,则执行加密和解密操作。
如果系统检测到密钥不可用,那么在 10 分钟内,对 Firestore 数据库的任何后续调用(包括读取、写入和查询)都会返回包含 The customer-managed encryption key required by the requested
resource is not accessible
消息的 FAILED_PRECONDITION
错误。
如果数据库具有存留时间 (TTL) 政策,并且在密钥不可用时超出任何到期时间,则根据 TTL 删除数据将延迟到密钥恢复为止。如果数据库中有正在进行的长时间运行的操作,则这些操作将受到以下影响:
- 数据import或导出操作将停止进行,并标记为
Failed
。如果密钥恢复,系统不会重试失败的操作。 - 索引构建操作以及启用新 TTL 政策的操作将停止进行。如果密钥恢复,系统会重试已停止的操作。
如果在任何情况下故意禁止 Firestore 访问密钥,系统都会将密钥视为不可用。其中包括:
- 停用或销毁正在使用的密钥版本。销毁密钥版本时请务必小心,因为这可能会导致数据无法恢复。
- 移除 Firestore 服务账号对密钥的访问权限。
如果密钥已恢复,轮询操作会检测到密钥已恢复可用。访问权限通常会在几分钟内重新启用,但在极少数情况下,最长可能需要几个小时。请注意,对 Cloud KMS 密钥执行的某些操作(例如停用或销毁密钥)最多可能需要 3 小时才能传播。在 Cloud KMS 中生效之前,Firestore 不会检测任何更改。
恢复密钥涉及以下步骤,具体取决于具体情况:
- 重新启用已停用的密钥版本。
- 恢复已销毁的密钥版本。在永久销毁之前,密钥版本会被安排进行销毁。您只能在密钥版本已安排销毁期间恢复密钥。您无法恢复已永久销毁的密钥。
- 重新授予 Firestore 服务代理对密钥的访问权限。
密钥轮替注意事项
轮替 CMEK 密钥时,Firestore 会使用最新主要版本的 CMEK 密钥重新加密数据库。在重新加密过程中,请同时保留旧密钥版本和新密钥版本。重新加密完成后,停用或删除旧版本的 CMEK 密钥不会停用对数据库的访问权限,因为数据库是使用新的主要密钥版本加密的。
您还可以查看用于保护数据库的密钥版本。如需了解详情,请参阅查看正在使用的密钥。
外部密钥注意事项
当您使用 Cloud EKM 密钥时,Google 无法控制由外部管理的密钥在外部密钥管理合作伙伴系统中的可用性。
如果外部管理的密钥不可用,Firestore 可暂时使用密钥的缓存版本继续支持完整的数据库操作,时间最长可达一小时。
一小时后,如果 Firestore 仍无法连接到 Cloud KMS,Firestore 会将数据库设为离线状态作为保护措施。对数据库的调用将失败,并显示包含其他详细信息的 FAILED_PRECONDITION
错误。
如需了解使用外部密钥的更多注意事项,请参阅 Cloud External Key Manager 文档。
备份和恢复
备份使用与创建它的数据库相同的加密机制。受 CMEK 保护的 Firestore 数据库创建备份时,会使用创建备份时使用的主密钥版本对备份进行加密。
在您启用备份时间表 24 小时后,Firestore 会创建 CMEK 数据库的首次备份。
如需详细了解 Firestore 备份,请参阅备份和恢复数据。
默认情况下,从备份恢复的数据库使用与备份相同的加密机制。恢复数据库时,您可以通过以下任一方式指定其他加密类型:
- 使用新指定的密钥恢复到 CMEK 数据库。
- 恢复到使用 Google 的默认加密的非 CMEK 数据库。
- 恢复到与备份使用相同加密方式的数据库。
如需详细了解如何从备份恢复 Firestore 数据库,请参阅从数据库备份恢复数据。如需详细了解如何从备份恢复受 CMEK 保护的 Firestore 数据库,请参阅恢复受 CMEK 保护的数据库。
密钥跟踪
您可以使用密钥跟踪功能查看密钥保护的资源(例如 Firestore 数据库)。如需详细了解密钥跟踪,请参阅查看密钥使用情况。
CMEK 和密钥可用性
当密钥不可用或处于停用状态时,请注意启用 CMEK 的数据库中可能会出现以下行为:
- 您可以更改启用了 CMEK 的数据库上的 Firestore 时间点恢复 (PITR) 设置,即使密钥不可用也是如此,因为 PITR 设置是数据库元数据,不受 CMEK 加密。
- 您可以删除包含不可用密钥的 CMEK 数据库。
- 创建启用 CMEK 的数据库后,已停用的密钥不会显示在 Google Cloud 控制台中的可用密钥列表中。如果您手动输入已停用的密钥,数据库创建流程将失败并显示
FAILED_PRECONDITION
错误 400。
限制
- 您无法更改受 CMEK 保护的数据库的密钥。您可以旋转、启用和停用按键。
- 使用 CMEK 保护的数据库仅支持对实体和文档数据使用键可视化工具,不支持对索引数据使用。
- 您无法对现有数据库启用 CMEK。您只能在新数据库上启用 CMEK,并且必须在创建数据库时启用它。如需将现有非 CMEK 数据库中的数据迁移到受 CMEK 保护的数据库,请导出数据,然后将数据导入到新的受 CMEK 保护的数据库。您还可以将数据从非 CMEK 数据库恢复到 CMEK 数据库。
- Firestore 支持的受 CMEK 保护的数据库数量有限。
- 我们不支持将 CMEK 保护与 Cloud Functions(第 1 代)集成。 如果您想使用 CMEK 保护,请使用 Cloud Run functions Firestore 触发器(第 2 代)。