客户管理的加密密钥

设置

默认情况下,Cloud Storage 会对以静态方式存储的客户内容进行加密。Cloud Storage 会为您处理加密,您无需进行任何其他操作。此选项称为 Google 默认加密

如果您想要控制加密密钥,则可以将 Cloud KMS 中客户管理的加密密钥 (CMEK) 与集成 CMEK 的服务(包括 Cloud Storage)结合使用。使用 Cloud KMS 密钥时,您可以控制其保护级别、位置、轮替时间表、使用和访问权限以及加密边界。此外,您还可使用 Cloud KMS 跟踪密钥使用情况、查看审核日志并控制密钥生命周期。这样您就可以在 Cloud KMS 中控制和管理用于保护您数据的对称密钥加密密钥 (KEK),而不是由 Google 拥有和管理这些密钥。

使用 CMEK 设置资源后,访问 Cloud Storage 资源的体验与使用 Google 默认加密功能类似。如需详细了解 CMEK,请参阅客户管理的加密密钥 (CMEK)。如需了解如何使用手动创建的 CMEK 来保护 Cloud Storage 资源,请参阅使用客户管理的加密密钥

如需详细了解使用 Cloud Storage 时的其他加密选项,请参阅数据加密选项

将 CMEK 与 Cloud KMS Autokey 结合使用

您可以手动创建 CMEK 来保护 Cloud Storage 存储桶及其中的对象,也可以使用 Cloud KMS Autokey。借助 Autokey,在 Cloud Storage 中创建或更新资源时,系统会按需生成密钥环和密钥。系统会创建使用密钥执行加密和解密操作的服务代理(如果它们尚不存在),并授予所需的 Identity and Access Management (IAM) 角色。如需了解详情,请参阅 Autokey 概览

Autokey 不会为对象创建密钥。默认情况下,存储桶中的对象会使用存储桶默认密钥。如果您想使用存储桶默认密钥以外的密钥来加密对象,可以手动创建 CMEK,并在创建对象时使用该密钥。

如需了解如何使用 Cloud KMS Autokey 创建的 CMEK 来保护 Cloud Storage 存储桶及其中的对象,请参阅将 Autokey 与 Cloud Storage 资源结合使用

何时使用密钥?

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

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

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

服务代理

每个项目都有一个特殊的 Cloud Storage 服务账号,称为“服务代理”,该账号使用 CMEK 执行加密和解密。在您授权服务代理访问加密密钥之后,该服务代理会加密以下对象:

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

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

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

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

限制

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

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

    • gcloud storage 使用 objects update 命令在对象上设置加密密钥,但该命令会在请求中重写对象。
  • 您必须在要加密的数据所在的位置创建 Cloud KMS 密钥环。例如,如果您的存储桶位于 US-EAST1,用于加密其中对象的任何密钥环也必须在 US-EAST1 中创建。

    • 对于双区域,Cloud KMS 密钥环位置必须与双区域的位置代码一致。 例如,如果您的存储桶位于可配置的双区域对 US-EAST1US-WEST1 中,则用于加密其中对象的任何密钥环必须在与此存储桶位置代码匹配的 US 多区域中创建。如果您的存储桶位于预定义的双区域 NAM4 中,则您必须在同一预定义的双区域 NAM4 中创建密钥环。

      如需了解可用的 Cloud KMS 位置,请参阅 Cloud KMS 位置

  • Cloud KMS 加密和解密费率受配额限制。

  • 使用 JSON API 列出对象时,系统不会返回使用 CMEK 加密的对象的 CRC32C 校验和和 MD5 哈希。

    • 在适当的情况下,某些工具(例如 gcloud storage)会对使用 CMEK 加密的每个对象执行额外的元数据 GET 请求,以检索 CRC32C 和 MD5 信息。与列出使用标准 Cloud Storage 加密方法加密的对象相比,这些额外的请求可能会大大降低列出的速度。
  • 只有对称加密密钥可以用作 CMEK。

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

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

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

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

密钥管理

本部分讨论在轮替密钥、替换密钥以及停用或销毁密钥版本时的注意事项。

密钥轮替

Cloud KMS 支持自动和手动将密钥轮替到新的版本。轮替密钥后,Cloud Storage 会对使用该密钥进行加密的所有操作使用新版本,这些操作的示例如下:

  • 目标存储桶使用该密钥作为其默认加密密钥时的对象上传操作。

  • 在操作中明确使用该密钥的对象上传、复制和重写操作。

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

密钥替换

在将加密 Cloud Storage 对象所用的密钥替换为新密钥时,请遵循以下准则:

  1. 检查您的存储桶,以查看哪些存储桶使用该密钥作为其默认加密密钥。对于这些存储桶,请将旧密钥替换为新密钥。

    这样可以确保写入相应存储桶的所有对象以后都使用新密钥。

  2. 检查源代码,了解哪些请求在正进行的操作(例如设置存储桶配置以及上传、复制或重写对象)中使用该密钥。请更新这些实例以使用新密钥。

  3. 在所有存储桶中检查使用旧密钥加密的对象。通过 Rewrite Object 方法,使用新密钥重新加密每个对象。

  4. 停用旧密钥的所有版本。停用旧密钥版本后,请监控客户端和服务日志,以发现因版本不可用而失败的操作。

停用或销毁密钥版本

  • 停用销毁特定密钥版本后,您无法对当前使用该密钥版本加密的任何对象进行解密。

    例如,您无法下载、复制或重写对象;如果您尝试执行此类操作,则会导致错误。

    • 如果您停用了密钥版本,则可以重新启用它。重新启用后,您可以访问由该密钥版本加密的对象。

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

    在停用或销毁密钥版本之前,您应该识别所有存储桶中使用该特定密钥版本进行加密的所有对象。识别后,请通过 Rewrite Object 方法,使用新的密钥版本、全新的密钥或服务器端密钥重新加密每个对象。

  • 停用或销毁密钥的主要版本后,您在拥有新的主要版本之前无法使用该密钥进行加密。例如,如果没有主要版本,则会出现以下情况:

    • 您无法在对象上传、复制或重写过程中指定该密钥。

    • 您无法将对象上传、复制或重写到将该密钥设置为默认加密密钥的存储桶,除非您在操作过程中指定了其他有效的密钥。

    一旦您拥有密钥的主要版本,使用该密钥加密对象的操作就会成功。

    在停用或销毁作为密钥主要版本的密钥版本之前,您应首先停止将其用作主要版本。您可以通过以下方式之一执行此操作:

    • 将其替换为新的主要版本(通常是通过执行密钥轮替来实现)。
    • 移除您在其中使用该密钥进行加密的实例。执行此操作后,Cloud Storage 会改用服务器端密钥来进行加密。

密钥版本和锁定的对象

如果密钥版本加密锁定的对象,则由于该对象存储在具有锁定保留政策的存储桶中,或者由于该对象具有自己的锁定保留配置,因此只有在满足以下条件时才能销毁密钥版本:

  • 加密对象的保留到期时间必须是过去的时间。
  • 加密对象上不得设置任何对象保全

所有相关对象都满足了这些条件后,就可以销毁密钥版本,即使不删除对象也是如此。如果您这样做,受影响的对象数据将永久无法访问。

后续步骤