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