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

创建启用 Queryable Encryption 的应用程序

在此页面上

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

本指南向您展示如何构建实现Queryable Encryption的应用程序,以自动加密和解密文档字段。

完成本指南中的步骤后,您应该拥有一个可以正常运行的客户端应用程序,可以插入带有使用客户主密钥加密的字段的文档。

在创建应用程序之前,确保已完成以下先决任务:

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

  2. 安装和配置Queryable Encryption库

  3. 创建客户主密钥

要查看示例应用程序的完整代码,请在语言选择器中选择您的编程语言。

完成 mongosh 应用程序

每个示例应用程序存储库都包含一个 README.md文件,您可以使用该文件来学习;了解如何设立环境和运行应用程序。

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

1

本教程中的代码示例使用以下变量来执行 Queryable Encryption 工作流:

  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将keyVaultDatabaseName设置为"encryption"

  • keyVaultCollectionName - MongoDB 中将存储您的 DEK 的集合。将 keyVaultCollectionName 设置为 "__keyVault"

  • keyVaultNamespace - MongoDB 中将存储您的 DEK 的命名空间。 将keyVaultNamespace设置为新的CollectionNamespace对象,其名称是keyVaultDatabaseNamekeyVaultCollectionName变量的值,用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将encryptedDatabaseName设置为"medicalRecords"

  • cryptoCollectionName - MongoDB 中将存储您的加密数据的集合。将 encryptedCollectionName 设置为 "patients"

  • uri - 您的 MongoDB 部署连接 URI。 在appsettings.json文件中设置连接 URI 或直接替换该值。

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kms_provider_name — 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • key_vault_database_name - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • key_vault_collection_name - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • key_vault_namespace - MongoDB中存储 DEK 的命名空间。 将其设置为key_vault_database_namekey_vault_collection_name变量的值,并用句点分隔。

  • 加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • encryption_collection_name - MongoDB中将存储您的加密加密的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

# KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"

重要

密钥保管库集合命名空间权限

密钥保管库集合位于encryption.__keyVault命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

2

创建一个包含 KMS 档案的变量,其结构如下。 使用您ID 2.2在创建Amazon Web Services IAM 用户 时在步骤 中使用的访问密钥 和秘密访问密钥。

