MongoDB は、 クライアント側のフィールドレベル暗号化 を使用する場合に、読み取りおよび書込み操作でフィールドを自動的に暗号化するのをサポートしています。mongosh と公式のMongoDBドライバーを使用して自動暗号化を実行できます。CSFLE をサポートする公式の互換性ドライバーの完全なリストについては、「ドライバーの互換性」を参照してください。
暗号化された書込みと読み取りの仕組み
次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データを書込み (write) と読み取りを行う方法を示しています。
暗号化された書込み
書込み操作では、ドライバーは MongoDB database に書込む前にフィールド値を暗号化します。
次の図は、クライアントアプリケーションとドライバーがフィールドレベルの暗号化データの書き込みを実行する手順を示しています。

暗号化された読み取り
読み取り操作では、ドライバーは読み取り操作を発行する前にクエリ内のフィールド値を暗号化します。
暗号化されたフィールドを返す読み取り操作の場合、ドライバーは暗号化された値を自動的に復号化します。
次の図は、クライアント アプリケーションとドライバーがフィールド レベルの暗号化データをクエリおよび復号化する手順を示しています。

クライアント側の自動フィールドレベル暗号化の有効化
自動暗号化を有効にするには、クライアントのMongoClientインスタンスで自動暗号化設定を指定します。
次のコード スニペットは、 mongoshと MongoDB ドライバーで自動暗号化が有効になっているクライアントを作成する方法を示しています。
CSFLE 固有のMongoClient設定の詳細については、「 CSFLE 用の MongoClient オプション 」を参照してください。
サーバー側のフィールドレベル暗号化の強制
MongoDB は、コレクション内の特定のフィールドの暗号化を強制するために、スキーマ検証を使用することをサポートしています。 自動クライアント側フィールドレベル暗号化を実行するクライアントは、データベース接続構成に応じて特定の動作をします。
接続のautoEncryptionOpts
schemaMapオブジェクトに指定されたコレクションのキーが含まれている場合、クライアントはそのオブジェクトを使用して自動フィールドレベルの暗号化を実行し、リモート スキーマを無視します。 ローカル ルールは、少なくとも、リモート スキーマが暗号化が必要とマークするフィールドを暗号化する必要があります。接続のautoEncryptionOpts
schemaMapオブジェクトに指定されたコレクションのキーが含まれていない場合、クライアントはコレクションのサーバー側リモート スキーマをダウンロードし、それを使用してフィールド レベルの暗号化を自動実行します。重要
動作に関する考慮事項
MongoDB はスキーマ検証を使用して、コレクション内の特定のフィールドの暗号化を強制します。 クライアント側のスキーマがない場合、クライアントはコレクションのサーバー側スキーマをダウンロードして、暗号化するフィールドを決定します。 この問題を回避するには、 クライアント側のスキーマ検証 を使用します。
CSFLE および Queryable Encryption ではスキーマの整合性を検証するメカニズムが提供されていないため、サーバー側のスキーマに依存するということは、サーバーのスキーマが操作されていないことを信頼することを意味します。 攻撃者がサーバーを侵害した場合、スキーマを変更して、以前に暗号化されたフィールドに暗号化のラベルが付けられなくなるのです。 これにより、クライアントはそのフィールドのプレーンテキスト値を送信します。
サーバー側で CSFLE を設定する方法については、「 CSFLE サーバー側でのスキーマ強制 」を参照してください。