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

キーとキー ボールト

項目一覧

  • Overview
  • データ暗号化キーと CMK
  • キー ローテーション
  • キーヴォールト コレクション
  • キーヴォールトコレクション名
  • 権限
  • キーヴォールト クラスター
  • キーヴォールトコレクションの更新

このガイドでは、クライアント側フィールドレベル暗号化(CSFLE)の次のコンポーネントに関する詳細を学習できます。

  • データ暗号化キー( DEK

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

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

  • キー管理システム( KMS

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

使用中の暗号化は複数レベルのキー階層を使用してデータを保護するもので、「エンベロープ暗号化」または「ラップ キー」と呼ばれます。

カスタマー マスター キー( CMK )は、 キー管理システム( KMS )キーとも呼ばれます)で、クラウド KMS などのカスタマー プロビジョニングされたキー プロバイダーで作成する最上位のキーです。 CMKはデータ暗号化キー( DEK )を暗号化し、ドキュメントのフィールドも暗号化します。 CMKにアクセスしないと、クライアント アプリケーションは関連付けられている DEK を復号化することはできません。

MongoDB は、 CMKで暗号化された DEK を BSON ドキュメントとして Key Vault コレクションに保存します。 MongoDB では、キー管理がクライアント側でカスタマーが管理するため、DEK を復号化することはできません。

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

警告

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

重要

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

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

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

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

CMKは、プロビジョニングされたキー プロバイダーで手動または自動でローテーションします。 MongoDB はこのプロセスを認識できません。 CMKをローテーションすると、MongoDB はそれを使用してすべての新しい DEK をラップします。 既存の暗号化された DEK を再ラッピング しません 。 これらは引き続き前のCMKでラップされています。

キーヴォールト内の暗号化された DEK の一部またはすべてをローテーションするには、 KeyVault.rewrapManyDataKey()メソッドを使用します。 指定された新しいCMKでキーをシームレスに再ラップし、アプリケーションを中断することなく実行されます。 DEK 自体は、新しいCMKで再ラップしても変更されません。

キーヴォールトコレクションは、暗号化された データ暗号化キー( 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 コレクションと同様に作成します。 キーヴォールト コレクションには、 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フィールドに一意のインデックスが存在しない場合は自動的に一意のインデックスを作成します。

DEKCMK 、および Key Vault コレクションがサポートされているすべてのKMSプロバイダー アーキテクチャでどのように相互作用するのかを示す図については、「 CSFLE KMS プロバイダー 」を参照してください。

キーヴォールト コレクションを保存するには、管理者以外の名前空間を使用できます。 慣例的に、このドキュメント全体の例では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を削除または更新するには、次のいずれかのメカニズムを使用します。

  • rewrapManyDataKeyメソッド

  • 標準CRUD操作

rewrapManyDataKeyメソッドの詳細については、クライアントまたはドライバーの メソッドに関するドキュメントを参照してください。

Tip

mongosh 固有の機能

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

戻る

明示的な暗号化