ClientEncryption.encrypt()
ClientEncryption.encrypt(keyId, value, algorithm or encOptions)
ClientEncryption.encrypt()
은 지정된keyId
와algorithm
또는encOptions
로 지정된 알고리즘을 사용하여value
를 암호화합니다.encrypt()
는 필드 값의 명시적(수동) 암호화를 지원합니다.반환합니다: 하위 유형이 6 인 binary data
객체 .
구문
clientEncryption = db.getMongo().getClientEncryption() clientEncryption.encrypt( keyId, value, algorithm or encOptions, )
Parameter | 유형 | 설명 |
---|---|---|
keyId | UUID |
UUID 는 특정 데이터 암호화 키를 식별하는 하위 유형 |
value | 암호화할 값입니다. | |
algorithm or encOptions | 문자열 또는 문서 |
|
행동
암호화된 데이터베이스 연결 만들기
mongosh
클라이언트 사이드 필드 수준 및 Queryable Encryption 메서드를 사용하려면 클라이언트 사이드 암호화를 위해 구성된 데이터베이스 연결이 필요합니다. 클라이언트 사이드 필드 수준 암호화가 활성화된 상태에서 현재 데이터베이스 연결이 시작되지 않은 경우 다음 중 하나를 수행합니다.
mongosh
에서Mongo()
생성자를 사용하여 필요한 클라이언트 사이드 필드 레벨 암호화 옵션과 연결을 설정합니다.Mongo()
메서드는 고객 마스터 키(CMK) 관리를 위해 다음과 같은 키 관리 서비스(KMS) 제공자를 지원합니다.
or
mongosh
명령줄 옵션을 사용하여 필요한 옵션과의 연결을 설정합니다. 명령줄 옵션은 CMK 관리를 위한 Amazon Web Services KMS 제공자만 지원합니다.
지원되지 않는 BSON type
encrypt()
를 사용하여 다음 BSON types 의 값을 암호화할 수 없습니다.
minKey
maxKey
null
undefined
AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic
를 사용하여 필드를 암호화하는 경우 encrypt()
는 다음 BSON types를 지원하지 않습니다 .
double
decimal128
bool
object
array
예제
Client-Side Field Level Encryption
다음 예에서는 클라이언트 사이드 필드 수준 암호화 구성을 위해 로컬로 managed KMS를 사용합니다.
로컬로 관리되는 키에 클라이언트 사이드 필드 레벨 암호화를 구성하는 방법:
줄 바꿈 없이 기본64-인코딩된 96-바이트 문자열을 생성합니다.
키를 로드하려면
mongosh
를 사용하세요.
export TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
생성된 로컬 키 문자열을 사용하여 클라이언트 사이드 필드 수준 암호화 객체를 생성합니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__dataKeys", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } }
Mongo()
생성자를 클라이언트 사이드 필드 수준 암호화 옵션과 함께 사용하여 데이터베이스 연결을 생성합니다. mongodb://myMongo.example.net
URI를 대상 cluster의 연결 문자열 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를 사용합니다.
로컬로 관리되는 키에 대해 Queryable Encryption을 구성하려면 줄 바꿈 없이 기본64인코딩된 96바이트 문자열을 지정해야 합니다. 다음 작업은 명시된 요구 사항을 충족하는 키를 생성하여 mongosh
에 로드합니다.
TEST_LOCAL_KEY=$(echo "$(head -c 96 /dev/urandom | base64 | tr -d '\n')") mongosh --nodb
생성된 로컬 키 문자열을 사용하여 클라이언트 사이드 필드 수준 암호화 객체를 생성합니다.
var autoEncryptionOpts = { "keyVaultNamespace" : "encryption.__keyVault", "kmsProviders" : { "local" : { "key" : BinData(0, process.env["TEST_LOCAL_KEY"]) } } }
Mongo()
생성자를 사용하여 Queryable Encryption 옵션이 있는 데이터베이스 연결을 만듭니다. mongodb://myMongo.example.net
URI를 대상 cluster의 연결 문자열 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)