kmsProviderCredentials = {
aws: {
accessKeyId: process.env["AWS_ACCESS_KEY_ID"], // Your AWS access key ID
secretAccessKey: process.env["AWS_SECRET_ACCESS_KEY"], // Your AWS secret access key
},
};
var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "accessKeyId", _appSettings["Aws:AccessKeyId"] }, // Your AWS access key ID
{ "secretAccessKey", _appSettings["Aws:SecretAccessKey"] } // Your AWS secret access key
};
kmsProviderCredentials.Add("aws", kmsOptions);
kmsProviderCredentials := map[string]map[string]interface{}{
"aws": {
"accessKeyId": os.Getenv("AWS_ACCESS_KEY_ID"), // AWS access key ID
"secretAccessKey": os.Getenv("AWS_SECRET_ACCESS_KEY"), // AWS secret access key
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("accessKeyId", getEnv("AWS_ACCESS_KEY_ID")); // Your AWS access key ID
kmsProviderDetails.put("secretAccessKey", getEnv("AWS_SECRET_ACCESS_KEY")); // Your AWS secret access key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("aws", kmsProviderDetails);
kmsProviders = {
aws: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID, // Your AWS access key ID
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, // Your AWS secret access key
},
};
kms_provider_credentials = {
"aws": {
"accessKeyId": os.environ['AWS_ACCESS_KEY_ID'], # Your AWS access key ID
"secretAccessKey": os.environ['AWS_SECRET_ACCESS_KEY'] # Your AWS secret access key
}
}

重要

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

要使用 IAM角色而不是IAM用户对应用程序进行身份验证,请在KMS提供商对象中为凭证指定一个空对象。 这会指示驾驶员自动从环境中检索凭证:

kmsProviders = {
aws: { }
};
kmsProviderCredentials.Add("aws", new Dictionary<string, object>);
kmsProviderCredentials := map[string]map[string]interface{}{
"aws": { },
}
kmsProviderCredentials.put("aws", new HashMap<>());
kmsProviders = {
aws: { }
};
kms_provider_credentials = {
"aws": { }
}
3

创建一个包含以下结构的客户主密钥凭证的变量。 使用您在步骤 中 创建集合扫描 时记录的 ARN 和地区。1.3

customerMasterKeyCredentials = {
key: process.env["AWS_KEY_ARN"], // Your AWS Key ARN
region: process.env["AWS_KEY_REGION"], // Your AWS Key Region
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "key", _appSettings["Aws:KeyArn"] }, // Your AWS Key ARN
{ "region", _appSettings["Aws:KeyRegion"] } // Your AWS Key Region
};
customerMasterKeyCredentials := map[string]string{
"key": os.Getenv("AWS_KEY_ARN"), // Your AWS Key ARN
"region": os.Getenv("AWS_KEY_REGION"), // Your AWS Key Region
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("key", new BsonString(getEnv("AWS_KEY_ARN"))); // Your AWS Key ARN
customerMasterKeyCredentials.put("region", new BsonString(getEnv("AWS_KEY_REGION"))); // Your AWS Key Region
customerMasterKeyCredentials = {
key: process.env.AWS_KEY_ARN, // Your AWS Key ARN
region: process.env.AWS_KEY_REGION, // Your AWS Key Region
};
customer_master_key_credentials = {
"key": os.environ['AWS_KEY_ARN'], # Your AWS Key ARN
"region": os.environ['AWS_KEY_REGION'] # Your AWS Key Region
}
4

注意

自动加密选项

自动加密选项向自动加密共享库提供配置信息,这将修改应用程序在访问加密字段时的行为。

要学习;了解有关自动加密共享库的更多信息,请参阅自动加密共享库页面。

使用以下选项创建autoEncryptionOptions对象:

  • 密钥保管库集合的命名空间

  • kmsProviderCredentials对象,其中包含您的 Amazon Web Services KMS 档案

const autoEncryptionOptions = {
keyVaultNamespace: keyVaultNamespace,
kmsProviders: kmsProviderCredentials,
};

使用以下选项创建AutoEncryptionOptions对象:

  • 密钥保管库集合的命名空间

  • kmsProviderCredentials对象,其中包含您的 Amazon Web Services KMS 档案

  • extraOptions 对象,其中包含指向您的自动加密共享库的路径

var extraOptions = new Dictionary<string, object>
{
{ "cryptSharedLibPath", _appSettings["CryptSharedLibPath"] } // Path to your Automatic Encryption Shared Library
};
var autoEncryptionOptions = new AutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials,
extraOptions: extraOptions);

使用以下选项创建AutoEncryption对象:

  • 密钥保管库集合的命名空间

  • kmsProviderCredentials对象,其中包含您的 Amazon Web Services KMS 档案

  • cryptSharedLibraryPath 对象,其中包含指向您的自动加密共享库的路径

cryptSharedLibraryPath := map[string]interface{}{
"cryptSharedLibPath": os.Getenv("SHARED_LIB_PATH"), // Path to your Automatic Encryption Shared Library
}
autoEncryptionOptions := options.AutoEncryption().
SetKeyVaultNamespace(keyVaultNamespace).
SetKmsProviders(kmsProviderCredentials).
SetExtraOptions(cryptSharedLibraryPath)

使用以下选项创建AutoEncryptionSettings对象:

  • 密钥保管库集合的命名空间

  • kmsProviderCredentials对象,其中包含您的 Amazon Web Services KMS 档案

  • extraOptions 对象,其中包含指向您的自动加密共享库的路径

Map<String, Object> extraOptions = new HashMap<String, Object>();
extraOptions.put("cryptSharedLibPath", getEnv("SHARED_LIB_PATH")); // Path to your Automatic Encryption Shared Library
AutoEncryptionSettings autoEncryptionSettings = AutoEncryptionSettings.builder()
.keyVaultNamespace(keyVaultNamespace)
.kmsProviders(kmsProviderCredentials)
.extraOptions(extraOptions)
.build();

使用以下选项创建autoEncryptionOptions对象:

  • 密钥保管库集合的命名空间

  • kmsProviders对象,其中包含您的 Amazon Web Services KMS 档案

  • sharedLibraryPathOptions 对象,其中包含指向您的自动加密共享库的路径

const extraOptions = {
cryptSharedLibPath: process.env.SHARED_LIB_PATH, // Path to your Automatic Encryption Shared Library
};
const autoEncryptionOptions = {
keyVaultNamespace,
kmsProviders,
extraOptions,
};

使用以下选项创建AutoEncryptionOpts对象:

  • kms_provider_credentials对象,其中包含您的 Amazon Web Services KMS 档案

  • 密钥保管库集合的命名空间

  • 自动加密共享库的路径

auto_encryption_options = AutoEncryptionOpts(
kms_provider_credentials,
key_vault_namespace,
crypt_shared_lib_path=os.environ['SHARED_LIB_PATH'] # Path to your Automatic Encryption Shared Library>
)
5

要创建用于对集合中的数据进行加密和解密的客户端,请使用您的连接 URI 和自动加密选项实例化一个新的 MongoClient

const encryptedClient = Mongo(uri, autoEncryptionOptions);

重要提示:如果使用的是.NET/ C#驱动程序版本3.0 或更高版本,则必须在实例化新的MongoClient 之前将以下代码添加到应用程序中:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

使用连接 URI 和自动加密选项实例化新的 MongoClient

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
encryptedClient, err := mongo.Connect(
context.TODO(),
options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOptions),
)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
1

本教程中的代码示例使用以下变量来执行 Queryable Encryption 工作流:

  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将keyVaultDatabaseName设置为"encryption"

  • keyVaultCollectionName - MongoDB 中将存储您的 DEK 的集合。将 keyVaultCollectionName 设置为 "__keyVault"

  • keyVaultNamespace - MongoDB 中将存储您的 DEK 的命名空间。 将keyVaultNamespace设置为新的CollectionNamespace对象,其名称是keyVaultDatabaseNamekeyVaultCollectionName变量的值,用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将encryptedDatabaseName设置为"medicalRecords"

  • cryptoCollectionName - MongoDB 中将存储您的加密数据的集合。将 encryptedCollectionName 设置为 "patients"

  • uri - 您的 MongoDB 部署连接 URI。 在appsettings.json文件中设置连接 URI 或直接替换该值。

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kms_provider_name — 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • key_vault_database_name - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • key_vault_collection_name - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • key_vault_namespace - MongoDB中存储 DEK 的命名空间。 将其设置为key_vault_database_namekey_vault_collection_name变量的值,并用句点分隔。

  • 加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • encryption_collection_name - MongoDB中将存储您的加密加密的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

# KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"

重要

密钥保管库集合命名空间权限

密钥保管库集合位于encryption.__keyVault命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

2

创建一个包含KMS的变量,其结构如下。 使用您在Azure 注册应用程序Azure时记录的Azure Key Vault凭证。

