Docs Menu

ClientEncryption.encryption()

ClientEncryption.encrypt(keyId, value, algorithm or encOptions)

ClientEncryption.encrypt()は、指定されたkeyIdalgorithmまたは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
タイプ
説明

keyId

UUID

valueの暗号化に使用するデータ暗号化キー。

UUID は、特定のデータ暗号化のキーを識別するサブタイプ を持つBSONbinary data 4オブジェクトです。データ暗号化のキーがデータベース接続用に構成されたキーヴォールトに存在しない場合、encrypt() はエラーを返します。キーヴォールトとデータ暗号化キーの詳細については、「 キーヴォールトのコレクション 」を参照してください。

value

暗号化する値。

algorithm or encOptions

文字列またはドキュメント

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

or

encrypt()次の の値を暗号化するために、BSON types を使用することはできません。

  • minKey

  • maxKey

  • null

  • undefined

AEAD_AES_256_CBC_HMAC_SHA_512-Deterministicを使用してフィールドを暗号化する場合、 は次の をサポートしていませencrypt() んBSON types 。

  • double

  • decimal128

  • bool

  • object

  • array

次の例では、クライアント側のフィールドレベル暗号化構成にローカルで管理されている KMS を使用しています。

1
  1. mongosh を起動する

    実行:

    mongosh --nodb

    --nodb は、データベースに接続しないことを意味します。

  2. キーstringの生成

    基本64 96バイトの string を生成する:

    const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
  3. 暗号化オプション オブジェクトの作成

    クライアント側のフィールドレベル暗号化オプションオブジェクトを作成するには、前のステップのTEST_LOCAL_KEY 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
    )
2

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 を使用しています。

1
  1. mongosh を起動する

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

    mongosh --nodb
  2. キーの生成

    ローカルで管理されているキーに対してQueryable Encryptionを構成するには、base64 でエンコードされた 96 バイトのstring (改行を含まない)を生成します。

    const TEST_LOCAL_KEY = require("crypto").randomBytes(96).toString("base64")
  3. Queryable Encryption オプションの作成

    生成されたローカルキー を使用して オプションを作成します。Queryable Encryptionstring

    var autoEncryptionOpts = {
    "keyVaultNamespace" : "encryption.__dataKeys",
    "kmsProviders" : {
    "local" : {
    "key" : BinData(0, TEST_LOCAL_KEY)
    }
    }
    }
  4. 暗号化されたクライアントの作成

    データベース接続を作成するには、構成された Queryable Encryption オプションでMongo()コンストラクターを使用します。 mongodb://myMongo.example.net URI を、ターゲットクラスターの接続string URIに置き換えます。

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

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()を参照してください。