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

KeyVault.rawManyDataKey()

項目一覧

  • 互換性
  • 構文
  • 動作
KeyVault.rewrapManyDataKey(filter, options)

複数のデータ暗号化キー(DEK)を復号化し、新しい CMK(Customer Master Key)で再暗号化します。 この方法を使用して、DEK を暗号化する CMK をローテーションします。 CMK と DEK の詳細については、 暗号化キーとキーヴォールト を参照してください。

masterKeyパラメータを使用して CMK を指定します。 masterKey引数を含めない場合、 メソッドは各 DEK のメタデータで参照される CMK を使用して各 DEK を復号化および暗号化します。 DEK のメタデータの詳細については、「復号に使用されるメタデータ 」を参照してください。

次の値を返します。影響を受けたデータ キーの数を報告するBulkWriteResultオブジェクト。

警告

キーヴォールトコレクションのバックアップ

データ暗号化キーをローテーションする前に、キーヴォールト コレクションのバックアップを作成していることを確認してください。 If you lose access to your Data Encryption Keys, you will lose all your encrypted data.

コレクションのバックアップを作成する方法については、「 MongoDB ツールを使用した自己管理型配置のバックアップと復元 」を参照してください。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

KeyVault.rewrapManyDataKey の構文は次のとおりです。

let keyVault = db.getMongo().getKeyVault()
keyVault.rewrapManyDataKey(
<filter>,
<options>
)
Parameter
タイプ
説明

filter

キーヴォールト コレクションの クエリフィルター

options

ドキュメント

このドキュメントには 2 つのフィールドがあります。

  • provider: KMSプロバイダー( Amazon Web Services KMS 、 Azure Key Vault 、 GCP KMS 、ローカルプロバイダー、または KMIP)

  • masterKey:新しいデータキーの暗号化に使用される KMS 固有のキー

重要

キー ローテーション サポート

キー ローテーション API のドライバーの依存関係を表示するには、「互換性 」を参照してください。

この操作はアトミックではないため、他のキー管理操作と並行して実行しないでください。

mongosh クライアント側のフィールド レベル暗号化メソッドでは、クライアント側のフィールド レベル暗号化が有効になっているデータベース接続が必要です。現在のデータベース接続がクライアント側のフィールド レベル暗号化を有効にして開始されなかった場合、次のいずれかが発生します。

これらの例により、クライアント側のフィールド レベルの暗号化を迅速に評価できます。 サポートされている各 KMSプロバイダーの使用例については、「暗号化キー管理 」を参照してください。

1

mongoshクライアントを起動します。

mongosh --nodb
2

ローカルで管理されているキーのクライアント側フィールドレベル暗号化を構成するには、改行を含まない base64 でエンコードされた 96 バイトのstringを生成します。

const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
3

生成されたローカルキーstringを使用して、クライアント側のフィールドレベル暗号化オプションを作成します。

var autoEncryptionOpts = {
"keyVaultNamespace" : "encryption.__dataKeys",
"kmsProviders" : {
"local" : {
"key" : BinData(0, TEST_LOCAL_KEY)
}
}
}
4

データベース接続を作成するには、クライアント側のフィールドレベル暗号化オプションが構成されたMongo()コンストラクターを使用します。 mongodb://myMongo.example.net URI を、ターゲットクラスターの接続string URIに置き換えます。

encryptedClient = Mongo(
"mongodb://myMongo.example.net:27017/?replSetName=myMongo",
autoEncryptionOpts
)

KeyVaultオブジェクトを取得し、 KeyVault.rewrapManyDataKey()メソッドを使用して既存のキーを新しいmasterKeyに再ラップします。 新しいmasterKeyが指定されていない場合、各データキーはそれぞれの現在のmasterKeyを保持します。

次の例は、各データキーをそれぞれの現在のmasterKeyで再ラップする方法を示しています。

let keyVault = mongo.getKeyVault()
keyVault.rewrapManyDataKey()

次の例えは、各データキーを新しいmasterKeyで再ラップする方法を示しています。

let keyVault = mongo.getKeyVault()
keyVault.rewrapManyDataKey({}, {
provider: 'aws',
masterKey: {
region: 'us-east-2',
key: 'arn:aws:kms:us-east-2:...'
}
})

次の例では、過去 30 日間リラップされていないデータキーを再ラップする方法を示しています。

let keyVault = mongo.getKeyVault()
const thirtyDaysAgo = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000);
keyVault.rewrapManyDataKey({ updateDate: { $lt: thirtyDaysAgo } });

KeyVault.rewrapManyDataKey()は、影響を受けたデータキーの数を示すBulkWriteResultオブジェクトを返します。

{
bulkWriteResult: BulkWriteResult {
result: {
ok: 1,
writeErrors: [],
writeConcernErrors: [],
insertedIds: [],
nInserted: 0,
nUpserted: 0,
nMatched: 3,
nModified: 3,
nRemoved: 0,
upserted: [],
opTime: { ts: Timestamp({ t: 1655840760, i: 3 }), t: 23 }
}
}
}

戻る

KeyVault.removeKeyAltName