CMEK(客户管理的加密密钥)

本页面讨论了 CMEK。如需了解其他加密选项,请参阅数据加密选项。如需了解使用此功能的示例,请参阅使用 CMEK

概览

作为基于 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 时,存在以下限制:

  • Cloud SQL 到 Cloud StorageCloud Dataflow 的导出当前不支持使用 CMEK 加密的对象。

  • 如果源对象是使用 CMEK 进行加密的,或者将使用 CMEK 对目标对象进行加密,则您不能使用 JSON API Copy Object 方法。请改用 Rewrite Object 方法

  • 如果一个或多个源对象采用了 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 会使用客户提供的密钥来加密对象。

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