ClientEncryption.encryption()
ClientEncryption.encrypt(keyId, value, algorithm or encOptions)
ClientEncryption.encrypt()
は、指定されたkeyId
とalgorithm
またはencOptions
で指定されたアルゴリズムを使用してvalue
を暗号化します。encrypt()
は、フィールド値の明示的な(手動)暗号化をサポートしています。次の値を返します。 サブタイプ6 を持つ binary data
オブジェクト 。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
clientEncryption = db.getMongo().getClientEncryption() clientEncryption.encrypt( keyId, value, algorithm or encOptions, )
Parameter | タイプ | 説明 |
---|---|---|
|
|
UUID は、特定のデータ暗号化のキーを識別するサブタイプ を持つBSON |
| 暗号化する値。 | |
| 文字列またはドキュメント |
|
動作
mongosh
クライアント側のフィールド レベルとQueryable Encryptionメソッドでは、クライアント側の暗号化用に構成されたデータベース接続が必要です。 現在のデータベース接続がクライアント側のフィールド レベル暗号化を有効にして開始されなかった場合、次のいずれかが発生します。
必要なクライアント側フィールドレベル暗号化オプションとの接続を確立するには、
mongosh
からMongo()
コンストラクターを使用します。Mongo()
メソッドは、CMK(Customer Master Key)管理用に次のKMS ( KMS )プロバイダーをサポートしています。
or
必要なオプションとの接続を確立するには、
mongosh
コマンドライン オプションを使用します。 コマンドライン オプションは、CMK 管理用のAmazon Web Services KMSプロバイダーのみをサポートしています。
サポートされていない BSON types
encrypt()
次の の値を暗号化するために、BSON types を使用することはできません。
minKey
maxKey
null
undefined
AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
を使用してフィールドを暗号化する場合、 は次の をサポートしていませencrypt()
んBSON types 。
double
decimal128
bool
object
array
例
クライアントサイドのフィールド レベル暗号化
次の例では、クライアント側のフィールドレベル暗号化構成にローカルで管理されている KMS を使用しています。
暗号化された接続の作成
mongosh を起動する
実行:
mongosh --nodb --nodb
は、データベースに接続しないことを意味します。キーstringの生成
基本64 96バイトの string を生成する:
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") 暗号化オプション オブジェクトの作成
クライアント側のフィールドレベル暗号化オプションオブジェクトを作成するには、前のステップの
TEST_LOCAL_KEY
string を使用します。var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } 暗号化されたクライアント オブジェクトの作成
暗号化されたクライアントオブジェクトを作成するには、
Mongo()
コンストラクターを使用します。mongodb://myMongo.example.net
URI を、ターゲットクラスターの接続string URIに置き換えます。 (例: )。encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
データの暗号化
ClientEncryption
オブジェクトを取得し、 ClientEncryption.encrypt()
メソッドを使用して、特定のデータ暗号化キーUUID
と暗号化アルゴリズムを使用して 値を暗号化します。
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", "AEAD_AES_256_CBC_HMAC_SHA_512-Random" )
algorithm
フィールドを持つドキュメントを使用してアルゴリズムを指定することもできます。
clientEncryption = encryptedClient.getClientEncryption(); clientEncryption.encrypt( UUID("64e2d87d-f168-493c-bbdf-a394535a2cb9"), "123-45-6789", { algorithm: "AEAD_AES_256_CBC_HMAC_SHA_512-Random" } )
結果の例
成功した場合、 encrypt()
は暗号化された値を返します。
BinData(6,"AmTi2H3xaEk8u9+jlFNaLLkC3Q/+kmwDbbWrq+h9nuv9W+u7A5a0UnpULBNZH+Q21fAztPpU09wpKPrju9dKfpN1Afpj1/ZhFcH6LYZOWSBBOAuUNjPLxMNSYOOuITuuYWo=")
クライアント側のフィールドレベル暗号化を有効にして MongoDB 接続を開始する方法に関する詳細なドキュメントについては、 Mongo()
を参照してください。
Queryable Encryption
次の例では、Queryable Encryption 構成にローカルで管理されている KMS を使用しています。
暗号化された接続の作成
mongosh を起動する
mongosh
クライアントを起動します。mongosh --nodb キーの生成
ローカルで管理されているキーに対してQueryable Encryptionを構成するには、base64 でエンコードされた 96 バイトのstring (改行を含まない)を生成します。
const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64") Queryable Encryption オプションの作成
生成されたローカルキー を使用して オプションを作成します。Queryable Encryptionstring
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, TEST_LOCAL_KEY) } } } 暗号化されたクライアントの作成
データベース接続を作成するには、構成された Queryable Encryption オプションで
Mongo()
コンストラクターを使用します。mongodb://myMongo.example.net
URI を、ターゲットクラスターの接続string URIに置き換えます。encryptedClient = Mongo( "mongodb://myMongo.example.net:27017/?replSetName=myMongo", autoEncryptionOpts )
データの暗号化
ClientEncryption
オブジェクトを取得し、 ClientEncryption.encrypt()
メソッドを使用して、特定のデータ暗号化キーUUID
と暗号化アルゴリズムを使用して 値を暗号化します。
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", "Unindexed" )
フィールドを含むドキュメントを使用してアルゴリズムを指定することもできます。
algorithm
queryType
contentionFactor
const eDB = "encrypted" const eKV = "__keyVault" const clientEncryption = encryptedClient.getClientEncryption(); const keyVaultClient = Mongo().getDB(eDB).getCollection(eKV) const dek = keyVaultClient.findOne({ keyAltNames: "dataKey1" }) clientEncryption.encrypt( dek._id, "123-45-6789", { algorithm: "Indexed", queryType: "equality", contentionFactor: 8 } )
結果の例
成功した場合、 encrypt()
は暗号化された値を返します。
Binary(Buffer.from("05b100000005640020000000005ab3581a43e39a8e855b1ac87013e841735c09d19ae86535eea718dd56122ba50573002000000000703d2cba9832d90436c6c92eb232aa5b968cdcd7a3138570bc87ef0a9eb3a0e905630020000000009cb61df010b1bb54670a5ad979f25f4c48889059dfd8920782cf03dd27d1a50b05650020000000003f5acea703ea357d3eea4c6a5b19139a580089341424a247839fd4d5cf0d312a12636d00040000000000000000", "hex"), 6)
詳細
クライアント側のフィールドレベル暗号化を有効にして MongoDB 接続を開始する方法に関する詳細なドキュメントについては、 Mongo()
を参照してください。