自動暗号化
MongoDB は、 クライアント側のフィールドレベル暗号化 を使用する場合に、読み取りおよび書込み操作でフィールドを自動的に暗号化するのをサポートしています。 mongosh
と公式の MongoDB ドライバーを使用して自動暗号化を実行できます。 CSFLE をサポートする公式の互換性ドライバーの完全なリストについては、「 ドライバーの互換性CSFLE の互換性 」を参照してください。
暗号化された書込みと読み取りの仕組み
次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データを書込み (write) と読み取りを行う方法を示しています。
暗号化された書込み
書込み操作では、ドライバーは MongoDB database に書込む前にフィールド値を暗号化します。
次の図は、クライアントアプリケーションとドライバーがフィールドレベルの暗号化データの書き込みを実行する手順を示しています。
暗号化された読み取り
読み取り操作では、ドライバーは読み取り操作を発行する前にクエリ内のフィールド値を暗号化します。
暗号化されたフィールドを返す読み取り操作の場合、ドライバーは暗号化された値を自動的に復号化します。
次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データをクエリおよび復号化する手順を示しています。
クライアント側の自動フィールドレベル暗号化の有効化
自動暗号化を有効にするには、クライアントのMongoClient
インスタンスで自動暗号化設定を指定します。
次のコード スニペットは、 mongosh
と MongoDB ドライバーで自動暗号化が有効になっているクライアントを作成する方法を示しています。
var autoEncryptionOpts = { "keyVaultNamespace" : "<database>.<collection>", "kmsProviders" : { ... }, "schemaMap" : { ... } } cluster = Mongo( "<Your Connection String>", autoEncryptionOpts );
var clientSettings = MongoClientSettings.FromConnectionString(_connectionString); var autoEncryptionOptions = new AutoEncryptionOptions( keyVaultNamespace: keyVaultNamespace, kmsProviders: kmsProviders, schemaMap: schemaMap, extraOptions: extraOptions); clientSettings.AutoEncryptionOptions = autoEncryptionOptions; var client = new MongoClient(clientSettings);
autoEncryptionOpts := options.AutoEncryption(). SetKmsProviders(provider.Credentials()). SetKeyVaultNamespace(keyVaultNamespace). SetSchemaMap(schemaMap). SetExtraOptions(extraOptions) client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
MongoClientSettings clientSettings = MongoClientSettings.builder() .applyConnectionString(new ConnectionString("mongodb://localhost:27017")) .autoEncryptionSettings(AutoEncryptionSettings.builder() .keyVaultNamespace(keyVaultNamespace) .kmsProviders(kmsProviders) .schemaMap(schemaMap) .extraOptions(extraOptions) .build()) .build(); MongoClient mongoClient = MongoClients.create(clientSettings);
const secureClient = new MongoClient(connectionString, { useNewUrlParser: true, useUnifiedTopology: true, monitorCommands: true, autoEncryption: { keyVaultNamespace, kmsProviders, schemaMap: patientSchema, extraOptions: extraOptions, }, });
fle_opts = AutoEncryptionOpts( kms_providers, key_vault_namespace, schema_map=patient_schema, **extra_options ) client = MongoClient(connection_string, auto_encryption_opts=fle_opts)
CSFLE 固有のMongoClient
設定の詳細については、「 CSFLE 固有の MongoClient オプション 」を参照してください。
サーバー側のフィールドレベル暗号化の強制
MongoDB は、コレクション内の特定のフィールドの暗号化を強制するために、スキーマ検証を使用することをサポートしています。 自動クライアント側フィールドレベル暗号化を実行するクライアントは、データベース接続構成に応じて特定の動作をします。
接続のautoEncryptionOpts
schemaMap
オブジェクトに指定されたコレクションのキーが含まれている場合、クライアントはそのオブジェクトを使用して自動フィールドレベルの暗号化を実行し、リモート スキーマを無視します。 ローカル ルールは、少なくとも、リモート スキーマが暗号化が必要とマークするフィールドを暗号化する必要があります。接続のautoEncryptionOpts
schemaMap
オブジェクトに指定されたコレクションのキーが含まれていない場合、クライアントはコレクションのサーバー側リモート スキーマをダウンロードし、それを使用してフィールド レベルの暗号化を自動実行します。重要
動作に関する考慮事項
autoEncryptionOpts
に指定されたコレクションのキーが含まれていない場合:クライアントは、フィールドレベルの自動暗号化に関してサーバーが有効なスキーマを持っていることを信頼します。
クライアントはリモート スキーマを使用して自動 CSFLE のみを実行します。 クライアントは、スキーマで指定された他の検証ルールを強制しません。
サーバー側で CSFLE を設定する方法については、「 CSFLE サーバー側でのスキーマ強制 」を参照してください。