キーとキー ボールト
Overview
このガイドでは、クライアント側フィールドレベル暗号化(CSFLE)の次のコンポーネントに関する詳細を学習できます。
データ暗号化キー( DEK )
カスタマー マスター キー( CMK )
キーヴォールト コレクション
キー管理システム( KMS )
上記のコンポーネントを使用して CSFLE 対応クライアントを設定する方法を示す手順付きガイドは、次のリソースを参照してください。
キー
データ暗号化キー( DEK )は、MongoDB がドキュメント内のフィールドを暗号化するために使用するキーです。 DEKは、カスタマー マスター キー( CMK )で暗号化された キーヴォールト コレクション内のドキュメントに保存します。
カスタマー マスター キーは、MongoDB が作成時に データ暗号化キー を暗号化するために使用するキーです。 CMKにアクセスしないと、クライアント アプリケーションは関連付けられている DEK を復号化することはできません。
DEKを削除すると、そのDEKで暗号化されたすべてのフィールドが永続的に読み取りできなくなります。 CMK を削除すると、その CMK を使用して DEK で暗号化されたすべてのフィールドが永続的に読み取りできなくなります。
警告
カスタマー マスター キーは、Queryable Encryption で最も機密性の高いキーです。 CMKが侵害された場合、暗号化されたデータはすべて復号化されます。 リモート キー管理システムを使用してCMKを保存します。
重要
リモートKMSプロバイダーの使用
カスタマー マスター キーをリモート キー管理システム( KMS )に保存します。
リモートKMS を使用する必要がある理由の詳細については、「 リモート KMSを使用する理由 」を参照してください。
サポートされているすべてのKMSプロバイダーのリストを表示するには、「 KMS プロバイダー」ページを参照してください。
DEK 、 CMK 、および Key Vault コレクションがサポートされているすべてのKMSプロバイダー アーキテクチャでどのように相互作用するのかを示す図については、「 CSFLE KMS プロバイダー 」を参照してください。
キーヴォールト コレクション
キーヴォールトコレクションは、暗号化された データ暗号化キー( DEK )ドキュメントの保存に使用する MongoDB のコレクションです。 DEKドキュメントは、DEK を含む BSON ドキュメントで、次の構造を持つ BSON ドキュメントです。
{ "_id" : UUID(<string>), "status" : <int>, "masterKey" : {<object>}, "updateDate" : ISODate(<string>), "keyMaterial" : BinData(0,<string>), "creationDate" : ISODate(<string>), "keyAltNames" : <array> }
Key Vault コレクションは、標準の MongoDB コレクションと同様に作成します。 Key Vault コレクションには、 keyAltNames
フィールドに一意のインデックスが必要です。 一意なインデックスが存在するかどうかを確認するには、Key Vault コレクションに対してlistIndexes
コマンドを実行します。
1 db.runCommand({ 2 listIndexes: "__keyVault", 3 });
1 { 2 cursor: { 3 id: Long("0"), 4 ns: 'encryption.__keyVault', 5 firstBatch: [ 6 { v: 2, key: { _id: 1 }, name: '_id_' } 7 ] 8 }, 9 ok: 1, 10 }
一意のインデックスが存在しない場合は、 DEK管理を実行する前にアプリケーションで一意のインデックスが作成される必要があります。
MongoDB コレクションの作成方法については、「データベースとコレクション 」を参照してください。
Tip
mongosh の機能
mongosh
メソッドKeyVault.createKey()
は、 keyAltNames
フィールドに一意のインデックスが存在しない場合は自動的に一意のインデックスを作成します。
キーヴォールトコレクション名
キーヴォールト コレクションを保存するには、管理者以外の名前空間を使用できます。 慣例的に、このドキュメント全体の例ではencryption.__keyVault
名前空間が使用されています。
警告
暗号化関連のコレクションを保存するために、 admin
データベースを使用しないでください。 このコレクションに 管理データベース を使用する場合、権限がないため MongoDB クライアントがデータにアクセスしたり、復号化したりできない可能性があります。
権限
キーヴォールト コレクションへのread
アクセスを持つアプリケーションは、コレクションをクエリすることで、暗号化された データ暗号化キー( DEK )を検索できます。 ただし、 DEK の暗号化に使用される CMK ( CMK )にアクセスできるアプリケーションのみが、その DEK を暗号化または復号化に使用できます。DEK を使用してドキュメントを暗号化および復号化するには、アプリケーションに Key Vault コレクションと CMK の両方へのアクセスを許可する必要があります。
MongoDB コレクションへのアクセスを許可する方法については、MongoDB マニュアルの「 ユーザーとロールの管理」を参照してください。
アプリケーションにCMKへのアクセスを許可する方法については、チュートリアルのチュートリアル を参照してください。
キーヴォールト クラスター
デフォルトでは、MongoDB は接続されたクラスターに Key Vault コレクションを保存します。 MongoDB では、接続クラスターとは異なる MongoDB 配置で Key Vault コレクションをホストすることもサポートされています。 アプリケーションは、Queryable Encryption 操作を実行するには、Key Vault コレクションをホストするクラスターと接続クラスターの両方にアクセスする必要があります。
キーヴォールト コレクションをホストするクラスターを指定するには、クライアントのMongoClient
オブジェクトのkeyVaultClient
フィールドを使用します。 クライアントのMongoClient
オブジェクト内の CSFLE 固有の構成オプションについて詳しくは、「 CSFLE 固有の MongoClient オプション 」を参照してください。
キーヴォールトコレクションの更新
Key Vault コレクションにDEKを追加するには、 ClientEncryption
オブジェクトのcreateKey
メソッドを使用します。
DEKを削除または更新するには、標準のCRUD操作を使用します。 MongoDB では DEK をドキュメントとして保存し、任意のドキュメント操作を DEK に適用できます。
DEKの作成方法を示すチュートリアルについては、「クイック スタート 」を参照してください。