문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
KMIP로 자동 Queryable Encryption 사용
이 페이지의 내용
개요
이 가이드에서는 Key Management Interoperability Protocol (KMIP) 호환 키 제공자를 사용하여 Queryable Encryption(QE) 지원 애플리케이션을 빌드하는 방법을 설명합니다.
이 가이드의 단계를 완료하면 다음과 같은 내용이 표시됩니다:
KMIP호환 키 제공자에서 호스팅되는 고객 마스터 키입니다.
고객 마스터 키를 사용하여 암호화된 문서를 삽입하는 작동하는 클라이언트 애플리케이션입니다.
시작하기 전에
이 가이드의 코드를 완료하고 실행하려면 설치 요구 사항 페이지에 표시된 대로 개발 환경을 설정해야 합니다.
이 가이드 전체에서 코드 예제에는 placeholder 텍스트가 사용됩니다. 예제를 실행하기 전에 placeholder를 자신의 값으로 대체합니다.
예를 들면 다음과 같습니다.
dek_id := "<Your Base64 DEK ID>"
따옴표 사이의 모든 내용을 DEK ID로 바꿉니다.
dek_id := "abc123"
페이지 오른쪽의 Select your language 드롭다운 메뉴에서 코드 예제를 보려는 프로그래밍 언어를 선택합니다.
팁
참조: 전체 적용
이 튜토리얼의 실행 가능한 전체 애플리케이션 코드를 보려면 다음 링크로 이동하십시오.
KMS 설정
애플리케이션 생성
애플리케이션에서 사용 중인 MongoDB 드라이버에 해당하는 탭을 선택하면 관련 코드 샘플을 볼 수 있습니다.
MongoClient 구성
collection을 위한 암호화된 필드 맵 만들기
팁
스키마에 대한 추가 참고 자료
이 단계에서 사용하는 스키마를 구성하는 방법에 대한 자세한 설명을 보려면 Encryption Schemas 가이드를 참조하세요.
암호화 스키마에 대해 지원되는 모든 암호화 규칙의 목록을 보려면 CSFLE 암호화 스키마 가이드를 참조하세요.
암호화된 필드가 있는 문서 삽입하기
QE지원 MongoClient
인스턴스에서 다음 코드 스니펫을 사용하여 암호화된 문서를 medicalRecords.patients
네임스페이스에 삽입하고,
문서를 삽입하면 Queryable Encryption 지원 클라이언트가 다음과 같이 문서의 필드를 암호화합니다.
{ "_id": { "$oid": "<_id value>" }, "firstName": "Jon", "lastName": "Doe", "patientId": { "$binary": { "base64": "<ciphertext>", "subType": "06" } }, "address": "157 Electric Ave.", "patientRecord": { "ssn": { "$binary": { "base64": "<ciphertext>", "subType": "06" } }, "billing": { "$binary": { "base64": "<ciphertext>", "subType": "06" } } }, "medications": { "$binary": { "base64": "<ciphertext>", "subType": "06" } }, "__safeContent__": [ { "$binary": { "base64": "<ciphertext>", "subType": "00" } }, { "$binary": { "base64": "<ciphertext>", "subType": "00" } } ] }
경고
__safeContent__ 필드 수정 금지
__safeContent__
필드는 Queryable Encryption에 필수적입니다. 이 필드의 내용은 수정하지 마세요.
팁
참조: 코드 완성
암호화된 문서 조회
이 가이드의 암호화된 필드가 있는 문서 삽입 단계에서 삽입한 암호화된 문서를 검색합니다.
QE 의 기능 을 보여 주기 위해 다음 코드 스니펫 은 자동 QE 로 구성된 클라이언트 와 자동 QE 로 구성 되지 않은 클라이언트 가 있는 문서 를 쿼리 합니다 .
이전 코드 스니펫의 출력은 다음과 같아야 합니다.
Finding a document with regular (non-encrypted) client. { _id: new ObjectId("628eabeb37590e84ea742665"), firstName: 'Jon', lastName: 'Doe', patientId: new Binary(Buffer.from("0798810acc0f4f46c9a76883cee80fca12102e9ddcbcdae46a821fa108a8155a850f2d0919475b6531ada68973d436a199b537a05a98a708c36d2bfec4979d59cbe66878865ce19e392d3e4789d309bdacc336e32efcc851806ae0a41b355288c10d01e39147e1c40d919c41913a0c9d2d3fad0d0d1d2873c4fc82c6c22f27b517df5f3131b331b96ed16a7c5cf89e09082a2d898c2dcd73da91d08760ba74a70077b2d0fdbbe1eea75655a19fcc397812325ad40b102cbd16b8d36b22e11e3f93404f24a8ff68cfdec3c22b0e787cb30078a5227b2a", "hex"), 6), address: '157 Electric Ave.', patientRecord: { ssn: new Binary(Buffer.from("07e8b69630c32f4a00a542af768f8abcf50223edd812ff20b0ecb046ee1a9f5a0eef8d85d99cd26076411129942752516ee605c55aadce73f3d44d81ea6ddbbb8134b108a9deb40d8cab9cb4f08ef210ab0c9d2ea4347f9d235b861baf29751e60abcf059eb5c120305bd5ac05a4e07ac8ccfa6d37283f4cdbfeb7a8accb65b71857d486b5cf55e354d6a95e287d9e2dd65f3f9d9c4c9d0bdb1f26c4bd549d7be77db81796be293e08b2223bac67b212423c4e06568578b5bd7a3c33cedc1b291bcda0b27e005144d344563711a489f24b8e9b65bbb721d3a0e9d9b227a0cec0cbad", "hex"), 6), billing: new Binary(Buffer.from("06808ae69d4caa49cf90bb688f386f097f03f870a7b8fcebb1980c9ee5488b1f0f68558fc2163adcd92d00ea5f349f56ed34e7b391f54c48ed2760b4bde73022fc818dc7486a4e046b92ce9c82e00333c7779d9d6bb476713a20632b593b7de54812662cfc4d174d05451d3f4195514e12edba", "hex"), 6) }, medications: new Binary(Buffer.from("06665ec15d38254dc4aa16da856789d33404f27bfea53e0d2fa4deaff166989ab33f469644d89c29112d33b41dbe54ec2d89c43f3de52cdc5d454e8694046216f533614fa7b42b7c5406d6518f7ed8f9e3ce52fda6c8b2146d0f8cc51e21a3467183697e1735a9f60c18e173c1916101", "hex"), 6), __safeContent__: [ new Binary(Buffer.from("3044b134ad0f7c8a90dab1e05bb8b296a8ede540796bd7403ab47693cdba1b26", "hex"), 0), new Binary(Buffer.from("a22ddf9a5657cdd56bef72febbba44371899e6486962a1c07d682082c4e65712", "hex"), 0) ] } Finding a document with encrypted client, searching on an encrypted field { _id: new ObjectId("628eaca1dcf9b63e2f43162d"), firstName: 'Jon', lastName: 'Doe', patientId: 12345678, address: '157 Electric Ave.', patientRecord: { ssn: '987-65-4320', billing: { type: 'Visa', number: '4111111111111111' } }, medications: [ 'Atorvastatin', 'Levothyroxine' ], __safeContent__: [ new Binary(Buffer.from("fbdc6cfe3b4659693650bfc60baced27dcb42b793efe09da0ded54d60a9d5a1f", "hex"), 0), new Binary(Buffer.from("0f92ff92bf904a858ef6fd5b1e508187f523e791f51d8b64596461b38ebb1791", "hex"), 0) ] }
팁
참조: 코드 완성
자세히 알아보기
이 가이드에 언급된 주제에 대해 자세히 알아보려면 다음 링크를 참조하세요: