CMEK 简介

本页面介绍适用于 AlloyDB for PostgreSQL 的客户管理的加密密钥 (CMEK)。

如需大致了解 CMEK(包括此功能适用的场景及其相关优势),请参阅 Cloud KMS 文档

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

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

使用 CMEK 设置资源后,访问 AlloyDB 资源的体验与使用 Google 默认加密方式类似。如需详细了解加密选项,请参阅客户管理的加密密钥 (CMEK)

如需了解如何使用手动创建的 CMEK 来保护 AlloyDB 资源,请参阅使用 CMEK

将 CMEK 与 Cloud KMS Autokey 结合使用

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

只有在使用 Terraform 或 REST API 创建资源时,AlloyDB 才与 Cloud KMS Autokey 兼容。

一种自行管理的加密方式,可作为 Google 管理的加密方式的替代方案

默认情况下, Google Cloud中的所有静态数据(包括 AlloyDB 中的数据)均使用 Google 管理的默认加密方式进行保护。 Google Cloud会为您处理和管理此默认加密,您无需进行任何其他操作。

如果您对保护数据的密钥有特定的合规性或监管要求,则可以改用 CMEK。借助 CMEK,您的 AlloyDB 集群会使用由您在 Cloud Key Management Service (KMS) 中控制和管理的密钥来进行保护。CMEK 密钥可以是对称密钥,也可以是 Cloud HSM 密钥

特性

  • 数据访问权限控制:管理员可以轮替用于保护 AlloyDB 中的静态数据的密钥、管理对该密钥的访问权限以及停用或销毁该密钥。

    密钥管理由 Cloud KMS 处理。密钥轮替后,集群不会自动使用较新的密钥版本重新加密自身。集群在创建时会使用 CMEK 的主要版本进行加密。如要轮替集群加密,可以创建备份并使用较新的密钥版本恢复集群。如需了解详情,请参阅数据备份和恢复概览

  • 可审核性:如果您为项目中的 Cloud KMS API 启用了审核日志记录,则针对密钥的所有操作(包括由 AlloyDB 执行的操作)都会在 Cloud Logging 中记录并可供查看。

  • 性能:使用 CMEK 不会改变 AlloyDB 的性能。

价格

AlloyDB 对启用了 CMEK 的集群的计费方式与任何其他集群相同;不会产生额外的 AlloyDB 费用。如需了解详情,请参阅 AlloyDB for PostgreSQL 价格

当 AlloyDB 使用相应密钥时,Cloud KMS 会向您收取该密钥的费用以及加密和解密操作的费用。如需了解详情,请参阅 Cloud Key Management Service 价格

受 CMEK 保护的内容

AlloyDB 会通过以下方式使用您的 Cloud KMS 密钥来保护静态数据:

  • 如果您在集群上启用了 CMEK,AlloyDB 会使用您的密钥对集群中存储的所有数据进行加密。
  • 如果您在创建按需备份时指定了 CMEK 配置,AlloyDB 会使用您的密钥来加密该备份。
  • 如果您在集群的持续或自动备份配置中启用了 CMEK,AlloyDB 会使用您的密钥对正在进行的备份进行加密。

无论您使用 Google-owned and Google-managed encryption keys 还是 CMEK,AlloyDB 都有三层加密:

  1. AlloyDB 会将静态数据分成区块进行存储,并使用单独的加密密钥对每个区块进行加密。用于对区块中的数据进行加密的密钥称为“数据加密密钥”(DEK)。

    由于 Google 的密钥很多,且需要提供低延迟、高可用性的服务,因此 AlloyDB 会将每个 DEK 存储在用其加密的数据附近。

  2. AlloyDB 会使用集群持有的密钥加密密钥 (KEK) 加密每个 DEK。

  3. 最后,AlloyDB 会使用集群的基于 Cloud Key Management Service 的加密密钥( Google-owned and Google-managed encryption key或 CMEK 密钥)对 KEK 进行加密。

您还可以查看用于保护集群的密钥的版本

启用 CMEK

如需允许 AlloyDB 集群使用 CMEK,您必须在创建集群时指定 Cloud KMS 密钥。

Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter) 角色授予给 AlloyDB 服务代理后,AlloyDB 将能够代表您访问相应密钥。

如需查看详细说明,请参阅使用 CMEK

管理密钥

您可使用 Cloud KMS 执行所有密钥管理操作。在 Cloud KMS 传播任何密钥更改之前,AlloyDB 无法检测或处理任何密钥更改。某些操作(例如停用或销毁密钥)最多可能需要 3 小时才能传播;对权限的更改传播通常快很多。

创建集群后,AlloyDB 大约每 5 分钟调用一次 Cloud KMS,以确保密钥仍有效。

如果 AlloyDB 检测到您的 Cloud KMS 密钥已停用或销毁,则会立即启动使您的集群数据无法访问的操作。如果 AlloyDB 对 Cloud KMS 的调用检测到之前已停用的密钥已重新启用,则会自动恢复相应访问权限。

使用和管理外部密钥

除了使用 Cloud KMS 中的密钥之外,您还可以使用受支持的外部密钥管理合作伙伴提供的密钥。为此,您需要使用 Cloud External Key Manager (Cloud EKM) 创建和管理外部密钥,它们是作为指向 Google Cloud外部密钥的指针形式而存在的。如需了解详情,请参阅 Cloud External Key Manager

使用 Cloud EKM 创建外部密钥后,您可以在创建集群时提供该密钥的 ID,以将该密钥应用于新的 AlloyDB 集群。此过程与将 Cloud KMS 密钥应用于新集群的过程相同。

您可以在 Cloud EKM 中使用 Key Access Justifications。您可以通过 Key Access Justifications 查看每个 Cloud EKM 请求的原因。此外,您还可以根据提供的理由,自动批准或拒绝请求。如需了解详情,请参阅概览

Google 无法控制外部密钥管理合作伙伴系统中密钥的可用性。

密钥不可用

如果您停用用于加密 AlloyDB 集群的 Cloud KMS 密钥,则属于该集群的 AlloyDB 实例将在 30 分钟内停机。重新启用相应密钥可使实例恢复运行。

在少数情况下,例如 Cloud KMS 不可用期间,AlloyDB 可能无法从 Cloud KMS 中检索密钥的状态。在这种情况下,AlloyDB 会在最多 30 分钟的时间内继续尽力支持完整的集群操作,以最大限度地减少任何临时中断对工作负载造成的影响。

30 分钟后,如果 AlloyDB 仍无法连接到 Cloud KMS,AlloyDB 会开始让相应集群离线作为保护措施。在 AlloyDB 集群能够重新连接到 Cloud KMS 并且 Cloud KMS 响应表明该密钥处于有效状态之前,AlloyDB 集群中的数据都将保持无法访问状态。

备份和恢复

AlloyDB 还使用 CMEK 或默认的 Google 管理的加密来保护备份。如果备份启用了 CMEK,则在创建备份时会使用 KMS 密钥的主要版本对备份进行加密。创建备份后,即使 KMS 密钥已轮替,其密钥及密钥版本也无法修改。如需了解详情,请参阅备份集群

从备份恢复集群后,恢复的集群默认使用 Google 管理的加密,不过您可以指定改用 CMEK 密钥。如要恢复启用了 CMEK 的备份,用于加密备份的密钥及密钥版本都必须可用。

日志记录

如果您为项目中的 Cloud KMS API 启用了审核日志记录,则可以在 Cloud Logging 中审核 AlloyDB 代表您发送给 Cloud KMS 的请求。您可以在 Cloud Logging 中查看这些 Cloud KMS 日志条目。 如需了解详情,请参阅查看 Cloud KMS 密钥的审核日志

后续步骤