Cloud HSM 架构

本页内容的上次更新时间为 2023 年 11 月,代表截至本文撰写之时的状况。由于我们会不断改善对客户的保护机制,Google 的安全政策和系统今后可能会发生变化。

为了帮助您满足公司和合规性规定,Cloud HSM 可让您在获得 FIPS 140-2 3 级认证的硬件安全模块 (HSM) 中生成加密密钥并执行加密操作。

此白皮书介绍了 Cloud HSM 架构,包括硬件的管理方式以及密钥的证明和创建方式。

概览

加密操作包括加密静态数据、保护 Certificate Authority Service 的私钥以及保护数据加密密钥,以便它们可以与加密数据一起存储。Cloud HSM 使用 Marvell LiquidSecurity HSM(模型 CNL3560-NFBE-2.0-G 和 CNL3560-NFBE-3.0-G)和固件版本 3.4 build 09。如需详细了解我们的认证,请参阅证书 #3718

Cloud HSM 是一项全代管式服务,因此您可以保护工作负载,而无需操心管理 HSM 集群的运维开销。该服务具有以下优势:

  • 覆盖全球
  • 一致且统一的 API
  • 根据您的使用情况自动扩缩
  • 集中管理和监管合规性

Cloud HSM 可在全球每个 Google Cloud 区域使用,包括跨较大地理位置的多区域。启用 Cloud HSM 后,您可以创建并使用 HSM 支持的密钥来保护您的数据,包括存储在其他 Google Cloud 服务(如 BigQuery、Cloud Storage 和 Persistent Disk)中的数据。

由于 Cloud HSM 和 HSM 硬件由 Google 管理,因此您无需在生产环境中管理 HSM 支持的密钥。使用 Cloud HSM 时,您的数据会与 Google Cloud 中的其他租户和服务严格隔离。Cloud HSM 数据平面 API 是 Cloud Key Management Service API 的一部分,可让您以程序化方式管理 HSM 支持的密钥。

只要 Google Cloud 支持 客户管理的加密密钥 (CMEK),Cloud HSM 就支持 HSM 支持的 CMEK。例如,您可以使用您管理的 Cloud HSM 密钥对 Cloud Storage 存储桶或 Cloud SQL 表中的数据进行加密。

Cloud HSM 管理

在 Cloud HSM 中,HSM 集群由 Google 站点可靠性工程师 (SRE) 和每个 Google Cloud 数据中心位置的技术人员维护。Google 负责物理安全、逻辑安全、基础架构、容量规划、地理位置扩展和数据中心灾难恢复规划。

HSM 硬件抽象

通常,应用会使用 PKCS#11 和集群管理 API 直接与 HSM 通信。此类通信要求您为使用或管理 HSM 支持的密钥的工作负载维护专用代码。

Cloud HSM 通过 Cloud Key Management Service API 代理 HSM 支持的密钥的请求,从而将通信从 HSM 中抽象出来。此抽象减少了对 HSM 专用代码的需求。Cloud HSM 会继承与 Cloud KMS 的紧密集成。

与 Cloud KMS 紧密集成具有显著的安全优势。Cloud Key Management Service API 可显著降低可用的 HSM 接口的广度,从而在发生客户安全事故时降低风险。例如,攻击者将无法擦除整个 HSM。默认情况下,销毁各个密钥的尝试通过默认的 24 小时安全期来缓解。您可以设置 constraints/cloudkms.minimumDestroyScheduledDuration 组织政策以对新密钥强制实施安排销毁的最短时长,并设置 constraints/cloudkms.disableBeforeDestroy 组织政策以仅在停用密钥版本时将其删除。如需了解详情,请参阅控制密钥版本销毁

您可以使用 Identity and Access Management (IAM) 控制对 HSM 资源的访问权限。与自定义 HSM 解决方案相比,IAM 配置不太可能遇到配置错误和 bug 问题。

Cloud HSM 架构图。

严格的地理位置隔离设计

在 Cloud HSM 中,您可以选择在全球范围内提供密钥,也可以对需要限制的密钥强制执行严格的地理位置限制。

通常,HSM 会划分为分区,以便单个物理设备可以作为多个逻辑设备运行。如果需要分离 HSM 管理和密钥,您可以使用分区来降低部署费用。

每个 Cloud HSM 区域位置都与单独的封装密钥相关联。封装密钥会被克隆到该位置每个 HSM 的分区中,但绝不会将 HSM 保留在该位置。克隆可让同一区域中的 HSM 提供同一组客户密钥,并确保该区域外部的 HSM 无法提供这些密钥。

Cloud HSM 还会使用封装密钥创建多区域。多区域的所有客户密钥都使用位于所有多区域位置的分区上的封装密钥进行封装。该服务针对多区域使用相同的硬件,但在区域与不同区域间存在的多区域之间提供相同的强隔离。

Cloud HSM 地理位置图。

区域化方案要求封装密钥仅复制到适当的分区。每项配置更改都必须先获得 Cloud HSM 团队的多个成员的批准,然后才能生效。数据中心技术人员无法访问现场的 HSM 配置、运行时或存储空间。

集中管理

在托管 HSM 的传统数据中心内,HSM 及其资源的管理完全独立于其他加密资源。Cloud HSM 紧密集成到 Google Cloud 中,让您能够无缝管理 Cloud HSM 资源。例如,您可以管理以下各项:

  • 您可以在 Cloud KMS 中管理 HSM 支持的资源以及其他密钥,并在 Cloud External Key Manager (Cloud EKM) 中管理外部管理的密钥。
  • 您可以在 IAM 中管理对 HSM 支持的资源的访问权限。
  • 使用 HSM 支持的键的加密操作费用在 Cloud Billing 中报告。
  • 在支持使用 CMEK 加密资源的所有 Google Cloud 服务中,您可以透明地使用 HSM 支持的密钥。 CMEK 集成要求 CMEK 及其加密的数据位于兼容的地理位置。由于 Cloud HSM 密钥的严格地理位置限制,CMEK 数据的所有加密和解密也受到地理位置限制。
  • 针对 HSM 支持的资源的管理操作始终记录在 Cloud Audit Logs 的 API 层中。您还可以选择启用数据访问日志记录。如需了解详情,请参阅 Cloud KMS 审核日志记录信息
  • Google 直接与 HSM 制造商合作,在每个 HSM 上更新硬件和软件,并实时发现并解决问题。如果是 HSM 的零日漏洞,Google 可以选择性地在受影响的 HSM 集群上停用受影响的代码路径,直到漏洞被修复为止。

开发者和用户体验

由于 Google 负责 HSM 管理,因此 Cloud HSM 为开发者和最终用户提供了明显的好处。

Google 级 HSM

当您依赖本地或数据中心的硬件时,硬件可能会造成性能瓶颈或单点故障。Cloud HSM 设计为能够应对不可预测的工作负载和硬件故障。Cloud HSM 后端使用每个区域中的 HSM 池来确保高可用性和可伸缩性。此 HSM 池可让 Cloud HSM 还提供高吞吐量。如需了解详情,请参阅监控和调整 Cloud KMS 配额

所有客户密钥都会使用 Cloud KMS 数据库中的区域级封装密钥封装后进行存储,并且只能由加密操作中使用的区域中的 HSM 解封装。这种封装具有以下优势:

  • 键的耐用性与区域中的特定 HSM 或 HSM 子集无关。
  • 每个 Cloud HSM 客户都能体验到提供其密钥的 Cloud HSM 集群的完整规模和可用性。
  • Cloud HSM 可以处理大量能够存储在 HSM 中的密钥。
  • 添加或替换 HSM 既安全又快捷。

统一的 API 设计

Cloud HSM 和 Cloud KMS 共用一个管理和数据平面 API。与 HSM 通信的内部详细信息提取自调用方。

因此,您无需更改代码即可更新使用 Cloud KMS 中的软件密钥的现有应用,从而支持 HSM 支持的密钥。不过,您需要更新要使用的密钥的资源名称。

PKCS#11 支持

您可以使用 Cloud Key Management Service API 将现有应用连接到 Cloud HSM 来管理加密密钥。借助 PKCS#11 库,您可以使用 HSM 支持的密钥为二进制文件签名并提供 TLS Web 会话。

安全和法规合规性

Cloud HSM 符合众多法规,包括 FedRAMP 高风险级别C5:2020OSPAR。此外,Cloud HSM 可帮助您执行云端工作负载的监管要求。

加密键证明

每次生成或导入 Cloud HSM 键时,HSM 都会生成一条证明语句,该语句使用与分区关联的签名键签名。该语句包含关于键特性的信息。签名键由根植于 Google 和 HSM 制造商的证书链提供支持。您可以下载证明语句和证书来验证语句的真实性,并验证键以及生成或导入键的 HSM 的属性。

通过证书链,您可以检查以下内容:

  • HSM 硬件和固件是正品。
  • HSM 分区和 HSM 由 Google 管理。
  • HSM 处于 FIPS 操作模式。

通过证明语句的内容,您可以检查以下内容:

  • 键无法提取。
  • 键是为您的 CryptoKeyVersion 生成的。
  • 非对称键对中的公键对应于 HSM 支持的私键。
  • 导入的对称键的材料与您封装的值匹配。

直接将键安全导入 HSM

您可以安全地将现有键导入到 Cloud HSM 中,以保留 Google Cloud 外部的键材料备份,或简化将某些工作负载迁移到 Google Cloud 的操作。键导入过程不允许 Google 直接访问未封装的键材料。Cloud HSM 为您提供 HSM 生成的封装键的证明语句,以验证是否未发生任何访问。

由于密钥导入允许用户使用来自未知来源的密钥,从而可能导致安全性和合规性风险,因此单独的 IAM 角色可以精细地控制谁可以将密钥导入项目中。导入的密钥可以通过 HSM 在导入时生成的证明语句来区分。

如需了解详情,请参阅将键导入 Cloud Key Management Service

严格的安全程序保护 HSM 硬件

根据 FIPS 140-2 3 级的要求,HSM 设备具有内置机制来帮助防范物理篡改并提供物理篡改的证据。

除了 HSM 硬件本身提供的保证之外,系统还会根据 Google 基础架构安全设计概览来管理 Cloud HSM 的基础架构。

已记录的可审核流程在预配、部署和生产期间保护每个 HSM 的完整性:

  • 所有 HSM 配置都必须经过多个 Cloud HSM SRE 验证,然后才能将 HSM 部署到数据中心。
  • HSM 部署到服务中后,配置更改只能由多个 Cloud HSM SRE 启动和验证。
  • HSM 只能接收由 HSM 制造商签名的固件。
  • HSM 硬件不会直接公开给任何网络。
  • 托管 HSM 硬件的服务器将无法运行未经授权的进程。

系统运维人员的职责在标准操作程序中定义。系统运维人员在履行职责时无法访问、使用或提取客户密钥材料。

服务和租户隔离

Cloud HSM 架构可确保 HSM 免受其他服务或租户的恶意干扰或无意中产生的干扰。

此架构中的 HSM 仅接受来自 Cloud HSM 的请求,Cloud HSM 服务仅接受来自 Cloud KMS 的请求。Cloud KMS 强制要求调用方对其尝试使用的密钥拥有适当的 IAM 权限。未经授权的请求不会到达 HSM。

由 HSM 支持的密钥也受加密操作的配额限制。这些配额有助于防止无意中或恶意试图使服务过载,从而保护您运行工作负载的能力。非对称加密操作的默认配额为 3000 次 QPM,对称加密操作的默认配额为 30000 QPM。配额远远低于服务容量,可以应要求增加。

请求流程

本部分通过介绍不同类型的请求的步骤,演示了上述架构突出显示在实践中的应用方式。这些流程突出 Cloud HSM 部分。如需详细了解所有密钥通用的步骤,请参阅 Cloud Key Management Service 深度解释

创建密钥

创建 HSM 支持的密钥时,Cloud Key Management Service API 不会创建密钥材料,但会请求 HSM 创建密钥材料。

