客户端字段级加密
在使用MongoDB Enterprise或MongoDB Atlas集群时,可以使用mongosh
配置客户端字段级加密并使用加密支持进行连接。客户端字段级加密使用数据加密密钥来支持字段值的加密和解密,并将该加密密钥材料存储在密钥管理服务(KMS)中。
mongosh支持以下KMS提供程序与客户端字段级加密一起使用:
- Amazon Web Services KMS
- Azure Key Vault
- Google Cloud Platform KMS
- Locally Managed Keyfile
创建数据加密密钥
以下过程使用mongosh创建数据加密密钥,以用于客户端字段级加密和解密。
使用下面的选项卡选择适合您的部署的KMS:
Amazon Web Services KMS :
启动
mongosh
Shell使用--nodb选项创建一个mongosh会话,但不连接到正在运行的数据库:
mongosh --nodb
创建加密配置
为AWS KMS配置客户端字段级加密需要AWS访问密钥ID及其关联的秘密访问密钥。AWS访问密钥必须对应于对KMS服务具有所有列表和读取权限的IAM用户。
在mongosh中,创建一个新的AutoEncryptionOpts变量,用于存储客户端字段级加密配置,其中包含以下凭据:
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "aws" : { "accessKeyId" : "YOUR_AWS_ACCESS_KEY_ID", "secretAccessKey" : "YOUR_AWS_SECRET_ACCESS_KEY" } } }
根据需要填写
YOUR_AWS_ACCESS_KEY_ID
和YOUR_AWS_SECRET_ACCESS_KEY
的值。联系加密支持
在mongosh中,使用Mongo()构造函数建立到目标集群的数据库连接。将AutoEncryptionOpts文档指定为Mongo()构造函数的第二个参数,以配置客户端字段级加密的连接:
csfleDatabaseConnection = Mongo( "mongodb://replaceMe.example.net:27017/?replicaSet=myMongoCluster", autoEncryptionOpts )
将
replaceMe.example.net
URI替换为目标群集的连接字符串。创建密钥存储库对象
使用getKeyVault()shell方法创建
keyVault
对象:keyVault = csfleDatabaseConnection.getKeyVault();
创建加密密钥
使用createKey()shell方法创建数据加密密钥:
keyVault.createKey( "aws", { region: "regionname", key: "awsarn" }, [ "keyAlternateName" ] )
其中:
- 第一个参数必须为“aws”以指定配置的Amazon Web Services KMS。
- 第二个参数必须是包含以下内容的文档:
- 要连接到的AWS地区,例如us-west-2
- Amazon资源名称(ARN)AWS客户主密钥(CMK)。
- 第三参数可以是用于数据加密密钥的一个或多个keyAltName的数组。每个密钥备用名称必须唯一。getKeyVault()在keyAltNames上创建一个唯一索引,以便在字段不存在时强制字段的唯一性。密钥备用名称有助于数据加密密钥的查找。
如果成功,createKey()将返回新数据加密密钥的UUID。要从密钥库检索新的数据加密密钥文档,请执行以下操作之一:
- 使用getKey()按UUID检索创建的密钥,或者
- 使用getKeyByAltName()按密钥的备用名称(如果指定)检索密钥。
另见:
翻译:韩鹏帅