Docs 主页 → 开发应用程序 → MongoDB Manual
在 Amazon Web Services 中使用自动 Queryable Encryption
概述
本指南向您展示如何构建一个应用程序,该应用程序实施 MongoDB Queryable Encryption 功能以自动加密和解密文档字段,并使用 Amazon Web Services (AWS) KMS进行密钥管理。
在完成本指南中的步骤后,您应该具有:
由 Amazon Web Services KMS 托管的客户主密钥
有权访问 AWS KMS 中的客户主密钥的 AWS IAM 用户
有效的客户端应用程序,可使用客户主密钥插入具有加密字段的文档
提示
客户主密钥
要了解有关客户主密钥的更多信息,请阅读密钥和密钥保管库文档。
开始之前
要完成并运行本指南中的代码,您需要按照安装要求页面中的步骤来设置开发环境。
提示
请参阅:完整应用程序
要查看此样本应用程序的完整代码,请选择与您的编程语言相对应的标签页,然后点击提供的链接。 每个样本应用程序存储库都包含一个 README.md
文件,您可以使用该文件来了解如何设置环境和运行应用程序。
设置 KMS
创建客户主密钥
登录您的 AWS 管理控制台 。
导航到 AWS KMS 控制台 。
创建客户主密钥
按照有关 创建对称 KMS 密钥的 AWS 官方文档创建新的对称密钥 。您创建的密钥是客户主密钥。选择有助于识别的名称和描述;这些字段不会影响您的 CMK 的功能或配置。
在密钥生成过程的 Usage Permissions步骤中,应用以下默认密钥策略,该策略使身份和访问管理 ( IAM ) 策略能够授予对您的客户主密钥的访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "<ARN of your AWS account principal>" }, "Action": "kms:*", "Resource": "*" } ] }
重要
记录您的客户主密钥的 Amazon 资源名称 (ARN) 和区域。您将在本指南的后续步骤中用到它们。
提示
关键策略
要了解有关密钥策略 的更多信息,请参阅 AWS KMS 中的密钥策略 在 AWS 官方文档中。
创建 AWS IAM 用户
导航到 AWS IAM 控制台 。
授予权限
向您的IAM用户授予远程主密钥的kms:Encrypt
和kms:Decrypt
权限。
重要
新的客户端 IAM 用户 不应 具有主密钥的管理权限。为了确保数据安全,请遵循 最小权限原则。
以下内联策略允许 IAM 用户按照最小权限原则使用客户主密钥进行加密和解密:
注意
远程主密钥 ARN
以下策略需要您在本指南的 创建主密钥 步骤中生成的密钥的 ARN 。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["kms:Decrypt", "kms:Encrypt"], "Resource": "<the Amazon Resource Name (ARN) of your remote master key>" } ] }
要将上述策略应用于 IAM 用户,请按照 添加 IAM 身份权限 AWS 文档中的指南。
重要
在生产环境中使用 IAM 角色进行身份验证
将启用了 Queryable Encryption 的应用程序部署到生产环境时,请使用IAM角色而不是IAM用户对应用程序进行身份验证。
要了解有关 IAM 角色的更多信息,请参阅官方 AWS 文档中的以下页面:
创建应用程序
分配应用程序变量
本教程中的代码示例使用以下变量来执行 Queryable Encryption 工作流程:
重要
密钥保管库集合命名空间权限
密钥保管库集合位于encryption.__keyVault
命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。
创建加密集合
添加 AWS KMS 凭证
创建一个包含 AWS KMS凭证的变量,其结构如下。使用您在本教程的创建 IAM 用户步骤中创建的访问密钥 ID 和秘密访问密钥。
重要
提醒:在生产环境中使用 IAM 角色进行身份验证
要使用 IAM 角色而不是 IAM 用户对应用程序进行身份验证,请在 KMS 提供程序对象中为凭证指定一个空对象。这会指示驱动程序自动从环境中检索凭证:
添加您的客户主密钥档案
创建一个包含以下结构的客户主密钥凭证的变量。使用您在本教程的 创建客户主密钥 步骤中记录的 ARN 和地区。
设置自动加密选项
注意
自动加密选项
自动加密选项向自动加密共享库提供配置信息,这将修改应用程序在访问加密字段时的行为。
要了解有关自动加密共享库的更多信息,请参阅Queryable Encryption 的自动加密共享库页面。
对加密字段的查询
以下代码示例对加密字段执行查找查询并打印解密的数据:
上述代码示例的输出应如下所示:
{ "_id": { "$oid": "648b384a722cb9b8392df76a" }, "name": "Jon Doe", "record": { "ssn": "987-65-4320", "billing": { "type": "Visa", "number": "4111111111111111" } }, "__safeContent__": [ { "$binary": { "base64": "L1NsYItk0Sg+oL66DBj6IYHbX7tveANQyrU2cvMzD9Y=", "subType": "00" } } ] }
警告
请勿修改 __safeContent__ 字段
__safeContent__
字段对于 Queryable Encryption 至关重要。请勿修改此字段的内容。
了解详情
要了解 Queryable Encryption 的工作原理,请参阅基础知识。
如需详细了解本指南中提到的主题,请参阅以下链接: