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

创建客户主密钥

在此页面上

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

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

提示

客户主密钥

要学习;了解有关客户主密钥的详情,请参阅加密密钥和密钥保管库

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

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

  2. 安装和配置Queryable Encryption库

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

1
  1. 登录到 AWS 管理控制台。

  2. 导航到 AWS KMS控制台。

  3. 创建客户主密钥

    按照有关 创建对称 密钥 的 官方文档创建新的对称密钥Amazon Web Services KMS。您创建的密钥是客户主密钥。 选择有助于识别的名称和描述;这些字段不会影响 集合扫描的功能或配置。

    在密钥生成过程的 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. 导航到 AWS IAM 控制台。

  2. 创建 IAM 用户

    按照有关 添加用户 的 官方文档,在 管理控制台中创建新的编程 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. 登录到 Azure。

  2. 向 Azure Active Directory 注册您的应用程序

    要在 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 和客户主密钥

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

    重要

    记录凭证

    确保记录以下凭证:

    • 密钥名称

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

    • keyVersion

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

  2. 授予权限

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

1
  1. 注册或登录您在 Google Cloud 上的现有帐户。

  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);

重要

客户端证书必须采用 pks 12格式。 您可以使用 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,
}

重要

您必须使用带有 ECDSA 密钥 的证书 将Go驾驶员与 PyKMIP 结合使用时。

配置以下虚拟机选项以指定包含 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 的应用程序。

后退

安装库