Azure에서 자동 Queryable Encryption 사용
이 페이지의 내용
개요
이 가이드에서는 Azure Key Vault를 사용하여 Queryable Encryption 지원 애플리케이션을 빌드하는 방법을 설명합니다.
이 가이드의 단계를 완료하면 다음과 같은 내용이 표시됩니다:
Azure Key Vault 인스턴스에서 호스팅되는 고객 마스터 키입니다.
고객 마스터 키를 사용하여 암호화된 문서를 삽입하는 작동하는 클라이언트 애플리케이션입니다.
시작하기 전에
이 가이드의 코드를 완료하고 실행하려면 설치 요구 사항 페이지에 표시된 대로 개발 환경을 설정해야 합니다.
팁
참조: 전체 적용
이 가이드에서 만든 애플리케이션의 전체 코드를 보려면 프로그래밍 언어에 해당하는 탭을 선택하고 제공된 링크를 따라가세요.
KMS 설정
Azure에 애플리케이션 등록
Azure 에 로그인합니다. .
Azure Active Directory에 애플리케이션 등록
Azure Active Directory에 애플리케이션을 등록하려면 Microsoft의 공식 Microsoft ID 플랫폼에 애플리케이션 등록하기 를 따르세요. 빠른 시작.
중요
자격 증명 기록
다음 자격 증명을 기록해야 합니다.
테넌트 ID
클라이언트 ID
클라이언트 비밀
이 튜토리얼의 뒷부분에서 kmsProviders
객체를 구성하는 데 필요합니다.
고객 마스터 키 생성
Azure Key Vault 및 고객 마스터 키 만들기
새 Azure Key Vault 인스턴스 및 고객 마스터 키를 만들려면 Microsoft의 공식 설정에 따라 Azure Portal을 사용하여 Azure Key Vault에서 키를 검색합니다. 빠른 시작.
중요
자격 증명 기록
다음 자격 증명을 기록해야 합니다.
키 이름
키 식별자 (이 가이드 뒷부분에서
keyVaultEndpoint
이라고 함)keyVersion
이 튜토리얼의 뒷부분에서 dataKeyOpts
객체를 구성하는 데 필요합니다.
애플리케이션 생성
데이터 암호화 키 및 암호화된 collection 만들기
키 정보 추가
고객 마스터 키를 지정하려면 다음 코드를 업데이트하세요.
팁
이 가이드 의 고객 마스터 키 생성 단계에서 고객 마스터 키의 ARN및 리전을 기록했습니다.
데이터 암호화 키 만들기
MongoDB 연결 문자열과 키 볼트 컬렉션 네임스페이스를 사용하여 클라이언트를 구성하고 데이터 암호화 키를 만듭니다.
참고
키 볼트 컬렉션 네임스페이스 권한
이 가이드의 키 볼트 컬렉션은 encryption
데이터베이스의 __keyVault
컬렉션입니다. 애플리케이션에서 MongoDB에 연결하는 데 사용하는 데이터베이스 사용자에게 encryption.__keyVault
네임스페이스에 대한 ReadWrite 권한이 있는지 확인합니다.
팁
자세히 알아보기
Azure Key Vault를 사용할 때 클라이언트 애플리케이션이 데이터 암호화 키를 생성하는 방법을 보여주는 다이어그램을 보려면 아키텍처를 참조하세요.
Azure Key Vault에서 호스팅되는 고객 마스터 키로 암호화된 데이터 암호화 키를 생성하는 옵션에 대해 자세히 알아보려면 kmsProviders 객체 및 dataKeyOpts 객체를 참조하세요.
팁
참조: 코드 완성
암호화된 읽기 및 쓰기를 위한 MongoClient 구성
자동 암호화 공유 라이브러리의 위치 지정
참고
자동 암호화 옵션
자동 암호화 옵션은 자동 암호화 공유 라이브러리에 구성 정보를 제공하여 암호화된 필드에 액세스할 때 애플리케이션의 동작을 수정합니다.
자동 암호화 공유 라이브러리에 대한 자세한 내용은 Queryable Encryption을 위한 자동 암호화 공유 라이브러리 페이지에서 확인하세요.
암호화된 필드가 있는 문서 삽입하기
Queryable Encryption이 활성화된 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에 반드시 필요합니다. 이 필드의 내용은 수정하지 마세요.
팁
참조: 코드 완성
암호화된 문서 조회
이 가이드의 암호화된 필드가 있는 문서 삽입 단계에서 삽입한 암호화된 문서를 검색합니다.
Queryable Encryption의 기능을 보여주기 위해 다음 코드 스니펫은 자동 Queryable Encryption으로 구성된 클라이언트와 자동 Queryable Encryption이 구성되지 않은 클라이언트를 사용하여 문서를 쿼리합니다.
이전 코드 스니펫의 출력은 다음과 같아야 합니다.
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) ] }
팁
참조: 코드 완성
자세히 알아보기
Queryable Encryption의 작동 방식을 알아보려면 기본 사항을 참조하세요.
이 가이드에 언급된 주제에 대해 자세히 알아보려면 다음 링크를 참조하세요: