このガイドでは、アプリケーション内で キー管理システム( KMS )を使用して暗号化のキーを管理する方法を学習できます。
Overview
この手順では、 mongoshを使用して Queryable Encryption の暗号化のキーをローテーションする方法を示します。 DEK のローテーションには、新しい CMK で再度ラップすることが含まれるため、「ローテーション」と「リラップ」という用語は同じ意味で使用されることもあります。
このガイドを完了すると、キー管理システムでカスタマー マスター キー( CMK )をローテーションし、キーヴォールトコレクション内の既存の DEK を新しいCMKでリラップできるようになります。
警告
キーをローテーションする際は、削除する前に、それらが他のキーやデータの暗号化に使用されていないことを確認してください。 CMK を使用するすべての DEK を再ラップするまで、KMS で以前の CMK を有効にしておきます。 DEK を削除すると、その DEK で暗号化されたすべてのフィールドが永続的に読み取りできなくなります。 CMK を削除すると、その CMK を使用して DEK で暗号化されたすべてのフィールドが永続的に読み取りできなくなります。
関連情報
この手順に含まれる概念の詳細については、以下のトピックを参照してください。
キーとキー ボールトの詳細については、「暗号化キーとキー ボールト 」を参照してください。 サポートされているKMSプロバイダーのリストを表示するには、「 KMS プロバイダー」ページを参照してください。
サポートされているKMSプロバイダーのそれぞれを使用して、Queryable Encryption 対応のアプリケーションを設定する方法の詳細なチュートリアルについては、次のページを参照してください。
手順
キー管理システムでの CMK のローテーション
CMKをローテーションするプロセスは、 KMSプロバイダーによって異なります。 詳細については、キー プロバイダーのドキュメントを参照してください。
Amazon Web Services: Amazon Web Services KMS キーのローテーション
GCP: キーのローテーション
CMKをローテーションすると、MongoDB はそれを使用してすべての新しい DEK をラップします。 既存の DEK を再ラップするには、次の手順に進みます。
を使用してデータ暗号化キーをローテーションする KeyVault.rewrapManyDataKey()
KeyVault.rewrapManyDataKey()メソッドは複数のデータ暗号化キーを自動的に復号化し、指定されたCMKを使用して再暗号化します。 次に、Key Vault コレクション内のキーをアップデートします。
このメソッドの構文は次のとおりです。
let keyVault = db.getMongo().getKeyVault()
keyVault.rewrapManyDataKey( { "<Query filter document>" }, { provider: "<KMS provider>", masterKey: { "<dataKeyOpts Key>" : "<dataKeyOpts Value>" } })ローテーションするキーを選択するために クエリフィルター ドキュメント を指定するか、 引数を省略して Key Vault コレクション内のすべてのキーをローテーションする
クエリフィルター ドキュメントを指定しても、一致するキーがない場合、キーはローテーションされません。
KMSプロバイダーの指定
新しいCMKを使用して
masterKeyを指定するか、 引数を省略して既存のCMKを使用してキーをローテーションします
新しいCMKで再ラップしても、DEK 自体は変更されません。 キーのローテーション プロセスはシームレスであり、アプリケーションを中断しません。