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

KeyVault.rawManyDataKey()

項目一覧

  • 動作
KeyVault.rewrapManyDataKey(filter, options)

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

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

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 固有のキー

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

警告

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

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

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

重要

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

キー ローテーション 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

項目一覧