Docs 菜单
Docs 主页
/
MongoDB Manual
/ / / /

KMS 提供商

在此页面上

  • Overview
  • 使用远程密钥管理系统的原因
  • 密钥管理系统任务
  • 创建并存储您的客户主密钥
  • 创建和加密数据加密密钥
  • 支持的密钥管理服务
  • Amazon Web Services KMS
  • Azure Key Vault
  • Google Cloud Platform KMS
  • KMIP
  • 本地密钥提供程序

了解正在正在使用的加密支持的密钥管理系统 ( 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提供程序的kmsProvidersdataKeyOpts对象的结构,请参阅支持的密钥管理服务。

本页的以下部分为所有密钥管理系统提供程序提供以下信息:

  • 支持“正在使用的加密”客户端的架构

  • kmsProviders 对象的结构

  • dataKeyOpts 对象的结构

Queryable Encryption和 CSFLE 都支持以下密钥管理系统提供程序:

本节提供与使用 相关的信息Amazon Web ServicesKMS Queryable EncryptionCSFLE在启用了 或 的应用程序中。

要查看演示如何在应用程序中使用Amazon Web Services KMS的教程,请参阅概述:启用可Queryable Encryption通过Amazon Web Services使用自动客户端字段级加密。

下图描述了使用Amazon Web Services KMS 且启用了 Queryable Encryption 的应用程序的架构。

KMS 图表

注意

客户端无法访问客户主密钥

使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。

下表显示了 AWS KMS 的 kmsProviders 对象的结构:

字段
对 IAM 用户是必需的
IAM 角色必填项
说明

访问密钥 ID

标识该账户用户。

秘密访问密钥

包含账户用户的身份验证凭据。

Session Token

No

包含从 AWS Security Token Service (STS) 获取的令牌。

下表显示了 AWS KMS 的 dataKeyOpts 对象的结构:

字段
必需
说明

key

区域

No

主密钥的 AWS 地区,例如 "us-west-2";仅当您的 ARN 中未指定时才为必填项。

端点

No

您的帐户的 AWS 端点的自定义主机名(如果配置)。

本部分提供与使用 Azure Key Vault 相关的信息 在启用了 Queryable Encryption 或 CSFLE 的应用程序中。

要查看演示如何在应用程序中使用Azure Key Vault的教程,请参阅概述:启用可Queryable Encryption在Azure中使用自动客户端字段级加密。

下图描述了使用 Azure Key Vault 且启用了 Queryable Encryption 的应用程序的架构。

KMS 图表

注意

客户端无法访问客户主密钥

使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。

下表显示了 Azure Key Vault 的 kmsProviders 对象的结构:

字段
必需
说明

azure.tenantId

标识帐户的组织。

azure.clientId

指定 clientId 以对注册的应用程序进行身份验证。

azure.clientSecret

用于对注册的应用程序进行身份验证。

azure.identityPlatformEndpoint

No

指定身份验证服务器的主机名和端口号。默认为 login.microsoftonline.com,仅非商业 Azure 实例需要使用该字段,例如政府或中国帐户。

下表显示了 Azure Key Vault 的 dataKeyOpts 对象的结构:

字段
必需
说明

keyName

主密钥名称

keyVersion

否,但强烈建议

主密钥版本

keyVaultEndpoint

密钥库的 URL。例如 myVaultName.vault.azure.net

警告

如果不包含 keyVersion 字段,则 Azure Key Vault 尝试使用最新的客户主密钥对数据加密密钥进行解密。如果您轮换 CMK,但未使用新的主密钥重新包装数据加密密钥,尝试解密现有的 DEK 将失败,因为 DEK 是使用以前版本的 CMK 加密的。

本节提供与使用Google Cloud Platform 密钥管理 相关的信息 在启用了Queryable Encryption 或CSFLE 的应用程序中。

要查看演示如何在应用程序中使用GCP KMS的教程,请参阅概述:启用 GCP 可查询Queryable EncryptionGCP自动客户端字段级加密。

下图描述了使用 GCP KMS 且启用了 Queryable Encryption 的应用程序的架构。

KMS 图表

注意

客户端无法访问客户主密钥

使用上述密钥管理系统时,启用了 Queryable Encryption 的应用程序无权访问您的客户主密钥。

下表显示了 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:
-----BEGIN PRIVATE KEY-----\nyour-private-key\n-----END PRIVATE KEY-----\n
The value you would specify for this field is:
your-private-key
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 :
cat user-key.json | jq -r .private_key | openssl pkcs8 -topk8 -nocrypt -inform PEM -outform DER | base64 -w 0

端点

No

指定身份验证服务器的主机名和端口号。默认为 oauth2.googleapis.com。

下表显示了 GCP KMS 的dataKeyOpts对象的结构:

字段
必需
说明

projectId

在其中创建密钥的项目的标识符。

位置

为密钥指定的区域。

keyRing

您的密钥所属的密钥群组的标识符。

keyName

对称主密钥的标识符。

keyVersion

No

指定命名密钥的版本。 如果未指定,则使用默认的密钥版本。

端点

No

指定 Cloud KMS 的主机和可选端口。默认为 cloudkms.googleapis.com

本节提供与使用 KMIP 在启用了 Queryable Encryption 或 CSFLE 的应用程序中使用兼容的密钥管理系统。

要学习;了解如何使用 HashiCorp Vault设立KMIP,请参阅如何使用MongoDB CSFLE 或可查询Queryable Encryption设置 HashiCorp Vault KMIP 密钥引擎博文文 。

下图描述了使用KMIP兼容密钥提供商且启用了 Queryable Encryption 的应用程序的架构。

示意图

重要

客户端访问客户主密钥

当启用了Queryable Encryption的应用程序使用符合 KMIP 的密钥提供商而不指定delegated 选项时,您的应用程序将直接访问您的客户主密钥。为避免直接访问您的集合扫描 ,您可以在delegated truedataKeyOpts对象中将 选项设立为 。

下表显示了符合 KMIP 的密钥管理系统的kmsProviders对象的结构:

注意

通过 TLS/SSL 进行身份验证

使用 KMIP 时,启用了 Queryable Encryption 的应用程序通过TLS/SSL进行身份验证。

字段
必需
说明

端点

指定身份验证服务器的主机名和端口号。

下表显示了符合 KMIP 的密钥管理系统的dataKeyOpts对象的结构:

字段
必需
说明

keyId

No

keyId96字节 密钥数据托管对象 的 字段 存储在符合 KMIP 的密钥提供程序中。

如果您在发送到 KMIP 兼容密钥提供程序的 masterKey 文档中未指定 keyId 字段,则驱动程序在 KMIP 兼容密钥提供程序中创建新的 96 字节密钥数据管理对象以作为主密钥。

端点

KMIP 兼容密钥提供程序的 URI。

委托

No

将此选项设置为true ,以将 DEK 的加密和解密委托给 KMIP 兼容的密钥提供商。将这些任务委托给符合 KMIP 的密钥提供商可确保您永远无法直接访问权限集合扫描

如果您未设立delegated 选项设置为 true,您的应用程序将直接访问并传输来自 KMIP提供商的客户主密钥。

重要提示: delegated选项在Ruby、 Go或C++驱动程序中不可用。

本部分提供了在启用了Queryable Encryption或 CSFLE 的应用程序程序中使用本地密钥提供程序的相关信息。

警告

保护生产环境中的本地密钥文件

我们建议将客户数主密钥存储在远程 密钥管理系统 中( KMS )。要学习;了解如何在Queryable Encryption实施中使用远程KMS ,请参阅教程指南。

如果选择在生产中使用本地密钥提供商,请格外小心,不要将其存储在文件系统中。 请考虑使用 sidecar进程将密钥注入到客户端应用程序中,或使用其他确保密钥安全的方法。

要查看演示如何使用本地密钥提供程序来测试 Queryable Encryption 的教程,请参阅Queryable Encryption 快速入门CSFLE 快速入门。

当您使用本地密钥提供程序进行测试时,您的应用程序将从运行它的计算机中检索您的客户主密钥。 要在生产中使用本地密钥提供程序,请使用不在文件系统上存储密钥的方法。 示例,您可以通过 sidecar 将密钥注入客户端进程。

下图描述了使用本地密钥提供程序且启用了Queryable Encryption的应用程序的架构。

本地密钥提供程序架构图。

下表显示了本地密钥提供者的 kmsProviders 对象的结构:

字段
必需
说明

key

用于加密/解密数据密钥的主密钥。主密钥以 base64 编码字符串的形式传递。

在使用本地密钥提供程序时,您可以通过 kmsProviders 对象指定客户主密钥。

后退

密钥和密钥保管库