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メソッドでは、クライアント側の暗号化用に構成されたデータベース接続が必要です。 現在のデータベース接続がクライアント側のフィールド レベル暗号化を有効にして開始されなかった場合、次のいずれかが発生します。
Mongo()
必要なクライアント側のフィールドレベル暗号化オプションとの接続を確立するには、mongosh
から コンストラクターを使用します。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 を使用しています。
ローカルで管理されているキーに対してクライアント側のフィールドレベル暗号化を構成するには、次の手順に従います。
基本的な64でエンコードされた96バイトの string を生成し、改行を含まない
キーを読み込むには、
mongosh
を使用します。
export TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
生成されたローカルキーstringを使用して、クライアント側のフィールドレベル暗号化オブジェクトを作成します。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["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
次の例では、KMS Queryable Encryption構成にローカルで管理されている を使用しています。
ローカルで管理されているキーにQueryable Encryptionを構成するには、base64 でエンコードされた 96 バイトのstring (改行を含まない)を指定する必要があります。 次の操作では、前述の要件を満たすキーを生成し、それをmongosh
にロードします。
TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
生成されたローカルキーstringを使用して、クライアント側のフィールドレベル暗号化オブジェクトを作成します。
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__keyVault", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } }
Mongo()
コンストラクターを使用して、 Queryable Encryptionオプションを持つデータベース接続を作成します。 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: 4 } )
成功した場合、 encrypt()
は暗号化された 値を返します。
Binary(Buffer.from("05b100000005640020000000005ab3581a43e39a8e855b1ac87013e841735c09d19ae86535eea718dd56122ba50573002000000000703d2cba9832d90436c6c92eb232aa5b968cdcd7a3138570bc87ef0a9eb3a0e905630020000000009cb61df010b1bb54670a5ad979f25f4c48889059dfd8920782cf03dd27d1a50b05650020000000003f5acea703ea357d3eea4c6a5b19139a580089341424a247839fd4d5cf0d312a12636d00040000000000000000", "hex"), 6)