문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / / / /

Amazon Web Services에서 자동 Queryable Encryption 사용

이 페이지의 내용

  • 개요
  • 시작하기 전에
  • KMS 설정
  • 고객 마스터 키 생성
  • AWS IAM 사용자 생성
  • 애플리케이션 생성
  • 키 볼트 collection에 고유 인덱스 만들기
  • 데이터 암호화 키 및 암호화된 collection 만들기
  • 암호화된 읽기 및 쓰기를 위한 MongoClient 구성
  • 암호화된 필드가 있는 문서 삽입하기
  • 암호화된 문서 조회
  • 자세히 알아보기

이 가이드에서는 AWS(Amazon Web Services) KMS 를 사용하여 Queryable Encryption 지원 애플리케이션을 빌드하는 방법을 설명합니다.

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

  • AWS KMS 인스턴스에서 호스팅되는 고객 마스터 키입니다.

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

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

참조: 전체 적용

이 가이드에서 만든 애플리케이션의 전체 코드를 보려면 프로그래밍 언어에 해당하는 탭을 선택하고 제공된 링크를 따라가세요.

1
1
2
3

대칭 KMS 키 생성 에 대한 AWS 공식 설명서에 따라 새 대칭 키를 생성합니다. . 생성한 키는 고객 마스터 키입니다. 식별에 도움이 되는 이름과 설명을 선택합니다. 이러한 필드는 CMK 의 기능이나 구성에 영향을 주지 않습니다.

키 생성 프로세스의 Usage Permissions 단계에서 ID 및 액세스 관리(IAM) 정책을 허용하여 고객 마스터 키에 대한 액세스 권한을 부여하는 다음 기본 키 정책을 적용합니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "<ARN of your AWS account principal>"
},
"Action": "kms:*",
"Resource": "*"
}
]
}

중요

고객 마스터 키의 Amazon 리소스 이름(ARN) 및 지역을 기록합니다. 이 가이드의 뒷부분에서 이를 사용하게 됩니다.

자세히 알아보기

고객 마스터 키에 대해 자세히 알아보려면 Key & Key Vault를 참조하십시오.

키 정책에 대해 자세히 알아보려면 Amazon Web Services 의 키 정책 KMS 을 참조하세요. 공식 Amazon Web Services 설명서에서 확인 가능합니다.

2
1
2

사용자 추가 에 대한 공식 AWS 설명서에 따라 AWS 관리 콘솔에서 새 프로그래밍 IAM사용자를 생성합니다. . 이 IAM 사용자를 Queryable Encryption이 활성화된 애플리케이션의 서비스 계정으로 사용하게 됩니다. 애플리케이션은 고객 마스터 키(CMK)로 데이터 암호화 키(DEK)를 암호화 및 복호화하기 위해 IAM 사용자를 사용하여 AWS KMS로 인증합니다.

중요

자격 증명 기록

IAM 사용자를 생성하는 마지막 단계에서 다음 IAM 자격 증명을 기록해야 합니다.

  • 액세스 키 ID

  • 시크릿 액세스 키

이러한 자격 증명을 기록할 수 있는 기회가 한 번 있습니다. 이 단계에서 이러한 자격 증명을 기록하지 않으면 다른 IAM 사용자를 만들어야 합니다.

3

IAM 사용자에게 원격 마스터 키에 대한 kms:Encryptkms:Decrypt 권한을 부여합니다.

중요

새 클라이언트 IAM 사용자는 마스터 키에 대한 관리 권한이 없어야 합니다. 데이터를 안전하게 유지하려면 최소 권한 원칙을 따릅니다.

다음 인라인 정책은 IAM 사용자가 가능한 최소 권한으로 고객 마스터 키를 사용하여 암호화하고 해독할 수 있도록 허용합니다.

참고

원격 마스터 키 ARN

다음 정책에는 이 가이드 의 마스터 키 생성 단계에서 생성한 키의 ARN이 필요합니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["kms:Decrypt", "kms:Encrypt"],
"Resource": "<the Amazon Resource Name (ARN) of your remote master key>"
}
]
}

이전 정책을 IAM 사용자에게 적용하려면 AWS 설명서의 IAM ID 권한 추가하기 가이드를 따르세요.

중요

프로덕션에서 IAM 역할로 인증하기

Queryable Encryption 지원 애플리케이션을 프로덕션 환경에 배포할 때는 IAM 사용자 대신 IAM 역할을 통해 애플리케이션을 인증합니다.

IAM 역할로 인증하려면 다음과 같이 KMS 제공자 객체에 임시 IAM 역할 자격 증명을 지정합니다.

{
"accessKeyId":"<temporary access key ID>",
"secretAccessKey":"<temporary secret access key>",
"sessionToken":"<temporary session token>"
}

다음 메커니즘을 통해 임시 IAM 역할 자격 증명을 얻을 수 있습니다.

각 임시 자격 증명 세트가 만료될 때 새 임시 자격 증명을 가져오고 Queryable Encryption이 활성화된 MongoClient 인스턴스를 다시 생성하는 로직이 애플리케이션에 포함되어야 합니다.

IAM 역할에 대해 자세히 알아보려면 공식 AWS 설명서의 다음 페이지를 참조하세요.

이 가이드에서 지원되는 각 언어로 임시 자격 증명을 얻고 역할을 맡는 방법을 알아보려면 Amazon Web Services 설명서에서 다음 AssumeRole 실행 가능한 예제를 참조하세요.

1

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

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

2
1

Queryable Encryption이 활성화된 클라이언트 코드에 서비스 계정 자격 증명을 추가합니다.

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

이 가이드 의 IAM 사용자 생성 단계에서 액세스 키 ID와 비밀 액세스 키를 생성하고 기록했습니다.

자세히 알아보기

AWS용 KMS 제공자 객체에 대해 자세히 알아보려면 Amazon Web Services KMS를 참조하세요.

2

고객 마스터 키를 지정하려면 다음 코드를 업데이트하세요.

이 가이드 의 고객 마스터 키 생성 단계에서 고객 마스터 키의 ARN및 리전을 기록했습니다.

3

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

참고

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

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

4

Queryable Encryption이 활성화된 MongoClient 인스턴스를 사용하여 필드를 암호화하고 collection을 생성합니다.

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

Created encrypted collection!

자세히 알아보기

AWS KMS를 사용할 때 클라이언트 애플리케이션이 데이터 암호화 키를 생성하는 방법을 보여주는 다이어그램을 보려면 아키텍처를 참조하세요.

AWS KMS에서 호스팅되는 고객 마스터 키로 암호화된 데이터 암호화 키를 만드는 옵션에 대해 자세히 알아보려면 dataKeyOpts Object를 참조하세요.

참조: 코드 완성

3
1

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

2

aws KMS 공급자와 IAM 사용자 자격 증명을 지정합니다.

이 가이드 의 IAM 사용자 생성 단계에서 액세스 키 ID와 비밀 액세스 키를 생성하고 기록했습니다.

3
4

참고

자동 암호화 옵션

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

자동 암호화 공유 라이브러리에 대한 자세한 내용은 Queryable Encryption을 위한 자동 암호화 공유 라이브러리 페이지에서 확인하세요.

5

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

4

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에 반드시 필요합니다. 이 필드의 내용은 수정하지 마세요.

참조: 코드 완성

5

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

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의 작동 방식을 알아보려면 기본 사항을 참조하세요.

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

  • 참조 페이지에서 Queryable Encryption 구성 요소에 대해 자세히 알아보세요.

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

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

← 자습서