暗号化のキーのローテーションと再ラッピング
このガイドでは、アプリケーション内でキー管理システム( KMS )を使用して暗号化のキーを管理する方法を学習できます。
Overview
この手順では、 mongosh
を使用して Queryable Encryption の暗号化のキーをローテーションする方法を示します。 DEK のローテーションには、新しい CMK で再度ラップすることが含まれるため、「ローテーション」と「リラップ」という用語は同じ意味で使用されることもあります。
このガイドを完了すると、キー管理システムでカスタマー マスター キー( CMK )をローテーションし、キーヴォールトコレクション内の既存の DEK を新しいCMKでリラップできるようになります。
警告
キーをローテーションする際は、削除する前に、キーやデータの暗号化に使用されていないことを確認してください。 DEKを削除すると、そのDEKで暗号化されたすべてのフィールドが永続的に読み取りできなくなります。 CMK を削除すると、その CMK を使用して DEK で暗号化されたすべてのフィールドが永続的に読み取りできなくなります。
関連情報
この手順に含まれる概念の詳細については、以下のトピックを参照してください。
キーとキーヴォールトの詳細については、「 暗号化キーとキーヴォールト 」を参照してください。 サポートされているKMSプロバイダーのリストを表示するには、「 KMS プロバイダー」ページを参照してください。
サポートされている各KMSプロバイダーを使用して、Queryable Encryption 対応アプリケーションを設定する方法の詳細なチュートリアルについては、「概要: Queryable Encryption の有効化 」を参照してください。
手順
キー管理システムでの CMK のローテーション
CMKをローテーションするプロセスは、 KMSプロバイダーによって異なります。 詳細については、キー プロバイダーのドキュメントを参照してください。
Amazon Web Services: キーのローテーションAmazon Web ServicesKMS
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 自体は変更されません。 キーのローテーション プロセスはシームレスであり、アプリケーションを中断しません。