创建启用 Queryable Encryption 的应用程序
Overview
本指南向您展示如何构建实现Queryable Encryption的应用程序,以自动加密和解密文档字段。
完成本指南中的步骤后,您应该拥有一个可以正常运行的客户端应用程序,可以插入带有使用客户主密钥加密的字段的文档。
开始之前
在创建应用程序之前,确保已完成以下先决任务:
完整应用程序代码
要查看示例应用程序的完整代码,请在语言选择器中选择您的编程语言。
每个示例应用程序存储库都包含一个 README.md
文件,您可以使用该文件来学习;了解如何设立环境和运行应用程序。
步骤
选择下面与您的密钥提供程序对应的标签页。
分配应用程序变量
本教程中的代码示例使用以下变量来执行 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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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
对象,其名称是keyVaultDatabaseName
和keyVaultCollectionName
变量的值,用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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_name
和key_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"
添加您的 KMS 档案
创建一个包含 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": { } }
添加您的集合扫描凭证
创建一个包含以下结构的客户主密钥凭证的变量。 使用您在步骤 中 创建集合扫描 时记录的 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 }
设置自动加密选项
使用以下选项创建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> )
创建客户端以设置加密集合
要创建用于对集合中的数据进行加密和解密的客户端,请使用您的连接 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 工作流:
kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商:
"aws"
、"azure"
、"gcp"
或"kmip"
。uri - 您的MongoDB 部署连接 URI。 在
MONGODB_URI
环境变量中设置连接 URI 或直接替换该值。keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为
"encryption"
。keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为
"__keyVault"
。keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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
对象,其名称是keyVaultDatabaseName
和keyVaultCollectionName
变量的值,用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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_name
和key_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"
添加您的 KMS 档案
创建一个包含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 } }
添加您的集合扫描凭证
创建一个包含以下结构的客户主密钥凭证的变量。 使用您在创建集合扫描时记录的集合扫描详细信息。
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 }
创建加密客户端
要创建用于加密和解密加密集合中的数据的客户端,请使用连接 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 工作流:
kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商:
"aws"
、"azure"
、"gcp"
或"kmip"
。uri - 您的MongoDB 部署连接 URI。 在
MONGODB_URI
环境变量中设置连接 URI 或直接替换该值。keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为
"encryption"
。keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为
"__keyVault"
。keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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
对象,其名称是keyVaultDatabaseName
和keyVaultCollectionName
变量的值,用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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_name
和key_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"
添加您的 KMS 档案
创建一个包含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 } }
添加您的集合扫描凭证
创建一个包含以下结构的客户主密钥凭证的变量。 使用您在创建集合扫描凭证记录的档案。
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 }
创建加密客户端
要创建用于加密和解密加密集合中的数据的客户端,请使用连接 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 工作流:
kmsProviderName - 用于存储客户主密钥的KMS 。 将其设置为您的密钥提供商:
"aws"
、"azure"
、"gcp"
或"kmip"
。uri - 您的MongoDB 部署连接 URI。 在
MONGODB_URI
环境变量中设置连接 URI 或直接替换该值。keyVaultDatabaseName - 将存储数据加密密钥 (DEK) 的MongoDB 数据库。 将其设置为
"encryption"
。keyVaultCollectionName - MongoDB中将存储您的 DEK 的集合。 将其设置为
"__keyVault"
。keyVaultNamespace - MongoDB中将存储您的 DEK 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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
对象,其名称是keyVaultDatabaseName
和keyVaultCollectionName
变量的值,用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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 的命名空间。 将其设置为
keyVaultDatabaseName
和keyVaultCollectionName
变量的值,并用句点分隔。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_name
和key_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"
添加您的 KMS 档案
创建一个变量,其中包含具有以下结构的符合 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 } }
添加您的集合扫描凭证
创建一个空对象,如以下代码示例所示。 这会提示符合KMIP的提供商生成新的客户主密钥。
customerMasterKeyCredentials = {};
var customerMasterKeyCredentials = new BsonDocument();
cmkCredentials := map[string]string{}
BsonDocument customerMasterKeyCredentials = new BsonDocument();
customerMasterKeyCredentials = {};
customer_master_key_credentials = {}
创建加密客户端
要创建用于加密和解密加密集合中的数据的客户端,请使用连接 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加密和查询数据。