문서 메뉴

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

빠른 시작

이 페이지의 내용

  • 개요
  • 시작하기 전에
  • 절차
  • 고객 마스터 키 생성
  • 키 볼트 collection에 고유 인덱스 만들기
  • 데이터 암호화 키 생성
  • MongoClient 구성
  • 암호화된 필드가 있는 문서 삽입하기
  • 암호화된 문서 조회
  • 자세히 알아보기

이 가이드에서는 자동 CSFLE(클라이언트 측 필드 레벨 암호화) 및 MongoDB 드라이버를 사용하여 문서를 암호화하는 방법을 보여줍니다.

이 가이드를 완료한 후에는 다음 지식과 소프트웨어를 갖게 됩니다.

  • 문서의 필드를 암호화하도록 드라이버를 구성하는 단계를 이해합니다.

  • 작동하지만 프로덕션 준비가 되지 않은 클라이언트 애플리케이션으로 자동 클라이언트 측 필드 레벨 암호화를 활용합니다.

중요

이 애플리케이션을 프로덕션 환경에서는 사용하지 마세요.

이 예제 애플리케이션은 애플리케이션의 파일 시스템에 암호화 키를 저장하므로 키에 무단으로 액세스하거나 데이터를 해독하기 위한 키를 분실할 위험이 있습니다.

프로덕션 환경에서 사용할 수 있는 CSFLE 지원 애플리케이션을 만드는 방법을 보여주는 튜토리얼을 보려면 튜토리얼을 참조하세요 .

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

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

참조: 전체 적용

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

1

CSFLE를 수행하려면 고객 마스터 키(CMK)를 생성해야 합니다.

96바이트 고객 마스터 키를 생성하고 파일 시스템인 로컬 키 제공자master-key.txt 파일로 저장합니다.

openssl rand 96 > master-key.txt

참고

프로그래밍 언어를 사용하여 고객 마스터 키 생성

선호하는 프로그래밍 언어를 사용하여 CMK 를 생성하려는 경우, GitHub에서 이 가이드의 지원되는 각 언어로 고객 마스터 키를 생성하는 방법을 보여주는 코드 스니펫을 볼 수 있습니다.

경고

프로덕션에서 로컬 키 제공자를 사용하지 않습니다.

로컬 키 제공자는 안전하지 않은 저장 방법이므로 프로덕션 에는 권장되지 않습니다 . 대신 원격 키 관리 시스템 에 고객 마스터 키를 저장해야 합니다. (KMS).

CSFLE 구현에서 원격 KMS를 사용하는 방법을 알아보려면 튜토리얼 가이드를 참조하세요.

2

collection의 필드에 고유 인덱스를 생성합니다.keyAltNames encryption.__keyVault

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

3
1

이 가이드 의 고객 마스터 키 생성 단계에서 생성한 고객 마스터 키 파일의 내용을 조회합니다.

고객 마스터 키 값을 KMS 제공자 설정으로 전달합니다. 클라이언트는 이러한 설정을 사용하여 고객 마스터 키 를 검색합니다. 로컬 키 제공자를 사용하려면 제공자 이름을 local 로 설정합니다.

2

MongoDB 연결 문자열과 키 볼트 컬렉션 네임스페이스를 사용하여 클라이언트를 구성하고 데이터 암호화 키를 만듭니다.

참고

키 볼트 컬렉션 네임스페이스 권한

이 가이드의 키 볼트 컬렉션은 encryption 데이터베이스의 __keyVault 컬렉션입니다. 애플리케이션에서 MongoDB에 연결하는 데 사용하는 데이터베이스 사용자에게 encryption.__keyVault 네임스페이스에 대한 ReadWrite 권한이 있는지 확인합니다.

위 코드의 출력은 다음과 유사해야 합니다.

DataKeyId [base64]: 3k13WkSZSLy7kwAAP4HDyQ==

참조: 코드 완성

4
1

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

2

KMS 제공자를 지정하고 키를 인라인으로 지정합니다.

3

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

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

4

참고

자동 암호화 옵션

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

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

5

다음 자동 암호화 설정을 사용하여 MongoDB 클라이언트 객체를 인스턴스화합니다.

5

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"
}
}
}

참조: 코드 완성

6

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

다음 코드 스니펫은 자동 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' }
}

참조: 코드 완성

원격 KMS를 사용하여 프로덕션에 즉시 사용 가능한 CSFLE에 대한 튜토리얼을 보려면 튜토리얼을 참조하세요 .

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

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

← 설치 요구 사항