Docs 主页 → 开发应用程序 → MongoDB Manual
通过 KMIP 使用客户端字段级自动加密
在此页面上
概述
本指南介绍如何使用符合 Key Management Interoperability Protocol (KMIP) 的提供商来构建支持客户端字段级加密 (CSFLE) 的应用程序。
在完成本指南中的步骤后,您应该具有:
在 KMIP兼容提供商上托管的客户主密钥。
正常工作的客户端应用程序;可以使用客户主密钥插入具有加密字段的文档。
开始之前
要完成并运行本指南中的代码,您需要按照安装要求页面中的步骤来设置开发环境。
在本指南中,代码示例使用占位符文本。在运行示例之前,请用您自己的值替换这些占位符。
例如:
dek_id := "<Your Base64 DEK ID>"
您可以将引号之间的内容替换为您的 DEK ID。
dek_id := "abc123"
从页面右侧的 Select your language(选择语言)下拉菜单中,选择要查看代码示例的编程语言。
提示
请参阅:完整应用程序
要查看本教程的完整可运行应用程序代码,请访问以下链接:
设置 KMS
注意
mongod
初创企业读取 KMIP 配置。默认情况下,服务器使用 KMIP 协议版本 1.2。
要连接到版本 1.0 或 1.1 的 KMIP 服务器,请使用useLegacyProtocol
设置。
创建应用程序
选择与您在应用程序中使用的 MongoDB 驱动程序相对应的标签页,查看相关代码示例。
配置 MongoClient
提示
在与前面步骤中创建的文件不同的单独文件中,执行本教程中的其余步骤。
为集合创建加密模式
创建加密模式,指定客户端应用程序加密文档字段的方式:
提示
添加数据加密密钥 Base64 ID
请务必更新以下代码以包含您的基本64 DEK ID。您在本指南的“生成数据加密密钥”步骤中收到了该值。
提示
关于模式的进一步阅读
要查看有关如何构建在此步骤中使用的模式的深入说明,请参阅加密模式指南。
要查看加密模式支持的所有加密规则列表,请参阅CSFLE 加密模式指南。
指定自动加密共享库位置
注意
自动加密选项
自动加密选项向自动加密共享库提供配置信息,这将修改应用程序在访问加密字段时的行为。
要了解有关自动加密共享库的更多信息,请参阅 CSFLE 的自动加密共享库页面。
插入具有加密字段的文档
使用启用了 CSFLE 的 MongoClient
实例,通过以下代码片段将具有加密字段的文档插入到 medicalRecords.patients
命名空间中:
在您插入文档时,启用了 CSFLE 的客户端对文档字段进行加密,以使其类似于以下内容:
{ "_id": { "$oid": "<_id of your document>" }, "name": "Jon Doe", "ssn": { "$binary": "<cipher-text>", "$type": "6" }, "bloodType": { "$binary": "<cipher-text>", "$type": "6" }, "medicalRecords": { "$binary": "<cipher-text>", "$type": "6" }, "insurance": { "provider": "MaestCare", "policyNumber": { "$binary": "<cipher-text>", "$type": "6" } } }
提示
请参阅:完整代码
检索具有加密字段的文档
检索在本指南的“插入具有加密字段的文档”步骤中插入的具有加密字段的文档。
为了显示 CSFLE 的功能,以下代码片段使用配置为自动 CSFLE 的客户端以及未配置为自动 CSFLE 的客户端来查询文档。
上述代码片段的输出应如下所示:
Finding a document with regular (non-encrypted) client. { _id: new ObjectId("629a452e0861b3130887103a"), name: 'Jon Doe', ssn: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e7910c20697e5f4fa95710aafc9153f0a3dc769c8a132a604b468732ff1f4d8349ded3244b59cbfb41444a210f28b21ea1b6c737508d9d30e8baa30c1d8070c4d5e26", "hex"), 6), bloodType: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e79022e238536dfd8caadb4d7751ac940e0f195addd7e5c67b61022d02faa90283ab69e02303c7e4001d1996128428bf037dea8bbf59fbb20c583cbcff2bf3e2519b4", "hex"), 6), 'key-id': 'demo-data-key', medicalRecords: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e790405163a3207cff175455106f57eef14e5610c49a99bcbd14a7db9c5284e45e3ee30c149354015f941440bf54725d6492fb3b8704bc7c411cff6c868e4e13c58233c3d5ed9593eca4e4d027d76d3705b6d1f3b3c9e2ceee195fd944b553eb27eee69e5e67c338f146f8445995664980bf0", "hex"), 6), insurance: { policyNumber: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e79108decd85c05be3fec099e015f9d26d9234605dc959cc1a19b63072f7ffda99db38c7b487de0572a03b2139ac3ee163bcc40c8508f366ce92a5dd36e38b3c742f7", "hex"), 6), provider: 'MaestCare' } } Finding a document with encrypted client, searching on an encrypted field { _id: new ObjectId("629a452e0861b3130887103a"), name: 'Jon Doe', ssn: 241014209, bloodType: 'AB+', 'key-id': 'demo-data-key', medicalRecords: [ { weight: 180, bloodPressure: '120/80' } ], insurance: { policyNumber: 123142, provider: 'MaestCare' } }
提示
请参阅:完整代码
了解详情
如需了解 CSFLE 的工作原理,请参阅基础知识。
如需详细了解本指南中提到的主题,请参阅以下链接:
有关 CSFLE 组件的更多信息,请参阅参考页面。
在“密钥和密钥保管库”页面上了解客户主密钥和数据加密密钥的工作原理。
在 CSFLE KMS 提供者页面上了解 KMS 提供者如何管理您的 CSFLE 密钥。