客户管理的加密密钥

转到示例

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

概览

如果您需要更好地控制 Google 管理的加密密钥所允许的密钥操作,可以使用客户管理的加密密钥。这些密钥是使用 Cloud Key Management Service 创建和管理的,并且您需要将密钥作为软件密钥存储在 HSM 集群中或存储在外部。您可以在单个对象上使用客户管理的加密密钥,或将存储桶配置为在添加到存储桶的所有新对象上默认使用密钥

何时使用密钥?

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

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

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

服务代理

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

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

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

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

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

限制

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

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

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

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

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

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

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

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

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

密钥管理

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

密钥轮替

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

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

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

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

密钥替换

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

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

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

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

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

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

停用或销毁密钥版本

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

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

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

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

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

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

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

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

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

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

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

后续步骤