kmsProviderCredentials = {
azure: {
tenantId: process.env["AZURE_TENANT_ID"], // Your Azure tenant ID
clientId: process.env["AZURE_CLIENT_ID"], // Your Azure client ID
clientSecret: process.env["AZURE_CLIENT_SECRET"], // Your Azure client secret
},
};
var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "tenantId", _appSettings["Azure:TenantId"] }, // Your Azure tenant ID
{ "clientId", _appSettings["Azure:ClientId"] }, // Your Azure client ID
{ "clientSecret", _appSettings["Azure:ClientSecret"] } // Your Azure client secret
};
kmsProviderCredentials.Add("azure", kmsOptions);
kmsProviderCredentials := map[string]map[string]interface{}{
"azure": {
"tenantId": os.Getenv("AZURE_TENANT_ID"), // Azure tenant ID
"clientId": os.Getenv("AZURE_CLIENT_ID"), // Azure client ID
"clientSecret": os.Getenv("AZURE_CLIENT_SECRET"), // Azure client secret
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("tenantId", getEnv("AZURE_TENANT_ID")); // Your Azure tenant ID
kmsProviderDetails.put("clientId", getEnv("AZURE_CLIENT_ID")); // Your Azure client ID
kmsProviderDetails.put("clientSecret", getEnv("AZURE_CLIENT_SECRET")); // Your Azure client secret
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("azure", kmsProviderDetails);
kmsProviders = {
azure: {
tenantId: process.env.AZURE_TENANT_ID, // Your Azure tenant ID
clientId: process.env.AZURE_CLIENT_ID, // Your Azure client ID
clientSecret: process.env.AZURE_CLIENT_SECRET, // Your Azure client secret
},
};
kms_provider_credentials = {
"azure": {
"tenantId": os.environ['AZURE_TENANT_ID'], # Your Azure tenant ID
"clientId": os.environ['AZURE_CLIENT_ID'], # Your Azure client ID
"clientSecret": os.environ['AZURE_CLIENT_SECRET'] # Your Azure client secret
}
}
3

创建一个包含以下结构的客户主密钥凭证的变量。 使用您在创建集合扫描时记录的集合扫描详细信息。

customerMasterKeyCredentials = {
keyVaultEndpoint: process.env["AZURE_KEY_VAULT_ENDPOINT"], // Your Azure Key Vault Endpoint
keyName: process.env["AZURE_KEY_NAME"], // Your Azure Key Name
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "keyVaultEndpoint", _appSettings["Azure:KeyVaultEndpoint"] }, // Your Azure Key Vault Endpoint
{ "keyName", _appSettings["Azure:KeyName"] } // Your Azure Key Name
};
customerMasterKeyCredentials := map[string]string{
"keyVaultEndpoint": os.Getenv("AZURE_KEY_VAULT_ENDPOINT"), // Your Azure Key Vault Endpoint
"keyName": os.Getenv("AZURE_KEY_NAME"), // Your Azure Key Name
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("keyName", new BsonString(getEnv("AZURE_KEY_NAME"))); // Your Azure Key Vault Endpoint
customerMasterKeyCredentials.put("keyVaultEndpoint", new BsonString(getEnv("AZURE_KEY_VAULT_ENDPOINT"))); // Your Azure Key Name
customerMasterKeyCredentials = {
keyVaultEndpoint: process.env.AZURE_KEY_VAULT_ENDPOINT, // Your Azure Key Vault Endpoint
keyName: process.env.AZURE_KEY_NAME, // Your Azure Key Name
};
customer_master_key_credentials = {
"keyName": os.environ['AZURE_KEY_NAME'], # Your Azure key name
"keyVaultEndpoint": os.environ['AZURE_KEY_VAULT_ENDPOINT'] # Your Azure key vault endpoint
}
4

要创建用于加密和解密加密集合中的数据的客户端,请使用连接 URI 和自动加密选项实例化新的MongoClient

const encryptedClient = Mongo(uri, autoEncryptionOptions);

重要提示:如果使用的是.NET/ C#驱动程序版本3.0 或更高版本,则必须在实例化新的MongoClient 之前将以下代码添加到应用程序中:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

使用连接 URI 和自动加密选项实例化新的 MongoClient

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
encryptedClient, err := mongo.Connect(
context.TODO(),
options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOptions),
)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
1

本教程中的代码示例使用以下变量来执行 Queryable Encryption 工作流:

  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将keyVaultDatabaseName设置为"encryption"

  • keyVaultCollectionName - MongoDB 中将存储您的 DEK 的集合。将 keyVaultCollectionName 设置为 "__keyVault"

  • keyVaultNamespace - MongoDB 中将存储您的 DEK 的命名空间。 将keyVaultNamespace设置为新的CollectionNamespace对象,其名称是keyVaultDatabaseNamekeyVaultCollectionName变量的值,用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将encryptedDatabaseName设置为"medicalRecords"

  • cryptoCollectionName - MongoDB 中将存储您的加密数据的集合。将 encryptedCollectionName 设置为 "patients"

  • uri - 您的 MongoDB 部署连接 URI。 在appsettings.json文件中设置连接 URI 或直接替换该值。

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kms_provider_name — 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • key_vault_database_name - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • key_vault_collection_name - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • key_vault_namespace - MongoDB中存储 DEK 的命名空间。 将其设置为key_vault_database_namekey_vault_collection_name变量的值,并用句点分隔。

  • 加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • encryption_collection_name - MongoDB中将存储您的加密加密的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

# KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"

重要

密钥保管库集合命名空间权限

密钥保管库集合位于encryption.__keyVault命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

2

创建一个包含KMS的变量,其结构如下。

kmsProviderCredentials = {
gcp: {
email: process.env["GCP_EMAIL"], // Your GCP email
privateKey: process.env["GCP_PRIVATE_KEY"], // Your GCP private key
},
};
var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "email", _appSettings["Gcp:Email"] }, // Your GCP email
{ "privateKey", _appSettings["Gcp:PrivateKey"] } // Your GCP private key
};
kmsProviderCredentials.Add("gcp", kmsOptions);
kmsProviderCredentials := map[string]map[string]interface{}{
"gcp": {
"email": os.Getenv("GCP_EMAIL"), // GCP email
"privateKey": os.Getenv("GCP_PRIVATE_KEY"), // GCP private key
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("email", getEnv("GCP_EMAIL")); // Your GCP email
kmsProviderDetails.put("privateKey", getEnv("GCP_PRIVATE_KEY")); // Your GCP private key
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("gcp", kmsProviderDetails);
kmsProviders = {
gcp: {
email: process.env.GCP_EMAIL, // Your GCP email
privateKey: process.env.GCP_PRIVATE_KEY, // Your GCP private key
},
};
kms_provider_credentials = {
"gcp": {
"email": os.environ['GCP_EMAIL'], # Your GCP email
"privateKey": os.environ['GCP_PRIVATE_KEY'] # Your GCP private key
}
}
3

创建一个包含以下结构的客户主密钥凭证的变量。 使用您在创建集合扫描凭证记录的档案。

customerMasterKeyCredentials = {
projectId: process.env["GCP_PROJECT_ID"], // Your GCP Project ID
location: process.env["GCP_LOCATION"], // Your GCP Key Location
keyRing: process.env["GCP_KEY_RING"], // Your GCP Key Ring
keyName: process.env["GCP_KEY_NAME"], // Your GCP Key Name
};
var customerMasterKeyCredentials = new BsonDocument
{
{ "projectId", _appSettings["Gcp:ProjectId"] }, // Your GCP Project ID
{ "location", _appSettings["Gcp:Location"] }, // Your GCP Key Location
{ "keyRing", _appSettings["Gcp:KeyRing"] }, // Your GCP Key Ring
{ "keyName", _appSettings["Gcp:KeyName"] } // Your GCP Key Name
};
customerMasterKeyCredentials := map[string]string{
"projectId": os.Getenv("GCP_PROJECT_ID"), // Your GCP Project ID
"location": os.Getenv("GCP_LOCATION"), // Your GCP Key Location
"keyRing": os.Getenv("GCP_KEY_RING"), // Your GCP Key Ring
"keyName": os.Getenv("GCP_KEY_NAME"), // Your GCP Key Name
}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials.put("provider", new BsonString(kmsProviderName));
customerMasterKeyCredentials.put("projectId", new BsonString(getEnv("GCP_PROJECT_ID"))); // Your GCP Project ID
customerMasterKeyCredentials.put("location", new BsonString(getEnv("GCP_LOCATION"))); // Your GCP Key Location
customerMasterKeyCredentials.put("keyRing", new BsonString(getEnv("GCP_KEY_RING"))); // Your GCP Key Ring
customerMasterKeyCredentials.put("keyName", new BsonString(getEnv("GCP_KEY_NAME"))); // Your GCP Key Name
customerMasterKeyCredentials = {
projectId: process.env.GCP_PROJECT_ID, // Your GCP Project ID
location: process.env.GCP_LOCATION, // Your GCP Key Location
keyRing: process.env.GCP_KEY_RING, // Your GCP Key Ring
keyName: process.env.GCP_KEY_NAME, // Your GCP Key Name
};
customer_master_key_credentials = {
"projectId": os.environ['GCP_PROJECT_ID'], # Your GCP email
"location": os.environ['GCP_LOCATION'], # Your GCP private key
"keyRing": os.environ['GCP_KEY_RING'], # Your GCP private key
"keyName": os.environ['GCP_KEY_NAME'] # Your GCP private key
}
4

要创建用于加密和解密加密集合中的数据的客户端,请使用连接 URI 和自动加密选项实例化新的MongoClient

const encryptedClient = Mongo(uri, autoEncryptionOptions);

重要提示:如果使用的是.NET/ C#驱动程序版本3.0 或更高版本,则必须在实例化新的MongoClient 之前将以下代码添加到应用程序中:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

使用连接 URI 和自动加密选项实例化新的 MongoClient

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
encryptedClient, err := mongo.Connect(
context.TODO(),
options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOptions),
)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)
1

