轮换和重新封装加密密钥
在本指南中,您可以了解如何使用应用程序中的密钥管理系统 ( KMS ) 托管加密密钥。
Overview
此过程向您展示如何使用 mongosh
轮换可查询Queryable Encryption的加密密钥。 轮换 DEK 包括使用新的客户主密钥重新包装它们,因此“轮换”和“重新包装”这两个术语有时可以互换使用。
完成本指南后,您应该能够在密钥管理系统上轮换客户主密钥 ( 客户主密钥 ),然后使用新的客户主密钥重新包装密钥保管库集合中的现有 DEK。
警告
轮换密钥时,请在删除密钥之前确认它们不用于加密任何密钥或数据。 如果删除DEK ,则使用该DEK加密的所有字段将永久不可读。 如果您删除 客户主密钥 ,则使用该 客户主密钥 通过 DEK 加密的所有字段将永久不可读。
相关信息
有关此过程中所包含概念的详细说明,请参阅以下主题。
要了解有关密钥和密钥保管库的更多信息,请参阅密钥和密钥保管库。 要查看支持的KMS提供商列表,请参阅KMS 提供商页面。
有关详细介绍如何使用每个受支持的KMS提供商设置启用了 Queryable Encryption 的应用程序的教程,请参阅以下页面:
步骤
在密钥管理系统上轮换客户主密钥
轮换客户主密钥的过程取决于您的KMS提供商。有关详细信息,请参阅密钥提供程序的文档:
Amazon Web Services: 轮换Amazon Web ServicesKMS 密钥
Azure: 在Azure Key Vault中配置加密密钥自动轮换
GCP:轮换密钥
轮换CMK后,MongoDB 会使用它来包装所有新的 DEK。 要重新包装现有 DEK,请继续执行以下步骤。
使用轮换数据加密密钥 KeyVault.rewrapManyDataKey()
KeyVault.rewrapManyDataKey()
方法自动解密多个数据加密密钥,并使用指定的客户主密钥重新加密。然后更新密钥保管库集合中的密钥。
该方法的语法如下:
let keyVault = db.getMongo().getKeyVault() keyVault.rewrapManyDataKey( { "<Query filter document>" }, { provider: "<KMS provider>", masterKey: { "<dataKeyOpts Key>" : "<dataKeyOpts Value>" } } )
指定查询筛选器文档以选择要轮换的密钥,或省略该参数以轮换密钥保管库集合中的所有密钥
如果指定了查询筛选器 文档,但没有匹配的键,则不会轮换键。
指定KMS提供商
使用新的客户主密钥指定
masterKey
,或省略该参数以使用现有的客户主密钥轮换密钥
使用新的客户主密钥重新包装 DEK 后,DEK 本身保持不变。密钥轮换过程是无缝的,不会中断您的应用程序。