KMS 提供商
在此页面上
Overview
了解正在正在使用的加密支持的密钥管理系统 ( KMS ) 提供程序。
使用远程密钥管理系统的原因
与使用本地文件系统来托管客户主密钥相比,使用远程密钥管理系统来管理客户主密钥具有以下优点:
安全存储密钥并进行访问审核
降低了访问权限问题的风险
密钥对远程客户端的可用性以及将密钥分发给远程客户端
自动密钥备份和恢复
集中加密密钥生命周期管理
此外,对于以下KMS提供商,您的KMS会远程加密和解密您的数据加密密钥,确保您的客户主密钥永远不会暴露给启用了可查询Queryable Encryption或 CSFLE 的应用程序:
Amazon Web Services KMS
Azure Key Vault
Google Cloud KMS
密钥管理系统任务
在正在使用的加密中,您的密钥管理系统:
创建并加密客户主密钥
加密应用程序创建的数据加密密钥
解密数据加密密钥
要学习;了解有关客户数主密钥和数据加密密钥的更多信息,请参阅加密密钥和密钥保管库。
创建并存储您的客户主密钥
要创建客户主密钥,请配置密钥管理系统以生成客户主密钥,如下所示:
要查看演示如何在首选 KMS 中创建和存储 集合扫描 的教程,请参阅 Queryable Encryption自动加密教程 或 CSFLE 自动加密教程。
创建和加密数据加密密钥
要创建数据加密密钥:
在启用了Queryable Encryption或 CSFLE 的应用程序中实例化一个
ClientEncryption
实例:提供一个
kmsProviders
对象,用于指定应用程序用于向KMS提供商进行身份验证的档案。
使用应用程序中
ClientEncryption
对象的CreateDataKey
方法创建数据加密密钥。提供一个
dataKeyOpts
对象,指定您的 KMS 应使用哪个密钥来加密该新数据加密密钥。
要查看说明如何创建和加密数据加密密钥的教程,请参阅以下资源:
要查看所有支持的KMS提供程序的kmsProviders
和dataKeyOpts
对象的结构,请参阅支持的密钥管理服务。
支持的密钥管理服务
本页的以下部分为所有密钥管理系统提供程序提供以下信息:
支持“正在使用的加密”客户端的架构
kmsProviders
对象的结构dataKeyOpts
对象的结构
Queryable Encryption和 CSFLE 都支持以下密钥管理系统提供程序:
Amazon Web Services KMS
本节提供与使用 相关的信息Amazon Web ServicesKMS Queryable EncryptionCSFLE在启用了 或 的应用程序中。
要查看演示如何在应用程序中使用Amazon Web Services KMS的教程,请参阅概述:启用可Queryable Encryption或通过Amazon Web Services使用自动客户端字段级加密。
架构
下图描述了使用Amazon Web Services KMS 且启用了 Queryable Encryption 的应用程序的架构。
注意
客户端无法访问客户主密钥
使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。
kmsProviders 对象
下表显示了 AWS KMS 的 kmsProviders
对象的结构:
字段 | 对 IAM 用户是必需的 | IAM 角色必填项 | 说明 |
---|---|---|---|
访问密钥 ID | 是 | 是 | 标识该账户用户。 |
秘密访问密钥 | 是 | 是 | 包含账户用户的身份验证凭据。 |
Session Token | No | 是 | 包含从 AWS Security Token Service (STS) 获取的令牌。 |
dataKeyOpts 对象
下表显示了 AWS KMS 的 dataKeyOpts
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
key | 是 | Amazon 资源编号 (ARN) 主密钥。 |
区域 | No | 主密钥的 AWS 地区,例如 "us-west-2";仅当您的 ARN 中未指定时才为必填项。 |
端点 | No | 您的帐户的 AWS 端点的自定义主机名(如果配置)。 |
Azure Key Vault
本部分提供与使用 Azure Key Vault 相关的信息 在启用了 Queryable Encryption 或 CSFLE 的应用程序中。
要查看演示如何在应用程序中使用Azure Key Vault的教程,请参阅概述:启用可Queryable Encryption或在Azure中使用自动客户端字段级加密。
架构
下图描述了使用 Azure Key Vault 且启用了 Queryable Encryption 的应用程序的架构。
注意
客户端无法访问客户主密钥
使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。
kmsProviders 对象
下表显示了 Azure Key Vault 的 kmsProviders
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
azure.tenantId | 是 | 标识帐户的组织。 |
azure.clientId | 是 | 指定 clientId 以对注册的应用程序进行身份验证。 |
azure.clientSecret | 是 | 用于对注册的应用程序进行身份验证。 |
azure.identityPlatformEndpoint | No | 指定身份验证服务器的主机名和端口号。默认为 login.microsoftonline.com,仅非商业 Azure 实例需要使用该字段,例如政府或中国帐户。 |
dataKeyOpts 对象
下表显示了 Azure Key Vault 的 dataKeyOpts
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
keyName | 是 | 主密钥名称 |
keyVersion | 否,但强烈建议 | 主密钥版本 |
keyVaultEndpoint | 是 | 密钥库的 URL。例如 myVaultName.vault.azure.net |
警告
如果不包含 keyVersion
字段,则 Azure Key Vault 尝试使用最新的客户主密钥对数据加密密钥进行解密。如果您轮换 CMK,但未使用新的主密钥重新包装数据加密密钥,尝试解密现有的 DEK 将失败,因为 DEK 是使用以前版本的 CMK 加密的。
Google Cloud Platform KMS
本节提供与使用Google Cloud Platform 密钥管理 相关的信息 在启用了Queryable Encryption 或CSFLE 的应用程序中。
要查看演示如何在应用程序中使用GCP KMS的教程,请参阅概述:启用 GCP 可查询Queryable Encryption或GCP自动客户端字段级加密。
架构
下图描述了使用 GCP KMS 且启用了 Queryable Encryption 的应用程序的架构。
注意
客户端无法访问客户主密钥
使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。
kmsProviders 对象
下表显示了 GCP KMS 的kmsProviders
对象的结构:
字段 | 必需 | 说明 | |||
---|---|---|---|---|---|
电子邮件 | 是 | 标识您的服务帐户电子邮件地址。 | |||
privateKey | 是 | Identifies your service account private key in either
base64 string or
Binary subtype 0
format without the prefix and suffix markers. Suppose your service account private key value is as follows:
The value you would specify for this field is:
If you have a user-key.json credential file, you can extract
the string by executing the following command in a bash or
similar shell. The following command requires that you install
OpenSSL
:
| |||
端点 | No | 指定身份验证服务器的主机名和端口号。默认为 oauth2.googleapis.com。 |
dataKeyOpts 对象
下表显示了 GCP KMS 的dataKeyOpts
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
projectId | 是 | 在其中创建密钥的项目的标识符。 |
位置 | 是 | 为密钥指定的区域。 |
keyRing | 是 | 您的密钥所属的密钥群组的标识符。 |
keyName | 是 | 对称主密钥的标识符。 |
keyVersion | No | 指定命名密钥的版本。 如果未指定,则使用默认的密钥版本。 |
端点 | No | 指定 Cloud KMS 的主机和可选端口。默认为 cloudkms.googleapis.com 。 |
KMIP
本节提供与使用 KMIP 在启用了 Queryable Encryption 或 CSFLE 的应用程序中使用兼容的密钥管理系统。
要学习;了解如何使用 HashiCorp Vault设立KMIP,请参阅如何使用MongoDB CSFLE 或可查询Queryable Encryption设置 HashiCorp Vault KMIP 密钥引擎博文文 。
架构
下图描述了使用KMIP兼容密钥提供商且启用了 Queryable Encryption 的应用程序的架构。
重要
客户端访问客户主密钥
当启用了Queryable Encryption的应用程序使用符合KMIP的密钥提供商而不指定delegated
选项时,您的应用程序将直接访问您的客户主密钥。为避免直接访问您的集合扫描 ,您可以在dataKeyOpts对象中将delegated
选项设立为true
。
kmsProviders 对象
下表显示了符合 KMIP 的密钥管理系统的kmsProviders
对象的结构:
注意
通过 TLS/SSL 进行身份验证
使用 KMIP 时,启用了 Queryable Encryption 的应用程序通过TLS/SSL进行身份验证。
字段 | 必需 | 说明 |
---|---|---|
端点 | 是 | 指定身份验证服务器的主机名和端口号。 |
dataKeyOpts 对象
下表显示了符合 KMIP 的密钥管理系统的dataKeyOpts
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
keyId | No |
如果您在发送到 KMIP 兼容密钥提供程序的 |
端点 | 是 | KMIP 兼容密钥提供程序的 URI。 |
委托 | No | 将此选项设置为 如果您未设立 重要提示: |
本地密钥提供程序
本部分提供了在启用了Queryable Encryption或 CSFLE 的应用程序程序中使用本地密钥提供程序的相关信息。
警告
保护生产环境中的本地密钥文件
要查看演示如何使用本地密钥提供程序来测试 Queryable Encryption 的教程,请参阅Queryable Encryption 快速入门或CSFLE 快速入门。
架构
当您使用本地密钥提供程序进行测试时,您的应用程序将从运行它的计算机中检索您的客户主密钥。 要在生产中使用本地密钥提供程序,请使用不在文件系统上存储密钥的方法。 示例,您可以通过 sidecar 将密钥注入客户端进程。
下图描述了使用本地密钥提供程序且启用了Queryable Encryption的应用程序的架构。
kmsProviders 对象
下表显示了本地密钥提供者的 kmsProviders
对象的结构:
字段 | 必需 | 说明 |
---|---|---|
key | 是 | 用于加密/解密数据密钥的主密钥。主密钥以 base64 编码字符串的形式传递。 |
dataKeyOpts 对象
在使用本地密钥提供程序时,您可以通过 kmsProviders
对象指定客户主密钥。