明示的な暗号化
項目一覧
Overview
明示的な暗号化により、セキュリティをきめ細やかに制御できますが、コレクションの構成や MongoDB ドライバー のコード記述の複雑さは増します。 明示的な暗号化では、データベースで実行する各操作に対してドキュメント内のフィールドを暗号化する方法を指定し、このロジックをアプリケーション全体に含めます。
次の MongoDB 製品で明示的な暗号化が利用できます。
MongoDB Community Server
MongoDB Enterprise Advanced
MongoDB Atlas
明示的な暗号化の使用
ClientEncryption インスタンスの作成
ClientEncryption
mongosh
は、Key Vault コレクションと明示的な暗号化に関係する KMS 操作をカプセル化するドライバーと で使用される抽象化です。
ClientEncryption
インスタンスを作成するには、次の手順を指定します。
カスタマー マスター キーをホストするKMSプロバイダーへのアクセス用に構成された
kmsProviders
オブジェクトキーヴォールト コレクションの名前空間
MongoDB Community Server を使用する場合は、
bypassQueryAnalysis
オプションをTrue
に設定しますキーヴォールト コレクションへのアクセス権を持つ
MongoClient
インスタンス
その他のClientEncryption
オプションについては、「 Queryable Encryption の MongoClient オプション 」を参照してください。
読み取り操作と書込み操作におけるフィールドの暗号化
読み取りおよび書込み操作を実行する前に、アプリケーション全体で読み取りおよび書込み操作を更新し、アプリケーションがフィールドを暗号化する必要があります。
フィールドを暗号化するには、 ClientEncryption
インスタンスのencrypt
メソッドを使用します。 以下を指定します。
暗号化する値
使用されるアルゴリズム:
Indexed
、Unindexed
、またはRange
データ暗号化キーの ID
競合係数(
Indexed
またはRange
アルゴリズムを使用している場合)Indexed
またはRange
アルゴリズムを使用して読み取り操作を実行している場合は、フィールドに定義されているクエリタイプを に設定します。range
オプションmin, max (Range
アルゴリズムを使用している場合)
アルゴリズムの選択
フィールドにqueryType
を指定する場合は、 Indexed
アルゴリズムまたはRange
アルゴリズムを使用します。
Indexed
は等価クエリをサポートします。 Range
は範囲クエリをサポートしています。 Indexed
とRange
フィールドにはサーバー上のインデックスが必要です。 インデックスは、db.createCollection()
でencryptedFields
オプションを指定して作成されます
注意
MongoDB 8.0以降、 rangePreview
Queryable Encryptionアルゴリズムは非推奨となり、削除されました。代わりにRange
アルゴリズムを使用してください。
Queryable EncryptionコレクションでrangePreview
が使用されている場合は、 MongoDB 8.0にアップグレードする前に、コレクションを削除する必要があります。
自動復号化
フィールドを自動的に復号化するには、 MongoClient
インスタンスを次のように構成します。
kmsProviders
オブジェクトを指定するキーヴォールトコレクションを指定する
MongoDB Community Server を使用する場合は、
bypassQueryAnalysis
オプションをTrue
に設定します
注意
MongoDB Community Server での自動復号化
MongoDB Community Server では自動復号化が利用できます。 自動暗号化には MongoDB Enterprise または MongoDB Atlas が必要です。
サーバー側のフィールドレベル暗号化の強制
コレクション内の特定のフィールドの暗号化を強制する手順。
Indexed
およびRange
フィールドにはサーバー上のインデックスが必要です。 インデックスは、db.createCollection()
でencryptedFields
オプションを指定して作成されます
MongoDBインスタンスが特定のフィールドの暗号化を強制する場合、明示的な暗号化化を使用してQueryable Encryptionを実行するクライアントは、指定されたようにそれらのフィールドを暗号化する必要があります。 サーバー側でのQueryable Encryptionの設定方法については、「暗号化されたフィールド 」と「 有効なクエリ 」を参照してください。
詳細
キーヴォールト コレクション、データ暗号化キー、カスタマー マスター キーの詳細については、「暗号化キーとキーヴォールト 」を参照してください。
KMSプロバイダーとkmsProviders
オブジェクトの詳細については、「 KMS プロバイダー 」を参照してください。