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

创建客户主密钥

在此页面上

  • Overview
  • 开始之前
  • 步骤
  • 后续步骤

在本指南中,您将了解如何在所选密钥管理系统中生成客户主密钥。 在创建启用了 Queryable Encryption 的应用程序之前,生成客户主密钥。

提示

客户主密钥

要了解有关客户主密钥的更多信息,请参阅加密密钥和密钥保管库

请先完成上述任务,然后再继续:

  1. 安装 Queryable Encryption 兼容驱动程序和依赖项

  2. 安装和配置 Queryable Encryption 库

选择下面与您的密钥提供程序对应的标签页。

1
1
2
3

按照有关 创建对称 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 官方文档中的 AWS KMS 中的密钥策略

2
1
2

按照有关 添加用户 的 官方文档,在 管理控制台中创建新的编程 IAM 用户Amazon Web ServicesAmazon Web Services 。您将使用此IAM用户作为启用了 Queryable Encryption 的应用程序的服务帐户。 Amazon Web ServicesKMS您的应用程序使用 IAM 用户通过 进行身份验证,通过客户主密钥 (CMK) 对数据加密密钥 (DEK) 进行加密和解密。

重要

记录凭证

确保在创建 IAM 用户的最后一步记录以下 IAM 凭证:

  • 访问密钥 ID

  • 秘密访问密钥

您有一次机会记录这些凭证。如果在该步骤中没有记录这些凭证,则必须创建另一个 IAM 用户。

3

向该 IAM 用户授予远程主密钥的 kms:Encryptkms: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 用户,请遵守 AWS 文档中的添加 IAM 身份权限指南。

重要

在生产环境中使用 IAM 角色进行身份验证

将启用了 Queryable Encryption 的应用程序部署到生产环境时,请使用IAM角色而不是IAM用户对应用程序进行身份验证。

要了解有关 IAM 角色的更多信息,请参阅官方 AWS 文档中的以下页面:

1
1
2

要在 Azure Active Directory 上注册应用程序,请按照 Microsoft 官方文档 注册应用程序到 Microsoft 身份平台 快速入门。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

在本教程的后面内容中,您将需要它们来构造kmsProviders对象。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

在本教程的后面内容中,您将需要它们来构造kmsProviders对象。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

在本教程的后面内容中,您将需要它们来构造kmsProviders对象。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

除非您在 Azure 虚拟机中运行客户端,否则您将需要这些档案来构造本教程后面的kmsProviders对象。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

在本教程的后面内容中,您将需要它们来构造kmsProviders对象。

重要

记录凭证

确保记录以下凭证:

  • 租户 ID

  • 客户 ID

  • 客户端密钥

在本教程的后面内容中,您将需要它们来构造kmsProviders对象。

2
1

要创建新的 Azure Key Vault 实例和客户主密钥,请遵循 Microsoft 官方文档 使用 Azure 门户从 Azure Key Vault 设置和检索密钥 快速入门。

重要

记录凭证

