参考 > 安全 > 客户端字段级加密 > 主密钥和数据加密密钥管理 > 管理数据加密密钥
4.2版中的新功能。
客户端字段级加密使用数据加密密钥进行加密和解密。所述mongo
壳
getKeyVault()
方法返回用于创建,修改和删除数据加密密钥的密钥库对象。
此页面记录了使用mongo
Shell 进行的客户端字段级加密
,并且未引用任何与MongoDB 4.2兼容的官方驱动程序。有关特定于驱动程序的数据加密密钥管理方法和语法,请参阅相关文档。
以下过程使用mongo
外壳程序创建数据加密密钥,以与客户端字段级加密和解密一起使用。有关使用兼容4.2的驱动程序进行数据加密密钥管理的指南,请参阅该驱动程序的文档。
客户端字段级加密需要密钥管理服务(KMS)。每个选项卡对应于受支持的KMS,并包含特定于该KMS的说明。
为AWS KMS配置客户端字段级加密需要AWS Access Key ID及其关联的Secret Access Key。在AWS访问密钥必须符合所有的IAM用户List
和Read
权限KMS服务。为了减轻AWS Access Key ID或Secret泄漏到日志中的风险,此过程使用环境变量将这些值传递到Shell中。
创建一个mongo
使用shell会话
--eval
,
--shell
以及
--nodb
选择:
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该
--eval
选项将外壳程序中的AWS_ACCESS_KEY_ID
和
AWS_SECRET_ACCESS_KEY
变量设置为相应环境变量的值。AWS CLI也支持指定的变量
。
创建一个新变量来存储客户端字段级加密配置文档:
为本地管理的密钥配置客户端字段级加密需要指定没有换行符的base64编码的96字节字符串。为了减轻密钥泄漏到日志中的风险,此过程mongo
使用环境变量将值传递到外壳中。
以下操作将生成满足规定要求的密钥并将其添加到用户
~/.profile
。如果密钥DEV_LOCAL_KEY
已经存在,请跳过此操作。
主机操作系统可能需要注销然后登录才能刷新加载的环境变量。或者,使用手动刷新外壳。source ~/.profile
注意
主机操作系统或外壳程序可能具有用于设置持久性环境变量的不同过程。请参阅主机OS或Shell的文档,以获取更多特定过程。
创建一个mongo
使用shell会话
--eval
,
--shell
和
--nodb
选项。
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该--eval
选项将外壳程序中的LOCAL_KEY
变量设置为mongo
相应环境变量的值。
在mongo
外壳程序中创建一个新变量,用于存储客户端字段级加密配置文档:
Mongo()
在mongo
外壳程序中使用构造函数建立与目标集群的数据库连接。通过将ClientSideFieldLevelEncryption
文档指定为第二个参数来配置客户端字段级加密的连接
:
用目标集群的连接字符串替换replaceMe.example.net
URI。
使用该csfleDatabaseConnection
对象访问
客户端字段级加密 Shell方法。
有关建立为客户端字段级加密配置的数据库连接的完整文档,请参阅
Mongo()
构造函数参考。
使用数据库连接对象getKeyVault()
上的方法
csfleDatabaseConnection
创建密钥库对象:
重要
客户端字段级加密取决于密钥替代名称由服务器强制的唯一性。如果不存在,则getKeyVault()
创建一个唯一索引
keyAltNames
。不要不降
唯一被创建的索引
getKeyVault()
。
使用
对象KeyVault.createKey()
上的方法在keyVault
密钥库中创建新的数据加密密钥。
第一个参数必须是"aws"
指定配置的Amazon Web Services KMS。
第二个参数必须是客户主密钥(CMK)的完整Amazon资源名称(ARN)。MongoDB使用指定的CMK对数据加密密钥进行加密。
第一个参数必须是local
指定配置的本地管理密钥。
第二个参数必须为空字符串。MongoDB不使用为此参数指定的值。
第三参数可以是keyAltNames
用于数据加密密钥的一个或多个的阵列。每个键的备用名称必须唯一。
getKeyVault()
创建一个唯一索引keyAltNames
以强制字段上唯一(如果尚不存在)。密钥备用名称有助于数据加密密钥的可查找性。
如果成功,则createKey()
返回UUID
新数据加密密钥的。的UUID是BSON 亚型对象唯一标识数据的加密密钥。该字符串是基础二进制数据的十六进制表示形式。Binary (BinData)
4
UUID
配置官方兼容4.2的驱动程序以进行自动客户端字段级加密需要使用base64
UUID字符串的表示形式指定数据加密密钥。以下操作将UUID
十六进制字符串转换为其base64
表示形式:
以下过程使用mongo
外壳程序来管理数据加密密钥的备用名称。有关使用兼容4.2的驱动程序进行数据加密密钥管理的指南,请参阅该驱动程序的文档。
客户端字段级加密需要密钥管理服务(KMS)。每个选项卡对应于受支持的KMS,并包含特定于该KMS的说明。
为AWS KMS配置客户端字段级加密需要AWS Access Key ID及其关联的Secret Access Key。在AWS访问密钥必须符合所有的IAM用户List
和Read
权限KMS服务。为了减轻AWS Access Key ID或Secret泄漏到日志中的风险,此过程使用环境变量将这些值传递到Shell中。
创建一个mongo
使用shell会话
--eval
,
--shell
以及
--nodb
选择:
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该
--eval
选项将外壳程序中的AWS_ACCESS_KEY_ID
和
AWS_SECRET_ACCESS_KEY
变量设置为相应环境变量的值。AWS CLI也支持指定的变量
。
创建一个新变量来存储客户端字段级加密配置文档:
为本地管理的密钥配置客户端字段级加密需要指定没有换行符的base64编码的96字节字符串。为了减轻密钥泄漏到日志中的风险,此过程mongo
使用环境变量将值传递到外壳中。
以下操作将生成满足规定要求的密钥并将其添加到用户
~/.profile
。如果密钥DEV_LOCAL_KEY
已经存在,请跳过此操作。
主机操作系统可能需要注销然后登录才能刷新加载的环境变量。或者,使用手动刷新外壳。source ~/.profile
注意
主机操作系统或外壳程序可能具有用于设置持久性环境变量的不同过程。请参阅主机OS或Shell的文档,以获取更多特定过程。
创建一个mongo
使用shell会话
--eval
,
--shell
和
--nodb
选项。
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该--eval
选项将外壳程序中的LOCAL_KEY
变量设置为mongo
相应环境变量的值。
在mongo
外壳程序中创建一个新变量,用于存储客户端字段级加密配置文档:
Mongo()
在mongo
外壳程序中使用构造函数建立与目标集群的数据库连接。通过将ClientSideFieldLevelEncryption
文档指定为第二个参数来配置客户端字段级加密的连接
:
用目标集群的连接字符串替换replaceMe.example.net
URI。
使用该csfleDatabaseConnection
对象访问
客户端字段级加密 Shell方法。
有关建立为客户端字段级加密配置的数据库连接的完整文档,请参阅
Mongo()
构造函数参考。
使用数据库连接对象getKeyVault()
上的方法
csfleDatabaseConnection
创建密钥库对象:
重要
客户端字段级加密取决于密钥替代名称由服务器强制的唯一性。如果不存在,则getKeyVault()
创建一个唯一索引
keyAltNames
。不要不降
唯一被创建的索引
getKeyVault()
。
重要
客户端字段级加密取决于密钥替代名称由服务器强制的唯一性。keyAltNames
在添加新的密钥备用名称之前,请验证存在唯一索引。如果唯一索引已删除,则必须
在添加任何关键备用名称之前重新创建它。
使用KeyVault.addKeyAlternateName()
将新的备用名称添加到数据加密密钥:
第一个参数必须是要修改的数据加密密钥的UUID。
第二个参数必须是唯一字符串。
getKeyVault()
创建一个唯一索引keyAltNames
以强制键替代名的唯一性。
KeyVault.addKeyAlternateName()
修改前返回数据加密密钥文档。使用
KeyVault.getKey()
以检索修改后的数据加密密钥。
使用KeyVault.removeKeyAlternateName()
从数据加密密钥中删除密钥备用名称:
第一个参数必须是要修改的数据加密密钥的UUID。
第二个参数必须是字符串键的备用名称。
KeyVault.removeKeyAlternateName()
修改前返回数据加密密钥。使用
KeyVault.getKey()
检索修改的数据加密密钥。
警告
删除数据加密密钥会使使用该密钥加密的所有字段永久不可读。
以下过程使用mongo
外壳程序从密钥库中删除数据加密密钥。有关使用兼容4.2的驱动程序进行数据加密密钥管理的指南,请参阅该驱动程序的文档。
客户端字段级加密需要密钥管理服务(KMS)。每个选项卡对应于受支持的KMS,并包含特定于该KMS的说明。
为AWS KMS配置客户端字段级加密需要AWS Access Key ID及其关联的Secret Access Key。在AWS访问密钥必须符合所有的IAM用户List
和Read
权限KMS服务。为了减轻AWS Access Key ID或Secret泄漏到日志中的风险,此过程使用环境变量将这些值传递到Shell中。
创建一个mongo
使用shell会话
--eval
,
--shell
以及
--nodb
选择:
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该
--eval
选项将外壳程序中的AWS_ACCESS_KEY_ID
和
AWS_SECRET_ACCESS_KEY
变量设置为相应环境变量的值。AWS CLI也支持指定的变量
。
创建一个新变量来存储客户端字段级加密配置文档:
为本地管理的密钥配置客户端字段级加密需要指定没有换行符的base64编码的96字节字符串。为了减轻密钥泄漏到日志中的风险,此过程mongo
使用环境变量将值传递到外壳中。
以下操作将生成满足规定要求的密钥并将其添加到用户
~/.profile
。如果密钥DEV_LOCAL_KEY
已经存在,请跳过此操作。
主机操作系统可能需要注销然后登录才能刷新加载的环境变量。或者,使用手动刷新外壳。source ~/.profile
注意
主机操作系统或外壳程序可能具有用于设置持久性环境变量的不同过程。请参阅主机OS或Shell的文档,以获取更多特定过程。
创建一个mongo
使用shell会话
--eval
,
--shell
和
--nodb
选项。
该示例将自动打开一个mongo
外壳,而无需连接到MongoDB数据库。该--eval
选项将外壳程序中的LOCAL_KEY
变量设置为mongo
相应环境变量的值。
在mongo
外壳程序中创建一个新变量,用于存储客户端字段级加密配置文档:
Mongo()
在mongo
外壳程序中使用构造函数建立与目标集群的数据库连接。通过将ClientSideFieldLevelEncryption
文档指定为第二个参数来配置客户端字段级加密的连接
:
用目标集群的连接字符串替换replaceMe.example.net
URI。
使用该csfleDatabaseConnection
对象访问
客户端字段级加密 Shell方法。
有关建立为客户端字段级加密配置的数据库连接的完整文档,请参阅
Mongo()
构造函数参考。
使用数据库连接对象getKeyVault()
上的方法
csfleDatabaseConnection
创建密钥库对象:
重要
客户端字段级加密取决于密钥替代名称由服务器强制的唯一性。如果不存在,则getKeyVault()
创建一个唯一索引
keyAltNames
。不要不降
唯一被创建的索引
getKeyVault()
。
UUID
。¶使用
对象KeyVault.deleteKey()
上的方法keyVault
从密钥库中删除数据密钥: