客户管理的加密密钥

转到示例

本页面讨论客户管理的加密密钥及其如何在 Cloud Storage 中使用它们。如需了解其他加密选项,请参阅数据加密选项

概览

作为基于 Google 管理的加密密钥的附加层,您可以选择使用由 Cloud Key Management Service 生成的密钥。此类密钥被称为 CMEK。如果使用 CMEK,加密密钥将存储在 Cloud KMS 中。然后,包含加密密钥的项目可以与包含存储分区的项目相互独立,从而更好地实现职责分离

何时使用密钥?

将 CMEK 应用于对象时,Cloud Storage 会在加密以下内容时使用该密钥:

  • 对象的数据。
  • 对象的 CRC32C 校验和。
  • 对象的 MD5 哈希值。

Cloud Storage 使用标准服务器端密钥加密对象的其余元数据,包括对象的名称。因此,如果您有足够的权限,即使停用或销毁关联的 CMEK 后,也可以执行诸如读取大部分元数据、列出对象和删除对象等操作。

服务帐号

使用 CMEK 进行加密和解密是通过服务帐号完成的。在您授权 Cloud Storage 服务帐号访问加密密钥之后,服务帐号将会加密以下对象:

在 Cloud Storage 中添加或重写对象时,如果您既在存储分区上设置了默认密钥,又在请求中包含了特定的密钥,Cloud Storage 会使用该特定密钥加密对象。

当请求者想要读取使用 CMEK 加密的对象时,他们只需照常访问该对象即可。在执行此类请求的过程中,服务帐号会自动解密请求者请求的对象,前提是满足以下条件:

  • 服务帐号仍有权使用密钥进行解密。
  • 您尚未停用或销毁密钥。

如果未满足其中任何一个条件,则服务帐号不会解密数据,请求将失败。

重要资源

Cloud KMS 密钥资源采用以下格式:

projects/[PROJECT_STORING_KEYS]/locations/[LOCATION]/keyRings/[KEY_RING_NAME]/cryptoKeys/[KEY_NAME]

其中:

  • [PROJECT_STORING_KEYS] 是与该密钥关联的项目的 ID。例如,my-pet-project
  • [LOCATION] 是密钥位置。例如,US-EAST1
  • [KEY_RING_NAME] 是密钥环的名称。例如,my-key-ring
  • [KEY_NAME] 是密钥的名称。例如 my-key

限制

使用 CMEK 时,存在以下限制:

  • 如果一个或多个源对象采用了 CMEK 加密,则不能使用 JSON API Compose Object 方法

  • 您无法通过更新对象的元数据来使用 CMEK 加密对象。作为替代,在对象的重写过程中将该密钥包含在内。

  • 您必须在要加密的数据所在的位置创建 Cloud KMS 密钥。例如,如果您的存储分区位于 US-EAST1,用于加密其中对象的任何 Cloud KMS 密钥也必须在 US-EAST1 中创建。如需了解可用的 Cloud KMS 位置,请参阅 Cloud KMS 位置

  • 您不能将 CMEK 指定为 Storage Transfer Service 转移的一部分,并且源对象上的任何此类密钥都不会应用于转移的对象。 在执行转移之前,请在存储分区上设置默认的客户管理的密钥

与客户提供的加密密钥之间的关系

除了客户管理的加密,Cloud Storage 还提供客户提供的加密密钥作为控制数据加密的手段。您可以使用不同的加密方法加密单个存储分区中的不同对象,但请注意以下事项:

  • 一次只能通过其中一种方法加密单个对象。

  • 如果为您的存储分区设置了默认的客户管理的密钥,而您在请求中指定了客户提供的密钥,则 Cloud Storage 会使用客户提供的密钥来加密对象。

  • 您可以在存储分区上设置默认的客户管理的密钥,但不能在存储分区上设置默认的客户提供的密钥。

密钥管理:轮替、停用或销毁密钥版本

使用 Cloud Key Management Service 进行轮替

Cloud KMS 支持自动和手动密钥轮替。轮替密钥后,新版本将成为 Cloud Storage 中所有通过该密钥进行加密的操作所使用的主要版本,例如:

  • 上传到使用该密钥作为默认加密密钥的存储分区的对象,现在会使用新密钥版本进行加密。

  • 现在,专门引用该密钥的对象上传、复制、重写操作会使用新的密钥版本。

以前的密钥版本不会被停用或销毁,因此使用这些版本进行加密的现有对象仍可通过 Cloud Storage 进行解密。

停用或销毁密钥版本

停用销毁特定密钥版本的操作会对 Cloud Storage 存储分区和对象产生以下影响:

如果版本是主要,而且未设置新的主要版本,或者所有密钥版本都已停用或销毁:

  • 将对象上传到使用该密钥作为默认密钥的存储分区会导致失败
  • 引用该密钥的对象上传、复制或重写操作会导致失败
  • 下载使用受影响密钥版本进行加密的对象会导致失败

如果版本不是主要版本,或者已设置新的主要版本:

  • 下载使用受影响密钥版本进行加密的对象会导致失败
  • 将对象上传到使用该密钥作为默认密钥的存储分区后,将使用主密钥版本继续正常运行。
  • 引用该密钥的对象上传、复制或重写操作将使用主密钥版本继续正常运行。

如果您重新启用密钥版本,则可再次下载使用该版本进行加密的对象。

如果密钥版本已永久销毁,则无法再次下载使用该版本进行加密的对象。

使用新密钥替换旧密钥

如果您要停止对 Cloud Storage 使用现有密钥(所有密钥版本),并将现有密钥替换为新密钥,我们建议您按以下步骤执行操作:

  • 识别所有使用旧密钥作为默认密钥的存储分区,并将存储分区更新为使用新密钥。这将确保所有新对象都可以继续上传到这些使用新密钥的存储分区。

  • 识别所有存储分区中所有使用旧密钥进行加密的对象。使用 [重写对象方法][12] 通过新密钥重新加密每个对象。这将确保在旧密钥停用或销毁后所有现有对象都仍可供访问。

  • 在永久销毁旧密钥之前,请考虑先将其停用。监控客户端和服务日志,以检查是否有任何操作由于旧密钥不可用而失败。

了解如何将密钥用于存储在 Cloud Storage 中的数据

在您执行密钥管理操作(如停用或销毁密钥版本)之前,我们强烈建议您充分了解受影响的密钥如何与存储分区和对象一起使用。请注意以下几点:

  • 存储分区可以使用密钥作为默认密钥。使用控制台或以编程方式识别所有引用了该密钥名称的存储分区。

    [LOCATION]/[KEY_RING_NAME]/[KEY_NAME]

  • 使用特定密钥版本加密对象。使用控制台或以编程方式识别所有引用了特定密钥版本的对象。

    [LOCATION]/[KEY_RING_NAME]/[KEY_NAME]/[KEY_VERSION]
  • 检查您的源代码和配置,以了解对于 Cloud Storage 中正在进行的操作(包括存储分区配置以及对象上传、复制和重写)而言,它所引用的键。

后续步骤