Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / / /

암호화된 컬렉션 관리

이 페이지의 내용

  • 개요
  • 메타데이터 컬렉션
  • 저장 공간 비용
  • 쓰기 비용
  • 삽입 작업
  • 업데이트 작업
  • 삭제 작업
  • 인덱스 압축

이 가이드에서는 암호화된 collection을 managed하는 방법, Queryable Encryption의 저장 및 쓰기 비용에 대해 알아볼 수 있습니다.

Queryable Encryption은 무작위 암호화를 사용하여 문서의 민감한 필드를 암호화하는 동시에 암호화된 필드를 쿼리할 수 있는 기능을 도입합니다.

Queryable Encryption을 사용하면 지정된 일반 텍스트 값이 항상 다른 암호 텍스트로 암호화되면서 쿼리가 가능해집니다. 이 기능을 활성화하기 위해 Queryable Encryption은 네 가지 데이터 구조를 사용합니다.

  • 세 가지 메타데이터 컬렉션

  • 암호화된 collection에 있는 모든 문서의 필드입니다. __safeContent__

중요

이러한 데이터 구조를 수정하거나 삭제하지 않는 것이 중요하며, 그렇지 않으면 쿼리 결과 가 부정확해질 수 있습니다 .

Queryable Encryption을 사용하여 암호화된 collection을 생성하면 MongoDB는 세 개의 메타데이터 collection을 생성합니다.

  • enxcol_.<collectionName>.esc~로 지칭 ESC

  • enxcol_.<collectionName>.ecc~로 지칭 ECC

  • enxcol_.<collectionName>.ecoc~로 지칭 ECOC

예시

" 환자 " 라는 컬렉션을 생성하는 경우 MongoDB는 다음과 같은 메타데이터 컬렉션을 생성합니다.

  • enxcol_.patients.esc

  • enxcol_.patients.ecc

  • enxcol_.patients.ecoc

쿼리하려는 암호화된 필드가 있는 문서를 삽입하면 MongoDB는 쿼리할 수 있는 인덱스를 유지하기 위해 메타데이터 컬렉션을 업데이트합니다. MongoDB는 이를 "인덱싱된 필드"라고 합니다. 이는 저장 및 쓰기 속도를 희생합니다.

저장 및 쓰기 비용은 문서당 인덱싱된 필드 수에 따라 증가합니다.

중요

테크니컬 프리뷰

테크니컬 프리뷰에서 MongoDB의 지침은 Queryable Encryption collection 및 관련 메타데이터 컬렉션에 필요한 스토리지 요구 사항의 2~3배를 예상하는 것입니다. 예를 들어, 1GB collection의 경우 관련 메타데이터 컬렉션에 2~3GB의 저장 용량이 필요할 수 있습니다.

이 지침은 향후 릴리스에서 조정될 예정입니다.

문서를 삽입할 때 인덱싱된 각 필드에는 메타데이터 컬렉션에 대한 두 번의 쓰기가 필요합니다.

  • 1개의 쓰기 대상 ESC

  • 1개의 쓰기 대상 ECOC

예시

두 개의 인덱스 필드가 있는 문서를 삽입하려면 다음이 필요합니다.

  • 암호화된 collection에 한 번 쓰기.

  • 메타데이터 컬렉션에 네 번 쓰기.

문서를 업데이트할 때 인덱싱된 각 필드에는 메타데이터 컬렉션에 네 번의 쓰기가 필요합니다.

  • 1개의 쓰기 대상 ESC

  • 1개의 쓰기 대상 ECC

  • 다음에 두 번 쓰기 ECOC

예시

두 개의 인덱스 필드가 있는 문서를 업데이트하려면 다음이 필요합니다.

  • 암호화된 collection에 한 번 쓰기.

  • 메타데이터 컬렉션에 대한 쓰기 8건입니다.

문서를 삭제할 때 인덱싱된 각 필드에는 메타데이터 컬렉션에 대한 두 번의 쓰기가 필요합니다.

  • 1개의 쓰기 대상 ECC

  • 1개의 쓰기 대상 ECOC

예시

두 개의 인덱스 필드가 있는 문서를 삭제하려면 다음이 필요합니다.

  • 암호화된 collection에 한 번 쓰기.

  • 메타데이터 컬렉션에 네 번 쓰기.

중요

테크니컬 프리뷰

기술 미리 보기 중에 인덱스 압축을 실행해야 합니다. MongoDB는 향후 릴리스에서 인덱스 압축을 자동으로 실행할 계획입니다.

문서를 삽입, 업데이트 및 삭제하면 메타데이터 컬렉션 변경되고 증가합니다. 인덱스 압축은 메타데이터 컬렉션을 정리하고 크기를 줄이는 프로세스입니다.

ECOC 크기가 1GB를 초과하는 경우 인덱스 압축을 실행해야 합니다.

컬렉션의 크기는 mongosh 를 사용하고 db.collection.totalSize() 명령을 실행하여 확인할 수 있습니다.

예시

이 예제에서 암호화된 collection의 이름은 " 환자 " 입니다.

db.enxcol_.patients.ecoc.totalSize()
1407960328

중요

인덱스 압축을 실행하려면 Queryable Encryption을 위해 클라이언트를 구성해야 합니다.

인덱스 압축을 실행하려면 mongosh 를 사용하고 db.collection.compactStructuredEncryptionData() 명령을 실행하여 메타데이터 컬렉션의 크기를 줄입니다.

예시

const eDB = "encryption"
const eKV = "__keyVault"
const secretDB = "records"
const secretCollection = "patients"
const localKey = fs.readFileSync("master-key.txt")
const localKeyProvider = { key: localKey }
const queryableEncryptionOpts = {
kmsProviders: { local: localKeyProvider },
keyVaultNamespace: `${eDB}.${eKV}`,
}
const encryptedClient = Mongo("localhost:27017", queryableEncryptionOpts)
const encryptedDB = encryptedClient.getDB(secretDB)
const encryptedCollection = encryptedDB.getCollection(secretCollection)
encryptedCollection.compactStructuredEncryptionData()
{
"stats": {
...
},
"ok": 1,
...
}

돌아가기

필드 & 쿼리