客户提供的加密密钥

此内容的上次更新时间为 2025 年 2 月,反映了当时的实际情况。由于我们会不断改善对客户的保护机制,Google 的安全政策和系统今后可能会发生变化

客户提供的加密密钥 (CSEK) 是 Cloud StorageCompute Engine 中的一项功能。如果您提供自己的加密密钥,Google 会使用您的密钥来保护 Google 生成的用于加密和解密数据的密钥。

本文档介绍了 CSEK 的运作方式以及如何在Google Cloud中保护 CSEK。

CSEK 如何与 Cloud Storage 搭配使用

在 Cloud Storage 中使用 CSEK 时,以下密钥是封装流程的一部分:

  • 原始 CSEK:您提供原始 CSEK 作为 API 调用的一部分。原始 CSEK 密钥从 Google Front End (GFE) 传输到存储系统的内存。此密钥是 Cloud Storage 中用于您的数据的密钥加密密钥 (KEK)。
  • 封装的区块密钥:原始 CSEK 用于封装已封装的区块密钥。
  • 原始区块密钥:已封装的区块密钥封装内存中的原始区块密钥。 原始区块密钥用于加密存储在存储系统中的数据块。这些密钥在 Cloud Storage 中用作您的数据的数据加密密钥 (DEK)。

下图显示了密钥封装流程。

Cloud Storage CSEK。

下表介绍了这些密钥。

存储位置 用途 可访问截止时间

原始 CSEK

存储系统内存

保护已封装的区块密钥。

客户请求的操作(例如 insertObjectgetObject)已完成。

封装的区块密钥

存储设备

保护静态存储的原始区块密钥

存储对象被删除。

原始区块密钥

存储设备的内存

保护您读取或写入磁盘的数据。

客户请求的操作已完成

CSEK 如何与 Compute Engine 搭配使用

在 Compute Engine 中使用 CSEK 时,以下密钥是封装流程的一部分:

  • 原始 CSEK:您在 API 调用中提供原始 CSEK 或 RSA 封装密钥。CSEK 从 GFE 传输到内部集群管理器的前端。集群管理器是在 Google 生产基础架构中以集群管理器身份运行的一组流程,用于实现管理 Compute Engine 资源(例如磁盘和虚拟机实例)的逻辑。
  • Google 拥有的非对称封装密钥:如果提供 RSA 封装密钥作为 CSEK,则使用 Google 拥有的非对称封装密钥解封该密钥。
  • CSEK 派生密钥:原始 CSEK 将与每个永久性磁盘的加密随机数组合,以生成 CSEK 派生密钥。此密钥在 Compute Engine 中用作您的数据的 KEK。在集群管理器前端,CSEK 和 CSEK 派生密钥均仅保留在集群管理器内存中。当启用自动重启时,CSEK 派生密钥在集群管理器内存中用于解封存储在集群管理器实例元数据和实例管理器元数据中的封装磁盘密钥,其中启用了自动重启(此元数据与实例元数据不同)。

  • 原始磁盘密钥:CSEK 派生密钥用于在创建磁盘时封装原始磁盘密钥,以及在访问磁盘时解封原始磁盘密钥。发生以下事件:

    • 如果启用了自动重启,则集群管理器会在虚拟机有效期之内永久存储封装磁盘密钥,以便在发生崩溃时可以重启虚拟机。该封装磁盘密钥使用 Google 拥有的对称封装密钥进行封装。封装密钥的权限仅允许 Compute Engine 对其进行使用。如果自动重启处于关闭状态,系统会使用在Google Cloud上删除数据中所述的删除流程来删除封装的磁盘密钥。
    • 如果启用了实时迁移,则原始磁盘密钥将从旧虚拟机实例内存传递到新虚拟机实例内存,这一密钥拷贝过程不涉及实例管理器或集群管理器。

原始磁盘密钥将传递到集群管理器 (CM)、实例管理器和虚拟机的内存。这些密钥在 Compute Engine 中用作您的数据的 DEK。

下图展示了密钥封装的工作原理。

Compute Engine CSEK。

持有者 用途 可访问截止时间

原始 CSEK

集群管理器前端

通过添加加密随机数来派生 CSEK 派生密钥。

客户请求的操作(例如 instances.insert, instances.attachDisk)已完成。

公钥封装 CSEK

(如果使用 RSA 密钥封装

集群管理器前端

通过首先使用 Google 拥有的非对称密钥解封来派生 CSEK 派生密钥。

客户请求的操作完成。

Google 拥有的非对称密钥

(使用 RSA 密钥封装时)

密钥库

解封 RSA 封装密钥。

无限期。

CSEK 派生密钥

集群管理器前端

封装磁盘密钥。

密钥封装或解封操作完成。

Google 封装的磁盘密钥

(使用自动重启时)

集群管理器前端

保护静态存储的磁盘密钥,用于挂接到运行实例的磁盘。

在虚拟机内存丢失的情况(例如主机崩溃)下重启实例

虚拟机已停止或删除。

原始磁盘密钥

虚拟机监视器 (VMM) 内存、集群管理器 (CM) 内存

读取或写入磁盘数据,实时迁移虚拟机以及执行就地升级

虚拟机被停止或删除

Google 封装的 CSEK 派生密钥

集群管理器数据库

发生故障时重启操作

客户请求的操作已完成

如何保护 CSEK

本部分介绍了 CSEK 在磁盘上、在 Google Cloud 基础架构中移动过程中以及在内存中如何受到保护。

原始 CSEK、CSEK 派生密钥和原始磁盘密钥永远不会存储在未加密的磁盘上。原始磁盘密钥使用 CSEK 派生密钥封装后进行存储,使用自动重启时则与 Google 密钥一起存储。Google 不会在其服务器上永久存储您的密钥。

每项服务都使用基础架构提供的访问权限管理功能,来精确指定该服务可以与其他哪些服务进行通信。该服务配置了允许的服务账号身份的许可清单,然后由 Google Cloud基础设施自动强制执行此访问限制。如需了解详情,请参阅服务身份、完整性和隔离

基础架构还会通过加密处理确保网络上 RPC 数据的隐私性和完整性。服务可以为每个基础架构 RPC 配置所需级别的加密保护,并为 CSEK 启用这些保护。如需了解详情,请参阅工作负载间通信的加密

密钥材料存在于各种系统的内存中,包括集群管理器内存和 VMM 内存。对这些系统的内存的访问属于例外情况(例如在某个突发事件期间),由访问控制列表来管理。这些系统要么停用了内存转储,要么会自动扫描内存转储中的密钥材料。如需了解针对这些作业的保护措施,请参阅 Google 如何保护其生产服务

后续步骤