HSM 只能在其支持的位置创建密钥。HSM 上的每个分区都包含与 Cloud KMS 位置对应的封装密钥。封装密钥在支持 Cloud KMS 位置的所有分区之间共享。密钥创建过程如下所示:

  1. Google Front End Service (GFE) 将密钥创建请求路由到与该请求对应的位置的 Cloud KMS 服务器。
  2. Cloud Key Management Service API 验证调用方的身份、调用方在项目中创建密钥的权限,以及调用方是否有足够的写入请求配额。
  3. Cloud Key Management Service API 将请求转发给 Cloud HSM。
  4. Cloud HSM 直接与 HSM 连接。HSM:
    1. 创建键并使用特定于位置的封装键对其进行封装。
    2. 为密钥创建证明语句,并使用分区签名密钥对其进行签名。
  5. 在 Cloud HSM 将封装的密钥和证明返回给 Cloud KMS 后,Cloud Key Management Service API 根据 Cloud KMS 密钥层次结构封装 HSM 封装的密钥,然后将其写入项目中。

这种设计可确保密钥在 HSM 之外无法解封装或使用、无法从 HSM 中提取,并且仅在未封装的状态下存在于您指定的位置。

下图展示了在 Cloud KMS 中创建 Cloud HSM 密钥和软件密钥之间的差异。

HSM 密钥创建图。

加密操作

在 Cloud KMS 中执行加密操作时,您无需了解您使用的是 HSM 支持的密钥还是软件密钥。当 Cloud Key Management Service API 检测到操作涉及 HSM 支持的密钥时,会将请求转发到同一位置的 HSM。以下是加密操作的步骤:

  1. GFE 将请求路由到适当位置的 Cloud KMS 服务器。Cloud Key Management Service API 验证调用方的身份、调用方访问密钥并执行操作的权限,以及项目的加密操作配额。
  2. Cloud Key Management Service API 从数据存储区中检索封装的密钥,并使用 Cloud KMS 主密钥解密一级加密。该密钥仍使用 KMS 位置的 HSM 封装密钥进行封装。
  3. Cloud Key Management Service API 检测到保护级别为 HSM,并将部分未封装的密钥以及加密操作的输入发送到 Cloud HSM。
  4. Cloud HSM 直接与 HSM 连接。HSM 完成以下操作:
    1. 检查封装的键及其特性是否未被修改。
    2. 解封装密钥并将其加载到 HSM 存储空间中。
    3. 执行加密操作并返回结果。
  5. Cloud Key Management Service API 将结果传递回调用者。

使用 HSM 支持的键进行的加密操作完全在配置位置的 HSM 内执行,调用者只能看到结果。

下图展示了在 Cloud KMS 中创建 Cloud HSM 密钥和软件密钥之间的差异。

HSM 加密操作图。

CMEK 集成

借助 CMEK 和 Cloud HSM,您可以使用 HSM 密钥保护所选 Google Cloud 服务中的数据。配置启用了 CMEK 的服务以使用 Cloud HSM 密钥很简单,只需在遵循服务特定说明时选择具有 HSM 保护级别的密钥即可。

当调用方在启用了 CMEK 的服务中读取数据或写入数据时,调用方不需要拥有使用密钥的直接权限,并且调用方不需要知道密钥是否存储在 HSM 中。

CMEK 操作的流程与普通加密操作的流程非常相似,但以下几点除外:

  • 来自启用了 CMEK 的服务的请求在 Google 的网络中发起,无需遍历 GFE。
  • Cloud Key Management Service API 会验证启用了 CMEK 的服务的服务账号是否拥有使用密钥的适当权限。Cloud Key Management Service API 不会验证启用了 CMEK 的服务的最终用户权限。

Cloud HSM 是 Google Cloud 的硬件键管理服务。它可为希望使用 HSM 密钥保护其静态数据的用户带来诸多明显的优势。该服务的设计遵循了锁定 HSM 的 API 访问权限、轻松扩缩以及密钥的严格区域化等原则。

Cloud HSM 为每个 Google Cloud 区域(包括多区域和全球)中最重要的服务和 Cloud HSM 的运行提供 CMEK 支持。该服务旨在让您使用 FIPS 140-2 3 级设备保护的密钥轻松保护敏感数据(无论在什么地方)。

后续步骤

如需了解详情,请浏览以下资源: