简介
对 Google 规模的数据进行存储和加密需要使用具有多层密钥的中央加密密钥管理服务来加密数据。多层密钥的一个示例是信封加密,它是使用另一个密钥为密钥加密的过程。
您可以在负责向用户显示数据的应用层和提供数据物理存储的存储层加密数据。
默认情况下,在存储层,Google Cloud 使用信封加密来加密静态存储的客户内容,并将 Google 的内部密钥管理服务作为中央密钥库。如果您自己存储和加密数据,则可以将 Cloud Key Management Service 用作应用层的中心密钥库,这是本主题的重点。
Cloud KMS 将密钥存储在一个便捷的密钥层次结构中,可以访问由 Identity and Access Management 管理的密钥层次结构中的资源。下面显示了 Cloud KMS 密钥层次结构的主要层:
查看对象层次结构,详细了解密钥层次结构。
数据加密密钥
用于加密数据密钥本身称为数据加密密钥 (DEK)。
以下是管理 DEK 的最佳做法:
- 在本地生成 DEK。
- 存储时,始终确保 DEK 进行静态加密。
- 为便于访问,请将 DEK 存储在用其进行加密的数据附近。
- 每次写入数据时均生成一个新的 DEK。这意味着您无需轮替 DEK。
- 请勿使用相同的 DEK 来加密来自两个不同用户的数据。
- 在伽罗瓦计数器模式 (GCM) 中使用强大的算法(如 256 位高级加密标准 (AES))。
密钥加密密钥
DEK 使用“密钥加密密钥”(KEK) 进行加密(也称为“封装”)。 用另一个密钥对密钥进行加密的过程称为“信封加密”。
以下是管理 DEK 的最佳做法:
集中存储 KEK。
根据用例加密设置 KEK 加密的 DEK 的粒度。例如,考虑需要多个 DEK 来加密其数据区块的工作负载。您可以使用单个 KEK 来封装负责该工作负载加密的所有 DEK。
定期或可疑事件发生后轮替密钥。如需了解详情,请参阅密钥轮替。
平衡 DEK 和 KEK
通过让 KEK 的数量少于 DEK 并且使用集中式密钥管理服务,我们得以让大规模的数据存储和加密工作变得更加切实可行。中央密钥服务还可以作为一个点,用于更轻松地审核和限制数据访问。
根据您的情况和要加密的数据量,您可以选择使用类似的模型。单个 KEK 可用于保护许多 DEK;该模型允许各个数据对象各自拥有自己的 DEK,而不会大量增加存储在中央密钥管理服务中的密钥量。
Cloud Key Management Service 旨在管理 KEK,因此 Encrypt
和 Decrypt
功能的最大数据输入大小为 64 KiB。但是,对于您知道不会接近该限制的数据,您可以使用 Cloud KMS 直接加密和解密数据。
如何使用信封加密对数据进行加密
加密数据的过程中将在本地生成 DEK,使用该 DEK 对数据进行加密,并使用 KEK 封装该 DEK,然后存储加密后的数据和封装后的 DEK。 KEK 始终不会离开 Cloud KMS。
要使用信封加密对数据进行加密,请执行以下操作:
在本地生成 DEK。您可以使用 OpenSSL 等开源库执行此操作,指定用于生成密钥的密钥类型和密码。如果需要,您还可以指定要使用的盐和摘要。
在本地使用此 DEK 对您的数据进行加密。
例如,您可以使用 OpenSSL,如加密消息示例中所示。按照最佳实践,请使用 256 位高级加密标准 (AES-256) 密钥(采用伽罗瓦计数器模式 (GCM))。
在 Cloud KMS 中生成新密钥,或使用现有密钥,以充当 KEK。使用此密钥对 DEK 进行加密(封装)。
存储加密后的数据和封装后的 DEK。
如何使用信封加密对数据进行解密
解密数据的过程中将检索加密后的数据和封装后的 DEK,识别封装了 DEK 的 KEK,并使用该 KEK 对相应 DEK 进行解封装,然后使用解封装后的 DEK 对数据进行解密。KEK 始终不会离开 Cloud KMS。
要使用信封加密对数据解密,请执行以下操作:
检索加密后的数据和封装后的 DEK。
使用存储在 Cloud KMS 中的密钥对加密后的 DEK 进行解封装。
使用该明文 DEK 对加密后的数据进行解密。如果像以前一样使用 OpenSSL,请参阅解密消息示例。
如需查看演示如何使用封信加密进行加密和解密的示例代码,请参阅使用 Tink 和 Cloud KMS 进行客户端加密。
与 Google Cloud 服务集成
Cloud KMS 集成了若干 Google Cloud 产品,以支持客户管理的加密密钥 (CMEK) 功能。CMEK 搭配 Cloud KMS 可为您的数据增加额外的保护层,使您可以控制加密密钥,并利用 Cloud KMS 的密钥管理优势。如需查看支持 CMEK 的完整产品列表,请参阅将 Cloud KMS 与其他服务搭配使用。
Google Cloud 服务的其他选项
对于存储在不支持 CMEK 的 Google Cloud 产品中的数据,您可以实施自己的应用层加密。这需要按上述方式实施您自己的信封加密,以便您将本地加密的数据存储在 Google Cloud 中。这也是您使用 Cloud KMS 对存储在其他云服务提供商中或本地的数据进行加密的方式。
除了支持 CMEK,以下产品还支持客户提供的加密密钥 (CSEK) 功能。
产品 | CSEK 主题 |
---|---|
Cloud Storage | 客户提供的加密密钥 |
Compute Engine | 使用客户提供的加密密钥来加密磁盘 |
借助 CSEK,您可以提供自己的 AES-256 密钥以用作 KEK,并且您的密钥可保护用于保护数据的 DEK。您的 CSEK 密钥受到使用 Cloud KMS 密钥的额外保护层的保护。
现在,您可以将密钥导入到 Cloud KMS,可以导入密钥并将其用于启用了 CMEK 的服务,而不必依赖 CSEK。