加密密钥管理
在本指南中,您可以了解如何在启用了 Queryable Encryption 的应用程序中使用密钥管理系统 ( KMS ) 托管加密密钥。
加密组件
MongoDB 使用以下组件来执行 Queryable Encryption:
数据加密密钥 (DEK)
客户主密钥 (CMK)
密钥保管库集合
密钥管理系统 (KMS)
要学习;了解有关密钥和密钥保管库的更多信息,请参阅密钥和密钥保管库。
使用 mongosh 轮换加密密钥
您可以使用 KeyVault.rewrapManyDataKey()
方法轮换加密密钥。 rewrapManyDataKey
方法自动解密多个数据密钥,并使用指定的客户主密钥重新加密这些密钥。 然后,它会更新密钥保管库集合中轮换的密钥。 此方法允许您根据两个可选参数轮换加密密钥:
用于指定要轮换的键的查询筛选器文档。 如果没有数据密钥与给定的筛选器匹配,则不会轮换任何密钥。 省略筛选器可轮换密钥保管库集合中的所有密钥。
表示新 CMK 的对象。可以省略该对象以使用当前 CMK 轮换数据密钥。
rewrapManyDataKey
方法采用以下语法:
let keyVault = db.getMongo().getKeyVault() keyVault.rewrapManyDataKey( { "<Your custom filter>" }, { provider: "<KMS provider>", masterKey: { "<dataKeyOpts Key>" : "<dataKeyOpts Value>" } } )
支持的密钥管理服务
Queryable Encryption 支持以下密钥管理系统提供商:
Amazon Web Services KMS
Azure Key Vault
Google Cloud KMS
任何符合 KMIP 的密钥管理系统
本地密钥提供程序(仅供测试)
要了解有关这些提供商的更多信息,包括显示应用程序如何使用它们来执行Queryable Encryption的图表,请参阅KMS 提供商。
使用远程 KMS 的原因
较之使用本地文件系统来托管 CMK,使用远程密钥管理系统来管理客户主密钥具有以下优势:
安全存储密钥并进行访问审核
降低了访问权限问题的风险
密钥对远程客户端的可用性以及将密钥分发给远程客户端
自动密钥备份和恢复
集中加密密钥生命周期管理
此外,对于以下KMS提供商,您的KMS会远程加密和解密您的数据加密密钥,确保您的客户主密钥永远不会暴露给启用了 Queryable Encryption 的应用程序:
Amazon Web Services KMS
Azure Key Vault
Google Cloud KMS
了解详情
有关详细介绍如何使用每个受支持的KMS提供商设置启用了 Queryable Encryption 的应用程序的教程,请参阅以下页面: