本页内容的上次更新时间为 2025 年 2 月,代表截至本文撰写之时的状况。由于我们会不断改善对客户的保护机制,Google 的安全政策和系统今后可能会发生变化。
客户提供的加密密钥 (CSEK) 是 Cloud Storage 和 Compute Engine 中的一项功能。如果您提供自己的加密密钥,Google 会使用您的密钥来保护 Google 生成的用于加密和解密数据的密钥。
本文档介绍了 CSEK 的运作方式以及在Google Cloud中的保护方式。
CSEK 如何与 Cloud Storage 搭配使用
在 Cloud Storage 中使用 CSEK 时,以下密钥会参与封装过程:
- 原始 CSEK:您在调用 API 时要提供原始 CSEK。原始 CSEK 密钥会从 Google 前端 (GFE) 传输到存储系统的内存。此密钥是 Cloud Storage 中用于加密您的数据的密钥加密密钥 (KEK)。
- 封装的区块密钥:原始 CSEK 用于封装封装的区块密钥。
- 原始区块密钥:封装的区块密钥会封装内存中的原始区块密钥。原始区块密钥用于加密存储在存储系统中的数据块。此类密钥在 Cloud Storage 中用作您的数据的 DEK。
下图显示了密钥封装过程。
下表介绍了这些键。
键 | 存储位置 | 用途 | 可访问截止时间 |
---|---|---|---|
原始 CSEK |
存储系统内存 |
保护封装的区块密钥。 |
客户请求的操作(例如 |
封装的区块密钥 |
存储设备 |
保护静态存储的原始分块密钥。 |
存储对象被删除。 |
原始区块密钥 |
存储设备的内存 |
保护您读取或写入磁盘的数据。 |
客户请求的操作完成 |
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。
下图展示了密钥封装的工作原理。
键 | 持有者 | 用途 | 可访问截止时间 |
---|---|---|---|
原始 CSEK |
集群管理器前端 |
通过添加加密随机数来派生 CSEK 派生密钥。 |
客户请求的操作(例如 |
公钥封装 CSEK (如果使用 RSA 密钥封装) |
集群管理器前端 |
通过首先使用 Google 拥有的非对称密钥解封来派生 CSEK 派生密钥。 |
客户请求的操作已完成。 |
Google 拥有的非对称密钥 (使用 RSA 密钥封装) |
密钥库 |
解封 RSA 封装的密钥。 |
无限期。 |
CSEK 派生密钥 |
集群管理器前端 |
封装磁盘密钥。 |
密钥封装或解封操作已完成。 |
Google 封装的磁盘密钥 (使用自动重启时) |
集群管理器前端 |
保护静态存储的磁盘密钥,用于挂接到运行实例的磁盘。 在虚拟机内存丢失的情况(例如主机崩溃)下重启实例 |
虚拟机被停止或删除。 |
原始磁盘密钥 |
虚拟机监视器 (VMM) 内存、集群管理器内存 |
读取或写入磁盘数据,实时迁移虚拟机以及执行就地升级 |
虚拟机被停止或删除 |
Google 封装的 CSEK 派生密钥 |
集群管理器数据库 |
发生故障时重启操作 |
客户请求的操作完成 |
CSEK 的保护方式
本部分介绍了 CSEK 在磁盘上、在 Google Cloud 基础架构中移动过程中以及在内存中如何得到保护。
原始 CSEK、CSEK 派生密钥和原始磁盘密钥永远不会存储在未加密的磁盘上。原始磁盘密钥使用 CSEK 派生密钥封装后进行存储,如果启用了自动重启,则使用 Google 密钥封装后进行存储。Google 不会在其服务器上永久存储您的密钥。
每项服务都使用基础架构提供的访问权限管理功能,来精确指定该服务可以与其他哪些服务进行通信。在这种情况下,可以使用列有允许的服务账号身份标识的许可名单配置服务,然后由基础架构自动执行这一访问权限限制。 Google Cloud如需了解详情,请参阅服务身份标识、完整性和隔离。
基础架构还会通过加密处理确保网络上 RPC 数据的隐私性和完整性。服务可以为每个基础架构 RPC 配置所需级别的加密保护,并为 CSEK 启用这些保护。如需了解详情,请参阅工作负载间通信加密。
密钥材料存在于各种系统的内存中,包括集群管理器内存和 VMM 内存。对这些系统的内存的访问属于特殊情况(例如在某个突发事件期间),由访问控制列表来管理。这些系统停用了内存转储,或者会自动扫描内存转储中的密钥材料。如需了解针对这些作业的保护措施,请参阅 Google 如何保护其生产服务。