Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / / /

キーとキー ボールト

項目一覧

  • Overview
  • キー
  • キーヴォールト コレクション
  • キーヴォールトコレクション名
  • 権限
  • キーヴォールト クラスター
  • キーヴォールトコレクションの更新

このガイドでは、Queryable Encryption の次のコンポーネントに関する詳細を学習できます。

  • データ暗号化キー( DEK

  • カスタマー マスター キー( CMK

  • キーヴォールト コレクション

  • キー管理システム( KMS

上記のコンポーネントを使用して Queryable Encryption 対応クライアントを設定する方法を示す手順付きガイドは、次のリソースを参照してください。

  • クイック スタート

  • Tutorials

データ暗号化キー( DEK )は、MongoDB がドキュメント内のフィールドを暗号化するために使用するキーです。 DEKは、カスタマー マスター キー( CMK )で暗号化された キーヴォールト コレクション内のドキュメントに保存します。

カスタマー マスター キーは、MongoDB が作成時に データ暗号化キー を暗号化するために使用するキーです。 CMKにアクセスしないと、クライアント アプリケーションは関連付けられている DEK を復号化することはできません。

DEKを削除すると、そのDEKで暗号化されたすべてのフィールドが永続的に読み取りできなくなります。 CMK を削除すると、その CMK を使用して DEK で暗号化されたすべてのフィールドが永続的に読み取りできなくなります。

警告

カスタマー マスター キーは、Queryable Encryption で最も機密性の高いキーです。 CMKが侵害された場合、暗号化されたデータはすべて復号化されます。 リモート キー管理システムを使用してCMKを保存します。

重要

リモートKMSプロバイダーの使用

カスタマー マスター キーをリモート キー管理システム( KMS )に保存します。

リモートKMS を使用する必要がある理由の詳細については、「 リモート KMSを使用する理由 」を参照してください。

サポートされているすべてのKMSプロバイダーのリストを表示するには、「 KMS プロバイダー」ページを参照してください。

DEKCMK 、および Key Vault コレクションがサポートされているすべてのKMSプロバイダー アーキテクチャでどのように相互作用するのかを示す図については、「 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コマンドを実行します。

1db.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オブジェクト内の Queryable Encryption 固有の構成オプションの詳細については、「 Queryable Encryption のMongoClient オプション 」を参照してください。

Key Vault コレクションにDEKを追加するには、 ClientEncryptionオブジェクトのcreateKeyメソッドを使用します。

DEKを削除または更新するには、標準のCRUD操作を使用します。 MongoDB では DEK をドキュメントとして保存し、任意のドキュメント操作を DEK に適用できます。

DEKの作成方法を示すチュートリアルについては、「クイック スタート 」を参照してください。

Tip

mongosh 固有の機能

mongosh には、キーヴォールトコレクションを操作するための次の追加メソッドが用意されています。

戻る

明示的な暗号化