明示的(手動)クライアント側フィールドレベル暗号化
Overview
MongoDB4.2 + 互換ドライバー、mongosh
、およびMongoDB 以降のレガシー4.2 mongo
シェルは、特定のデータ暗号化のキーと暗号化アルゴリズムを使用してフィールドを明示的に暗号化または復号化するのをサポートしています。
アプリケーションは、読み取りおよび書込み操作の構築に関連付けられたすべてのコードを変更して、ドライバー暗号化ライブラリ経由の暗号化/復号化ロジックを含める必要があります。 アプリケーションは、操作ごとに暗号化および復号化に適したデータ暗号化キーを選択する必要があります。
mongosh
明示的な暗号化と復号化を実行するための次のメソッドを提供します。
MongoDB 4.2 + 互換ドライバーには、明示的なクライアント側フィールドレベル暗号化を実行するための特定の構文があります。 クライアント側のフィールドレベル暗号化をサポートする4.2 + 互換ドライバーの完全なリストについては、「ドライバーの互換性テーブル」を参照してください。 クライアント側のフィールドレベル暗号化を実行する具体的な手順については、ご使用のドライバーのドキュメントを参照してください。
mongosh
から発行された次の操作は、書込み操作の一部としてtaxid
フィールドを明示的に暗号化します。
clientEncryption = encryptedClient.getClientEncryption() db.getSiblingDB("hr").getCollection("employees").insertOne({ "name" : "J. Doe", "taxid" : clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" ) })
mongosh
から発行された次の操作は、読み取り操作の一部としてtaxid
フィールドを明示的に暗号化します。
encrypt = encryptedClient.getClientEncryption() db.getSiblingDB("hr").getCollection("employees").findOne({ "taxid" : clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic" ) })
これらの操作では、データベース接続 構成KMS で、指定されたデータ暗号化キー と それに関連付けられたカスタマー マスター キーにアクセスするために、キーヴォールトと が指定されていることを前提としています。
暗号化されたフィールドを返す読み取り操作の場合、ドライバーまたは shell は、ドライバーまたは shell がそれらの値を保護するために使用されるキーへのアクセスが構成されて いる場合にのみ 、暗号化された値を 自動的に復号化 します。
明示的なクライアント側フィールドレベル暗号化の有効化
公式 MongoDB 4.2 + 互換ドライバーはそれぞれ、クライアント側のフィールドレベル暗号化とデータ暗号化キー管理をサポートするための新しい機能を導入しています。 明示的なクライアント側のフィールドレベル暗号化の実装に関する言語固有の手順については、ご希望のドライバーのドキュメントを参照してください。
mongosh
は、明示的なクライアント側のフィールドレベル暗号化でデータベース接続をインスタンス化するための追加オプションをMongo()
メソッドに追加します。 完全な例については、「クライアント側の暗号化が有効になっているクラスターへの接続 」を参照してください。
アプリケーションは、データベース接続をインスタンス化して、明示的なクライアント側のフィールドレベル暗号化を有効にするときに次のコンポーネントを指定する必要があります。
データ暗号化キーのキーヴォールト。 キーヴォールトは、リモート MongoDB クラスターまたはクライアント側の暗号化データを保存している MongoDB クラスターのいずれかに存在できます。
CMK(Customer Master Key)の管理に使用されるサポート対象のKMS ( KMS )プロバイダー。 MongoDB は、指定されたCMKを使用してすべてのデータ暗号化キーを暗号化し、キーヴォールトに保存します。そのため、暗号化されていないメタデータのみが残ります。
4.2 + 互換ドライバー、
mongosh
、および MongoDB 4.2以降のレガシーmongo
shell は、保護されているフィールドを暗号化および復号化するか、新しいデータ暗号化キーを作成するために KMS にアクセスする必要があります。
サーバー側のフィールドレベル暗号化の強制
MongoDB 4.2サーバーは、コレクション内の特定のフィールドの暗号化を強制するために、スキーマ検証を使用することをサポートしています。 コレクション検証$jsonSchema
にフィールドの暗号化が必要な場合、明示的(手動)フィールドレベル暗号化を実行するクライアントは、そのフィールドを するencrypt
必要 があります。
サーバー側のクライアント側のフィールドレベル暗号化の適用に関する詳細なドキュメントについては、「フィールドレベル暗号化スキーマの強制 」を参照してください。