确保记录以下凭证:

  • 密钥名称

  • 密钥标识符(本指南后面称为keyVaultEndpoint

  • keyVersion

在本教程的后面内容中,您将需要它们来构造dataKeyOpts对象。

2

授予您的客户端应用程序对该密钥的wrapunwrap权限。

1
1
2

要在GCP 上创建服务帐号,请按照 创建服务帐号 Google 官方文档中的指南。

3

要在 上添加服务帐户密钥,请按照GCP 管理服务帐户密钥 Google 官方文档中的指南。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。除非您使用附加的服务帐户,否则请确保以 PKCS 12或 JSON 格式下载此文件,以便在本教程后面使用。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。

重要

创建服务帐户密钥时,您会收到私钥信息的一次性下载。 请务必以 PKCS12 或 JSON 格式下载此文件,以便在本教程后面使用。

2
1

创建密钥环和对称 密钥 来自 Google 官方文档的指南。

此密钥是您的客户主密钥 ( CMK )。

记录您的客户主密钥的以下详细信息,以便在本教程的后续步骤中使用。

字段
必需
说明
key_name
客户主密钥的标识符。
key_ring
您的密钥所属的密钥群组的标识符。
key_version
No
已命名密钥的版本。
位置
为密钥指定的区域。
端点
No
Google Cloud Platform KMS 的主机和可选端口。默认值为cloudkms.googleapis.com
1

要将 MongoDB 驱动程序客户端连接到KMIP兼容密钥提供商,您必须配置KMIP兼容密钥提供商,使其接受客户端的 TLS 证书。

有关如何接受客户端证书的信息,请参阅符合KMIP的密钥提供商的文档。

2

客户端必须通过 TLS 连接到KMIP兼容密钥提供商,并提供KMIP兼容密钥提供商接受的客户端证书:

const tlsOptions = {
kmip: {
tlsCAFile: process.env["KMIP_TLS_CA_FILE"], // Path to your TLS CA file
tlsCertificateKeyFile: process.env["KMIP_TLS_CERT_FILE"], // Path to your TLS certificate key file
},
};
var tlsOptions = new Dictionary<string, SslSettings>();
var sslSettings = new SslSettings();
var clientCertificate = new X509Certificate2(_appSettings["Kmip:TlsCertP12"]!); // Full path to your client certificate p12 file
sslSettings.ClientCertificates = new[] { clientCertificate };
tlsOptions.Add("kmip", sslSettings);

重要

客户端证书必须采用 pks12 格式。您可以使用 OpenSSL 将证书转换为 使用以下命令:

openssl pcks12 -export -out "<new pcks12 certificate>" -in "<certificate to convert>" \
-name "<new certificate name>" -password "<new certificate password>"
tlsOpts := map[string]interface{}{
"tlsCertificateKeyFile": os.Getenv("KMIP_TLS_CERT_ECDSA_FILE"), // Path to your client certificate file
"tlsCAFile": os.Getenv("KMIP_TLS_CA_ECDSA_FILE"), // Path to your KMIP certificate authority file
}
kmipConfig, err := options.BuildTLSConfig(tlsOpts)
if err != nil {
panic(fmt.Sprintf("Unable to retrieve certificates from your environment: %s\n", err))
}
tlsConfig := map[string]*tls.Config{
"kmip": kmipConfig,
}

配置以下虚拟机选项,指定包含 KMIP TLS 证书的密钥库和信任库,并将它们添加到用于启动 Java 应用程序的命令中:

-Djavax.net.ssl.enabled=true
-Djavax.net.ssl.keyStoreType=pkcs12
-Djavax.net.ssl.keyStore=REPLACE-WITH-PATH-TO-PKC-KEYSTORE
-Djavax.net.ssl.keyStorePassword=REPLACE-WITH-KEYSTORE-PASSWORD
-Djavax.net.ssl.trustStoreType=jks
-Djavax.net.ssl.trustStore=REPLACE-WITH-PATH-TO-TRUSTSTORE
-Djavax.net.ssl.trustStorePassword=REPLACE-WITH-TRUSTSTORE-PASSWORD

注意

使用 SSLContext 配置客户端

如果您希望使用 SSL 上下文配置客户端应用程序,请使用kmsProviderSslContextMap方法。

const tlsOptions = {
kmip: {
tlsCAFile: process.env.KMIP_TLS_CA_FILE, // Path to your TLS CA file
tlsCertificateKeyFile: process.env.KMIP_TLS_CERT_FILE, // Path to your TLS certificate key file
},
};
tls_options = {
"kmip": {
"tlsCAFile": os.environ['KMIP_TLS_CA_FILE'], # Path to your TLS CA file
"tlsCertificateKeyFile": os.environ['KMIP_TLS_CERT_FILE'] # Path to your TLS certificate key file
}
}

安装驱动程序和依赖项并创建客户主密钥后,您可以创建启用了 Queryable Encryption 的应用程序。

后退

安装库