AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

使用中の暗号化

Rubyドライバーでは、使用中の暗号化と呼ばれる機能のセットを使用して、特定のドキュメントフィールドを暗号化できます。使用中の暗号化により、アプリケーションはMongoDBに送信する前にデータを暗号化し、暗号化されたフィールドを持つドキュメントをクエリできます。

警告

MongoDB 8.2既知の問題点

mongocryptd のバージョン 8.2.0 はWindowsでは実行されない可能性があります。このバグは、mongocryptd の起動時に --logpath NUL 引数を指定すると、ドライバーによる使用中の暗号化に影響します。

この問題とその解決方法の詳細については、 MongoDB 8.2 の既知の問題 を参照してください。リリースノート。

使用中の暗号化は、 MongoDBに送信されるとき、または 暗号化されたデータベース内にあるときに権限のないユーザーがプレーンテキスト データを表示するのを防ぎます。 アプリケーションで使用中の暗号化を有効にし、そのアプリケーションがデータの復号化を許可するには、アプリケーションのみがアクセスできる暗号化キーを作成する必要があります。 暗号化のキーにアクセスできるアプリケーションのみが、復号されたプレーンテキスト データにアクセスできます。 攻撃者がデータベースへのアクセスを取得した場合、暗号化のキーにアクセスできないため、暗号化された暗号化された暗号化データのみが表示されます。

使用中の暗号化を使用して、次のタイプの機密データを含むMongoDBドキュメント内のフィールドを暗号化できます。

  • クレジット カード番号

  • 住所

  • ヘルス情報

  • 金融情報

  • その他の機密情報または個人を特定できる情報(PII)

MongoDBは、使用中の暗号化を有効にするために次の機能を提供しています。

重要

$rerank ステージは、クライアント側フィールドレベル暗号化または Queryable Encryption を使用した自動暗号化用に構成されたクライアントではサポートされていません。$rerank を含むパイプラインは、Unrecognized pipeline stage name: '$rerank' のようなエラーで失敗します。

この制限は、暗号化されたフィールドを持たないコレクションを含むすべてのコレクション、および$unionWithなどのサブパイプライン内での$rerankの使用に適用されます。

Queryable Encryption (QE) は、使用中の暗号化機能で、暗号化されたフィールド値に対して、等価、範囲、プレフィックス、サフィックス、および部分文字列のクエリを実行できます。範囲クエリのサポートにはMongoDB Server 8.0 以降が必要です。プレフィックス、サフィックス、および部分文字列クエリのサポートにはMongoDB Server 9.0 以降が必要です。

Queryable Encryptionの詳細については、 MongoDB Serverマニュアルの「 Queryable Encryption 」を参照してください。

クライアント側フィールド レベル暗号化(CSFLE)は、暗号化されたフィールドの等価性検索をサポートしています。CSFLE は、フィールドを暗号化するために決定的またはランダムな暗号化アルゴリズムのいずれかを選択できる点でQueryable Encryptionと異なります。CSFLE を使用している場合は、決定的な暗号化アルゴリズムを使用する暗号化されたフィールドのみをクエリできます。CSFLE のフィールドを暗号化するためにランダムな暗号化アルゴリズムを使用する場合、それらは復号化することはできますが、それらのフィールドに対して等価クエリを実行することはできません。Queryable Encryptionを使用する場合、暗号化アルゴリズムを指定することはできませんが、すべての暗号化されたフィールドをクエリできます。

値を確定的に暗号化すると、同じ入力値によって同じ出力値が生成されます。 決定的な暗号化を使用すると、暗号化されたフィールドに対してクエリを実行できますが、濃度の低い暗号化データは、頻度分析によるコードの影響を受けやすくなります。

Tip

これらの概念の詳細については、 Wikipedia の次のエントリを参照してください。

CSFLEの詳細については、 MongoDB Serverマニュアルの「CSFLE」を参照してください。

デフォルトでは、Rubyドライバーはドキュメントを復号化する際、64ビットの整数をBSON::Int64値として、シンボルをBSON::Symbol::Raw値として返します。この動作は、暗号化されていないフィールドを含め、復号化されたドキュメント内のすべてのフィールドに適用されます。

これらの値を代わりに Ruby の Integer および Symbol 値として返すには、Mongo.csfle_convert_to_ruby_types オプションを true に設定します。このオプションは、Queryable Encryption と CSFLE の両方に適用されます。これは、アプリケーション内のすべてのクライアントに適用されるグローバル設定です。デフォルト値は false です。

次の例では、auto_encryption_options で構成されたクライアントを使用して、64 ビット整数を含むドキュメントを挿入します。次に、この例では csfle_convert_to_ruby_types が false に設定され、次に true に設定されたドキュメントを検索する。

encrypted_client = Mongo::Client.new( '<connection string>', auto_encryption_options: { key_vault_namespace: '<key vault namespace>', kms_providers: { local: { key: '<local master key>' } } }) collection = encrypted_client[:users]collection.insert_one({ _id: 1, large_number: 2**40 }) Mongo.csfle_convert_to_ruby_types = falseresult = collection.find({ _id: 1 }).firstputs result['large_number'].classputs result['large_number'].value Mongo.csfle_convert_to_ruby_types = trueresult = collection.find({ _id: 1 }).firstputs result['large_number'].classputs result['large_number']
BSON::Int641099511627776Integer1099511627776