CSFLE のサーバーサイド スキーマ強制
クライアント側フィールドレベル暗号化(CSFLE)対応のクライアント アプリケーションでは、 スキーマ検証を使用して、MongoDB インスタンスが特定のフィールドの暗号化を強制するようにできます。 暗号化が必要なフィールドを指定するには、 検証オブジェクトとともに 自動暗号化ルール キーワード $jsonSchema
を使用します。サーバーは、指定されたフィールドがBinary (BinData)
サブタイプ6オブジェクトではない、そのコレクションへの書込み操作を拒否します。
自動暗号化を使用するように構成された CSFLE 対応のクライアントがサーバー側のスキーマに遭遇したときの動作については、「サーバー側のフィールド レベル暗号化の強制 」を参照してください。
明示的な暗号化を使用するように構成された CSFLE 対応のクライアントがサーバー側のスキーマに遭遇したときにどのように動作するかについては、「サーバー側のフィールド レベルの暗号化の強制 」を参照してください。
例
employees
コレクションを持つhr
データベースを考えてみましょう。 employees
コレクション内のドキュメントの形式は次のとおりです。
{ "name": "Jane Doe", "age": 51 }
コレクションを使用するクライアント アプリケーションに次の動作を強制します。
age
フィールドを暗号化する場合、クライアントは次の暗号化ルールに従う必要があります。UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")
の_id
を持つデータ暗号化キーを使用します。ランダム化された暗号化アルゴリズムを使用します。
age
フィールドは整数である必要があります。
name
フィールドを暗号化する場合、クライアントは次の暗号化ルールに従う必要があります。UUID("33408ee9-e499-43f9-89fe-5f8533870617")
の_id
を持つデータ暗号化キーを使用します。決定的な暗号化アルゴリズムを使用します。
name
フィールドは string である必要があります。
次のmongosh
コードでは、 collMod
コマンドを使用してhr.employees
コレクションを更新し、 validator
を含めて、上記の動作を強制します。
db.getSiblingDB("hr").runCommand({ collMod: "employees", validator: { $jsonSchema: { bsonType: "object", properties: { age: { encrypt: { keyId: [UUID("e114f7ad-ad7a-4a68-81a7-ebcb9ea0953a")], algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random", bsonType: "int", }, }, name: { encrypt: { keyId: [UUID("33408ee9-e499-43f9-89fe-5f8533870617")], algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic", bsonType: "string", }, }, }, }, }, });
詳細
CSFLE がサポートする暗号化アルゴリズムの詳細については、「フィールドと暗号化タイプ 」を参照してください。
暗号化スキーマと暗号化ルールの詳細については、「 CSFLE の暗号化スキーマ 」を参照してください。