メインコンテンツまでスキップ
適用対象:
DuoKey Cockpit v2MongoDB(Atlas またはセルフホスト)クライアントサイドのフィールドレベル暗号化

概要​

MongoDB のクライアントサイドフィールドレベル暗号化(CSFLE)は、選択したドキュメントフィールドを、書き込みが MongoDB サーバーに到達する前にドライバー内で暗号化し、読み取り時に復号します。サーバーがそれらのフィールドの平文を見ることはありません。また、この方式で暗号化されたフィールドはクエリに対して不透明です。MongoDB は暗号文を保存して返すことはできますが、それに対してフィルタリング、ソート、インデックス付けを行うことはできません。

暗号化された各フィールドは、フィールドごとのデータ暗号化キー(DEK)によって保護され、DEK はキーボールトコレクションと呼ばれる MongoDB のコレクションに保存されます。それらの DEK 自体は、KMS プロバイダーから供給されるカスタマーマスターキー(CMK)によってラップされます。このアプリの役割は、その KMS プロバイダーになることです。DuoKey が CMK を預かり、DEK の作成とアンラップに必要な参照をドライバーに渡します。

MongoDB CSFLE — 暗号化が行われる場所
アプリケーションドキュメントフィールドの書き込み / 読み取り
平文フィールド
MongoDB ドライバー自動暗号化レイヤー
暗号文のみ
MongoDB サーバーデータコレクション + キーボールトコレクション
MongoDB ドライバー
アンラップ要求(KMS プロバイダー)
DuoKey vaultすべての DEK をラップする CMK を保持

暗号化されたフィールドの平文を目にするのはドライバーのプロセスだけであり、MongoDB 自身が保存して返すのは暗号文のみです。

プロパティ値
暗号化モデルクライアントサイドのフィールドレベル暗号化 — 不透明でクエリ不可能な暗号文
キーのカストディDuoKey vault のキーが、MongoDB のキーボールトコレクションに保存された DEK をラップします
オンボーディングガイド付きのマルチステップウィザード
実証ステータスデプロイと設定の生成は実物。セルフテストは現時点ではシミュレーション — 下記参照
セルフテストに頼る前にお読みください

この統合のセルフテストとヘルスチェックのエンドポイントは、現時点では稼働中の MongoDB デプロイに対するライブのラウンドトリップを実行せず、シミュレーションされたハードコードの結果を返します。アプリのレコード、リンクされた vault キー、生成される設定は実物ですが、セルフテストの合否シグナルはまだライブの暗号化/復号呼び出しに裏付けられていません。

設定​

フィールド目的
mongodb_uriMongoDB の接続 URI(`mongodb://` または `mongodb+srv://`) — Atlas とセルフホストの両方のデプロイに対応します。
database対象データベース。
key_vault_namespaceMongoDB が暗号化されたデータキーを保存するために使用する名前空間(`database.collection`)。デフォルトは `encryption.__keyVault` です。
kms_providerドライバーがマスターキーに到達するために使用する KMS プロバイダーの種類: `kmip`(DuoKey、推奨)、`aws`、`azure`、`gcp`、または `local`(開発用途のみ)。
encryption_schemaどのフィールドをどのように(決定的またはランダム)暗号化するかを宣言する JSON スキーマ。
linked_key_idDEK をラップするマスターキーとして機能する DuoKey vault のキー。

ウィザードによるオンボーディング​

1

MongoDB への接続

接続 URI と対象データベースを入力します。

2

KMS プロバイダー

KMS プロバイダーを選択します — DuoKey を利用するデプロイでは KMIP が推奨です。

3

暗号化スキーマ

どのフィールドを暗号化するか、およびそのアルゴリズムを定義します(決定的暗号化は暗号文に対する等価一致を可能にしますが、ランダム暗号化は不可能です)。

4

キーボールト

MongoDB が暗号化されたデータキーを保存するキーボールトの名前空間を設定します。

5

vault とキー

データキーをラップする DuoKey の vault とマスターキーを選択します。

6

レビューとデプロイ

サマリーを確認し、Node.js、Python、Java、Go 向けのドライバー設定スニペットを取得します。

決定的暗号化とランダム暗号化

決定的に暗号化されたフィールドは、同じ平文に対して常に同じ暗号文を生成するため、ドライバーはそのフィールドに対して完全一致のクエリを実行できます — ただし、どのドキュメントが同じ値を共有しているかが漏れるという代償があります。ランダムに暗号化されたフィールドは暗号文が繰り返されることがなく、まったくクエリできません。完全一致を超えるクエリ(たとえば範囲)が必要な場合、CSFLE では対応できません — MongoDB Queryable Encryption を参照してください。

CSFLE の書き込みの流れ​

1 つのフィールドを暗号化する、エンドツーエンドの流れ
1. アプリケーションがドキュメントを書き込む1 つのフィールドがスキーマで暗号化対象としてマークされている
自動暗号化が書き込みをインターセプト
2. ドライバーがそのフィールドの DEK を検索キーボールトコレクションからラップされたデータ暗号化キーを読み取る
アンラップ要求
3. DuoKey が DEK をアンラップこのアプリが預かる CMK を使用
DEK がクライアント側で利用可能に
4. ドライバーがフィールドを暗号化暗号化スキーマに従って決定的またはランダムに
暗号文のみ
5. MongoDB が暗号文を保存サーバーがこのフィールドの平文を見ることはない

ステップ 2〜4 はすべてドライバーのプロセス内で行われ、MongoDB 自身に渡されるのは常に暗号文だけです。

ヘルスとセルフテスト​

チェック報告される内容現時点でのライブプローブ
ヘルスMongoDB への到達性、キーボールトへのアクセス可否なし — 固定の正常ステータスエンベロープを返します
セルフテストMongoDB への接続、キーボールトへのアクセス、フィールドの暗号化/復号のラウンドトリップ、KMS プロバイダーへの到達性なし — 4 つのチェックすべてがハードコードされた合格を返します
頼る前に独自に検証してください

セルフテストがライブの MongoDB セッションを実行するようになるまでは、(暗号化クライアントを介さずシェルから)生のドキュメントを確認し、対象フィールドが平文ではなく BSON バイナリの暗号文になっていることを検査して、フィールド暗号化が実際に有効であることを確認してください。