문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

KMIP로 자동 클라이언트 측 필드 수준 암호화 사용

이 페이지의 내용

  • 개요
  • 시작하기 전에
  • KMS 설정
  • KMIP 호환 키 제공자 구성
  • 인증서 지정
  • 애플리케이션 생성
  • 키 볼트 collection에 고유 인덱스 만들기
  • 데이터 암호화 키 생성
  • MongoClient 구성
  • 암호화된 필드가 있는 문서 삽입하기
  • 암호화된 필드로 문서 검색하기
  • 자세히 알아보기

이 가이드에서는 Key Management Interoperability Protocol (KMIP) 호환 키 제공자를 사용하여 클라이언트 측 Field 레벨 암호화 (CSFLE) 지원 애플리케이션을 빌드하는 방법을 설명합니다.

이 가이드의 단계를 완료하면 다음과 같은 내용이 표시됩니다:

  • KMIP호환 키 제공자에서 호스팅되는 고객 마스터 키입니다.

  • 작동하는 클라이언트 애플리케이션으로 고객 마스터 키를 사용하여 암호화된 필드가 있는 문서를 삽입합니다.

이 가이드의 코드를 완료하고 실행하려면 설치 요구 사항 페이지에 표시된 대로 개발 환경을 설정해야 합니다.

이 가이드 전체에서 코드 예제에는 placeholder 텍스트가 사용됩니다. 예제를 실행하기 전에 placeholder를 자신의 값으로 대체합니다.

예를 들면 다음과 같습니다.

dek_id := "<Your Base64 DEK ID>"

따옴표 사이의 모든 내용을 DEK ID로 바꿉니다.

dek_id := "abc123"

페이지 오른쪽의 Select your language 드롭다운 메뉴에서 코드 예제를 보려는 프로그래밍 언어를 선택합니다.

참조: 전체 적용

이 튜토리얼의 실행 가능한 전체 애플리케이션 코드를 보려면 다음 링크로 이동하십시오.

참고

mongod 시작 시 KMIP 구성을 읽습니다. 기본적으로 서버는 KMIP 프로토콜 버전 1.2를 사용합니다.

버전 1.0 또는 1.1 KMIP 서버에 연결하려면 useLegacyProtocol 설정을 사용합니다.

1

MongoDB 드라이버 클라이언트를 KMIP호환 키 제공자에 연결하려면 클라이언트의 TLS 인증서를 허용하도록 KMIP호환 키 제공자를 구성해야 합니다.

클라이언트 인증서를 수락하는 방법에 대한 자세한 내용은 KMIP호환 키 제공자의 설명서를 참조하세요.

2

클라이언트는 TLS를 통해 KMIP호환 키 제공자에 연결하고 KMIP호환 키 제공자가 수락하는 클라이언트 인증서를 제시해야 합니다.

애플리케이션에서 사용 중인 MongoDB 드라이버에 해당하는 탭을 선택하면 관련 코드 샘플을 볼 수 있습니다.

1

encryption.__keyVault 네임스페이스의 keyAltNames 필드에 고유 인덱스를 만듭니다.

선호하는 MongoDB 드라이버에 해당하는 탭을 선택합니다:

2
1

KMIP호환 키 제공자의 URI 엔드포인트를 지정합니다.

2

다음 코드는 KMIP호환 키 제공자가 고객 마스터 키를 자동으로 생성하도록 요청합니다.

3

이 튜토리얼의 1단계 에서 선언된 변수를 사용하여 데이터 암호화 키를 생성합니다.

참조: 코드 완성

3

이전 단계에서 생성된 파일과 별도의 파일에서 이 튜토리얼의 나머지 단계를 따르세요.

1

키 볼트 collection 네임스페이스로 encryption.__keyVault 을 지정합니다.

2

kmsProviders 객체에 kmip 을 지정하고 KMIP호환 키 제공자의 URI 엔드포인트를 입력합니다.

3

클라이언트 애플리케이션이 문서 필드를 암호화하는 방법을 지정하는 암호화 스키마를 생성합니다.

데이터 암호화 키 Base64 ID 추가하기

기본64 DEK ID를 포함하도록 다음 코드를 업데이트해야 합니다. 이 가이드의 데이터 암호화 키 생성 단계에서 이 값을 받았습니다.

스키마에 대한 추가 참고 자료

이 단계에서 사용하는 스키마를 구성하는 방법에 대한 자세한 설명을 보려면 Encryption Schemas 가이드를 참조하세요.

암호화 스키마에 대해 지원되는 모든 암호화 규칙의 목록을 보려면 CSFLE 암호화 스키마 가이드를 참조하세요.

