Queryable Encryption の制限
項目一覧
Overview
Queryable Encryption を有効にする前に、これらの制限と制約を考慮してください。 一部の操作はサポートされていません。他の操作の動作は異なります。
互換性の制限については、「 互換性 」をお読みください。
セキュリティ保証
警告
Queryable Encryptionは、環境への永続的なアクセスを持つユーザー、またはデータベーススナップショットとそれに付随するクエリ トランザクション/ログの両方を取得できるユーザーではなく、データの流出を防ぎます。
Queryable Encryptionを使用する場合、等価クエリと範囲クエリはデータベーススナップショットを持つ攻撃者に対して同様のセキュリティを提供します。 ただし、データベーススナップショットとクエリ情報の両方にアクセスする攻撃者は、Queryable Encryption のセキュリティ保証の範囲を超えています。 これは、検索されるクエリ トランザクションまたはログの数が少ない場合でも、範囲クエリに特に当てはまります。詳細については、概要ホワイトペーパーの6.1 : 永続モデルの範囲クエリ を参照してください。
MongoDB サポートの制限
コレクションで Queryable Encryption を有効にすると、一部の診断コマンドのフィールドが編集され、クエリ ログから一部の操作が省略されます。これにより、特にクエリのパフォーマンスを分析する際、MongoDBサポートエンジニアが利用できるデータが制限されます。暗号化されたコレクションに対する操作の影響を測定するには、サードパーティのアプリケーションパフォーマンス監視ツールを使用してメトリクスを収集します。
詳しくは、このページの「リダクション」セクションを参照してください。
サポートされている操作
Queryable Encryptionは、コマンド、クエリ演算子、更新演算子、集計ステージ、および集計式のサブセットをサポートしています。 サポートされている操作のリストについては、「 Queryable Encryptionがサポートする操作 」を参照してください。
メタデータコレクションの手動圧縮
Manually run metadata collection compaction when your metadata collections exceed 1 GB. 圧縮により、暗号化されたフィールドに関連付けられたメタデータ コレクションのサイズが縮小され、パフォーマンスが向上します。
の変更 encryptedFieldsMap
に渡されるencryptedFieldsMap
MongoClient
は変更しないでください。指定すると、クエリ時に予期しない誤った動作が発生する可能性があります。
Queryable Encryptionは、 MongoClient
コンストラクターに渡すencryptedFieldsMap構成内のフィールドのセットを暗号化します。 コレクションドキュメントに存在するencryptedFieldsMap
構成で、以前はプレーンテキストのフィールドを指定した場合、 encryptedFieldsMap
構成を更新した後に挿入されたドキュメントについて、そのフィールドに対してのみクエリを実行できます。
例、プレーンテキストstreetAddress
フィールドを持つドキュメントを挿入したデータベースを考えてみましょう。 このフィールドをencryptedFieldsMap
に追加し、後続の挿入を実行すると、 streetAddress
の暗号化された値がデータベースに挿入されます。 ドライバーは特定のstreetAddress
に対する今後のクエリをBinData
として送信します。 その結果、元のドキュメント内のプレーンテキストの値は、将来のクエリと一致することはありません。
_id フィールド
MongoDB によって自動生成された値に依存しているため、 _id
フィールドを暗号化するように Queryable Encryption を構成することはできません。
暗号化されたフィールド名
暗号化されたフィールドの名前を変更することはできません。 例、暗号化するフィールドとしてssn
を指定した場合、フィールド名をtaxPayerID
に$rename
することはできません。
クエリ可能なフィールドの変更
encryptedFieldsMap
でコレクションを作成するときにフィールドに指定するクエリタイプは不変です。 既存のフィールドに新しいクエリ タイプを有効にすることはできません。また、既存のクエリ タイプを変更することもできません。
編集
セキュリティを向上させるために、Queryable Encryption は、暗号化されたコレクションの一部の診断コマンドのフィールドを編集し、クエリ ログから特定の操作を省略します。 暗号化されたコレクションとは、 encryptedFields
オプションを持つ任意のコレクションです。
クエリ ログとデータベースプロファイラーのリダクション
以下の CRUD 操作は、暗号化されたコレクションで実行すると、低速操作クエリ ログとデータベースプロファイラーsystem.profile
コレクションから省略されます。
compactStructuredEncryptionData
コマンドcleanupStructuredEncryptionData
コマンド
コマンドと集計ステージの出力リダクション
collStats
コマンドと$collStats
集計ステージ
Omit
"queryExecStats"
Omit
"latencyStats"
"WiredTiger"
が存在する場合は、編集してurl
フィールドのみを含めます。
currentOp
コマンドと$currentOp
集計ステージ
"command"
の後のすべてのフィールドを省略します。最初の要素、
$comment
、$db
のみを含むように"command"
を編集します。
top
コマンドは暗号化されたコレクションのコレクション名のみを返します。
$planCacheStats
集計ステージでは、暗号化されたコレクションに対する操作は通常どおりキャッシュされますが、操作は省略されます。
トポロジー サポート
レプリカセットとシャーディングされたクラスターはサポートされています
スタンドアロン配置はサポートされていません
セカンダリ読み取りはサポートされていません
シャーディング
メタデータコレクションはシャーディングしてはなりません
シャードキーは暗号化されたフィールドであってはなりません
コレクション
同じコレクションでは、クライアント側のフィールドレベル暗号化と Queryable Encryption は併用できません。
Queryable Encryption は、 クライアント側のフィールド レベル暗号化 で暗号化されたコレクションからの移行をサポートしていません。 ドキュメントを復号化し、1 つずつ挿入する必要があります。
Queryable Encryption は、暗号化されていないコレクションからの自動移行をサポートしていません。 ドキュメントは 1 つずつ挿入する必要があります。
Queryable Encryption は新しいコレクションのみをサポートします。 既存のコレクションに Queryable Encryption を追加または削除することはできません。
暗号化されたフィールドを含むコレクションの名前を変更することはできません。
jsonSchema
にencrypt
キーワードが含まれている場合、Queryable Encryption コレクションの作成時にjsonSchema
からdb.createCollection()
を指定することはできません。jsonSchema
encryptedFields
jsonSchema
db.createCollection()
に暗号化されたフィールドの検証が含まれていない限り、 と の両方を に指定できます。
Queryable Encryption は、ビュー、時系列コレクション、またはCapped コレクション をサポートしていません。
Queryable Encryption は、 TTL インデックスまたは一意のインデックスをサポートしていません。
jsonSchema
検証を無効にすることはできません。コレクションで
encryptedFields
オプションが使用される場合:validationLevel
をnone
に設定することはできません。validationAction
をwarn
に設定することはできません。
コレクションの削除
Queryable Encryption が設定されていない
MongoClient
からコレクションを削除しても、関連付けられているメタデータコレクションは削除されません。 メタデータ コレクションを削除する前に暗号化されたフィールドを含むコレクションを削除すると、mongod
は警告を記録します。
Tip
Queryable Encryption 用に構成されたMongoClient
でコレクションを削除すると、互換性のあるドライバーは関連するメタデータ コレクションも削除します。
コレクションを作成
Queryable Encryption を使用するコレクションは常に明示的に作成します。 暗黙的なコレクション作成では、必要なインデックスとメタデータ コレクションが作成されないため、クエリのパフォーマンスが低下します。
配列
Queryable Encryptionは、ドキュメントの配列内のフィールドの自動暗号化をサポートしていません。
ビュー
暗号化されたフィールドを持つコレクションに対するビューに対するサポートされていないクエリを防ぐために、アプリケーションは自動暗号化検証に依存することはできません。
Queryable Encryption で暗号化された値を含むコレクションのビューに対するクエリでは、基礎となるビュー集計パイプラインまたはクエリが暗号化されたフィールドを参照している場合、予期しない結果や不正確な結果が返されることがあります。 Queryable Encryption で暗号化された値を含むコレクションにビューを作成する場合は、予期しない結果や誤った結果のリスクを軽減するために、暗号化されたフィールドでの操作を避けてください。
ビューの詳細については、「ビュー 」を参照してください。
照合
Queryable Encryption は、ユーザー指定の照合またはコレクションのデフォルトの照合を無視します。 暗号化により、フィールド値がぼかして表示され、通常の照合動作が妨げられます。 暗号化されたフィールドに対する照合を区別するクエリでは、予期しない結果や誤った結果が返されることがあります。
照合の詳細については、照合ドキュメント を参照してください。
Queryable Encryption 互換ドライバーには、自動暗号化 でサポートされている操作のリストがあります。 サポートされていない読み取りおよび書込み操作の場合、基礎となるサポート ライブラリはコレクション カタログをイントロスペクションしてデフォルトの照合を識別できません。 したがって、アプリケーションは Queryable Encryption の検証に依存して、照合のデフォルトを持つ暗号化されたフィールドに対するクエリを防ぐことはできません。
Unique Indexes
一意なインデックスは、インデックス キーで暗号化されたフィールドが指定されている場合、一意であることを保証できません。
Queryable Encryption では、同じ入力でも、常に異なる暗号化値が出力されます。 サーバーでは、復号化された値が一意でない場合でも、暗号化された各値が一意であると見なされます。 つまり、コレクションでフィールドに対してインデックスによって強制される一意の制約を使用しても、コレクションにはそのフィールドのプレーンテキスト値が重複する複数のドキュメントを含めることができます。
自動暗号化用に構成された Queryable Encryption と互換性のあるドライバーは、 自動暗号化の一部の操作をサポートします。 サポートされていない読み取りおよび書込み操作の場合、基礎のライブラリはインデックスカタログを内部検証して、特定のフィールドを一意として識別することはできません。 アプリケーションは、ランダムに暗号化されたフィールドでの一意の制約違反を防ぐために、自動暗号化検証に依存することはできません。