本教程中的代码示例使用以下变量来执行 Queryable Encryption 工作流:

  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将keyVaultDatabaseName设置为"encryption"

  • keyVaultCollectionName - MongoDB 中将存储您的 DEK 的集合。将 keyVaultCollectionName 设置为 "__keyVault"

  • keyVaultNamespace - MongoDB 中将存储您的 DEK 的命名空间。 将keyVaultNamespace设置为新的CollectionNamespace对象,其名称是keyVaultDatabaseNamekeyVaultCollectionName变量的值,用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将encryptedDatabaseName设置为"medicalRecords"

  • cryptoCollectionName - MongoDB 中将存储您的加密数据的集合。将 encryptedCollectionName 设置为 "patients"

  • uri - 您的 MongoDB 部署连接 URI。 在appsettings.json文件中设置连接 URI 或直接替换该值。

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const string kmsProviderName = "<your KMS provider name>";
const string keyVaultDatabaseName = "encryption";
const string keyVaultCollectionName = "__keyVault";
var keyVaultNamespace =
CollectionNamespace.FromFullName($"{keyVaultDatabaseName}.{keyVaultCollectionName}");
const string encryptedDatabaseName = "medicalRecords";
const string encryptedCollectionName = "patients";
var appSettings = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
var uri = appSettings["MongoDbUri"];
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kmsProviderName := "<KMS provider name>"
uri := os.Getenv("MONGODB_URI") // Your connection URI
keyVaultDatabaseName := "encryption"
keyVaultCollectionName := "__keyVault"
keyVaultNamespace := keyVaultDatabaseName + "." + keyVaultCollectionName
encryptedDatabaseName := "medicalRecords"
encryptedCollectionName := "patients"
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
String kmsProviderName = "<KMS provider name>";
String uri = QueryableEncryptionHelpers.getEnv("MONGODB_URI"); // Your connection URI
String keyVaultDatabaseName = "encryption";
String keyVaultCollectionName = "__keyVault";
String keyVaultNamespace = keyVaultDatabaseName + "." + keyVaultCollectionName;
String encryptedDatabaseName = "medicalRecords";
String encryptedCollectionName = "patients";
  • kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为keyVaultDatabaseNamekeyVaultCollectionName变量的值,并用句点分隔。

  • cryptoDatabaseName - 将存储加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • cryptoCollectionName - MongoDB中将存储您的加密数据的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

// KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
const kmsProviderName = "<Your KMS Provider Name>";
const uri = process.env.MONGODB_URI; // Your connection URI
const keyVaultDatabaseName = "encryption";
const keyVaultCollectionName = "__keyVault";
const keyVaultNamespace = `${keyVaultDatabaseName}.${keyVaultCollectionName}`;
const encryptedDatabaseName = "medicalRecords";
const encryptedCollectionName = "patients";
  • kms_provider_name — 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商: "aws""azure""gcp""kmip"

  • uri - 您的MongoDB 部署连接 URI。 在MONGODB_URI环境变量中设置连接 URI 或直接替换该值。

  • key_vault_database_name - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为"encryption"

  • key_vault_collection_name - MongoDB中将存储您的 DEK 的集合。 将其设置为"__keyVault"

  • key_vault_namespace - MongoDB中存储 DEK 的命名空间。 将其设置为key_vault_database_namekey_vault_collection_name变量的值,并用句点分隔。

  • 加密数据的MongoDB 数据库。 将其设置为"medicalRecords"

  • encryption_collection_name - MongoDB中将存储您的加密加密的集合。 将其设置为"patients"

您可以使用以下代码来声明这些变量:

# KMS provider name should be one of the following: "aws", "gcp", "azure", "kmip" or "local"
kms_provider_name = "<KMS provider name>"
uri = os.environ['MONGODB_URI'] # Your connection URI
key_vault_database_name = "encryption"
key_vault_collection_name = "__keyVault"
key_vault_namespace = f"{key_vault_database_name}.{key_vault_collection_name}"
encrypted_database_name = "medicalRecords"
encrypted_collection_name = "patients"