4

참고

자동 암호화 옵션

자동 암호화 옵션은 자동 암호화 공유 라이브러리에 구성 정보를 제공하여 암호화된 필드에 액세스할 때 애플리케이션의 동작을 수정합니다.

자동 암호화 공유 라이브러리에 대해 자세히 알아보려면 CSFLE를 위한 자동 암호화 공유 라이브러리 페이지를 참조하세요.

5

이전 단계에서 선언된 변수를 사용하는 다음 자동 암호화 설정으로 MongoDB 클라이언트 객체를 인스턴스화합니다.

4

CSFLE 지원 MongoClient 인스턴스를 사용하여 다음 코드 스니펫을 사용하여 암호화된 필드가 있는 문서를 medicalRecords.patients 네임스페이스에 삽입합니다.

문서를 삽입하면 CSFLE 활성화 클라이언트는 다음과 유사하도록 문서의 필드를 암호화합니다.

{
"_id": { "$oid": "<_id of your document>" },
"name": "Jon Doe",
"ssn": {
"$binary": "<cipher-text>",
"$type": "6"
},
"bloodType": {
"$binary": "<cipher-text>",
"$type": "6"
},
"medicalRecords": {
"$binary": "<cipher-text>",
"$type": "6"
},
"insurance": {
"provider": "MaestCare",
"policyNumber": {
"$binary": "<cipher-text>",
"$type": "6"
}
}
}

참조: 코드 완성

5

이 가이드의 암호화된 필드가 있는 문서 삽입 단계에서 삽입한 암호화된 필드가 있는 문서를 검색합니다.

다음 코드 스니펫은 자동 CSFLE를 사용하도록 구성된 클라이언트와 자동 CSFLE를 사용하도록 구성되지 않은 클라이언트를 사용하여 문서에 대해 쿼리함으로써 CSFLE의 기능을 보여 줍니다.

이전 코드 스니펫의 출력은 다음과 같아야 합니다.

Finding a document with regular (non-encrypted) client.
{
_id: new ObjectId("629a452e0861b3130887103a"),
name: 'Jon Doe',
ssn: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e7910c20697e5f4fa95710aafc9153f0a3dc769c8a132a604b468732ff1f4d8349ded3244b59cbfb41444a210f28b21ea1b6c737508d9d30e8baa30c1d8070c4d5e26", "hex"), 6),
bloodType: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e79022e238536dfd8caadb4d7751ac940e0f195addd7e5c67b61022d02faa90283ab69e02303c7e4001d1996128428bf037dea8bbf59fbb20c583cbcff2bf3e2519b4", "hex"), 6),
'key-id': 'demo-data-key',
medicalRecords: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e790405163a3207cff175455106f57eef14e5610c49a99bcbd14a7db9c5284e45e3ee30c149354015f941440bf54725d6492fb3b8704bc7c411cff6c868e4e13c58233c3d5ed9593eca4e4d027d76d3705b6d1f3b3c9e2ceee195fd944b553eb27eee69e5e67c338f146f8445995664980bf0", "hex"), 6),
insurance: {
policyNumber: new Binary(Buffer.from("0217482732d8014cdd9ffdd6e2966e5e79108decd85c05be3fec099e015f9d26d9234605dc959cc1a19b63072f7ffda99db38c7b487de0572a03b2139ac3ee163bcc40c8508f366ce92a5dd36e38b3c742f7", "hex"), 6),
provider: 'MaestCare'
}
}
Finding a document with encrypted client, searching on an encrypted field
{
_id: new ObjectId("629a452e0861b3130887103a"),
name: 'Jon Doe',
ssn: 241014209,
bloodType: 'AB+',
'key-id': 'demo-data-key',
medicalRecords: [ { weight: 180, bloodPressure: '120/80' } ],
insurance: { policyNumber: 123142, provider: 'MaestCare' }
}

참조: 코드 완성

CSFLE 작동 방식을 알아보려면 기본 사항을 참조하세요.

이 가이드에 언급된 주제에 대해 자세히 알아보려면 다음 링크를 참조하세요:

  • CSFLE 구성 요소에 대한 자세한 내용은 참조 페이지에서 확인하세요.

  • 키 및 키 볼트 페이지에서 고객 마스터 키와 데이터 암호화 키가 어떻게 작동하는지 알아보세요.

  • KMS 제공자가 CSFLE 키를 관리하는 방법은 CSFLE KMS 제공자 페이지에서 확인하세요.

← GCP에서 자동 클라이언트 측 필드 수준 암호화 사용
참조 →