重要

密钥保管库集合命名空间权限

密钥保管库集合位于encryption.__keyVault命名空间中。 确保应用程序用于连接到 MongoDB 的数据库用户对此命名空间具有ReadWrite权限。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

提示

环境变量

本教程中的示例代码引用了您需要设置的环境变量。或者,您也可以直接在代码中替换这些值。

要了解如何设置这些环境变量,请参阅 GitHub 上的示例应用程序中包含的 README.md 文件。

2

创建一个变量,其中包含具有以下结构的符合 KMIP 的密钥提供商的端点:

kmsProviderCredentials = {
kmip: {
endpoint: process.env["KMIP_KMS_ENDPOINT"], // Your KMIP KMS endpoint
},
};
var kmsProviderCredentials = new Dictionary<string, IReadOnlyDictionary<string, object>>();
var kmsOptions = new Dictionary<string, object>
{
{ "endpoint", _appSettings["Kmip:KmsEndpoint"] } // Your KMIP KMS endpoint
};
kmsProviderCredentials.Add("kmip", kmsOptions);
kmsProviderCredentials := map[string]map[string]interface{}{
"kmip": {
"endpoint": os.Getenv("KMIP_KMS_ENDPOINT"), // KMIP KMS endpoint
},
}
Map<String, Object> kmsProviderDetails = new HashMap<>();
kmsProviderDetails.put("endpoint", getEnv("KMIP_KMS_ENDPOINT")); // Your KMIP KMS endpoint
Map<String, Map<String, Object>> kmsProviderCredentials = new HashMap<String, Map<String, Object>>();
kmsProviderCredentials.put("kmip", kmsProviderDetails);
kmsProviders = {
kmip: {
endpoint: process.env.KMIP_KMS_ENDPOINT, // Your KMIP KMS endpoint
},
};
kms_provider_credentials = {
"kmip": {
"endpoint": os.environ['KMIP_KMS_ENDPOINT'] # Your KMIP KMS endpoint
}
}
3

创建一个空对象,如以下代码示例所示。 这会提示符合KMIP的提供商生成新的客户主密钥。

customerMasterKeyCredentials = {};
var customerMasterKeyCredentials = new BsonDocument();
cmkCredentials := map[string]string{}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials = {};
customer_master_key_credentials = {}
4

要创建用于加密和解密加密集合中的数据的客户端,请使用连接 URI 和自动加密选项实例化新的MongoClient

const encryptedClient = Mongo(uri, autoEncryptionOptions);

重要提示:如果使用的是.NET/ C#驱动程序版本3.0 或更高版本,则必须在实例化新的MongoClient 之前将以下代码添加到应用程序中:

MongoClientSettings.Extensions.AddAutoEncryption(); // .NET/C# Driver v3.0 or later only

使用连接 URI 和自动加密选项实例化新的 MongoClient

var clientSettings = MongoClientSettings.FromConnectionString(uri);
clientSettings.AutoEncryptionOptions = qeHelpers.GetAutoEncryptionOptions(
keyVaultNamespace,
kmsProviderCredentials);
var encryptedClient = new MongoClient(clientSettings);
encryptedClient, err := mongo.Connect(
context.TODO(),
options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOptions),
)
if err != nil {
panic(fmt.Sprintf("Unable to connect to MongoDB: %v\n", err))
}
defer func() {
_ = encryptedClient.Disconnect(context.TODO())
}()
MongoClientSettings clientSettings = MongoClientSettings.builder()
.applyConnectionString(new ConnectionString(uri))
.autoEncryptionSettings(autoEncryptionSettings)
.build();
try (MongoClient encryptedClient = MongoClients.create(clientSettings)) {
const encryptedClient = new MongoClient(uri, {
autoEncryption: autoEncryptionOptions,
});
encrypted_client = MongoClient(
uri, auto_encryption_opts=auto_encryption_options)

安装驱动程序和依赖项、创建客户主密钥并创建应用程序后,请参阅概述:使用 Queryable Encryption加密和查询数据。

后退

创建客户主密钥