AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

암호화 키 및 키 볼트

이 가이드 사용 중 암호화 의 다음 구성 요소에 학습 수 있습니다.

  • 데이터 암호화 키(DEK)

  • 고객 마스터 키(CMK)

  • 키 볼트 컬렉션

  • 키 관리 시스템(KMS)

앞의 구성 요소를 사용하여 Queryable Encryption 또는 클라이언트 측 필드 레벨 암호화 지원 클라이언트 를 설정하다 하는 방법을 보여주는 단계별 가이드를 보려면 다음 리소스를 참조하세요.

사용 중인 암호화는 다단계 키 계층 구조를 사용하여 데이터를 보호하며, 흔히 "봉투 암호화" 또는 "래핑 키" 라고 합니다.

KMS(키 관리 시스템)라고도 하는 CMK(고객 마스터 키)는 클라우드 KMS와 같은 고객 프로비저닝 키 공급업체에서 생성하는 최상위 키입니다. CMK는 DEK(데이터 암호화 키)를 암호화하고, DEK는 다시 문서의 필드를 암호화합니다. CMK에 대한 액세스 권한이 없으면 클라이언트 애플리케이션은 관련 DEK를 복호화할 수 없습니다.

MongoDB는 CMK로 암호화된 DEK를 키 볼트 컬렉션에 BSON 문서로 저장합니다. 키 관리는 클라이언트 사이드에서 이루어지고 고객이 제어하기 때문에 MongoDB는 DEK를 절대로 복호화할 수 없습니다.

DEK를 삭제하면 해당 DEK로 암호화된 모든 필드를 영구적으로 읽을 수 없게 됩니다. CMK를 삭제하면 해당 CMK를 사용하여 DEK로 암호화된 모든 필드는 영구적으로 읽을 수 없게 됩니다.

경고

고객 마스터 키는 Queryable Encryption에서 가장 민감한 키입니다. CMK가 손상되면 암호화된 모든 데이터를 해독할 수 있습니다. 원격 키 관리 시스템을 사용하여 CMK를 저장합니다.

중요

원격 키 관리 서비스 제공자 사용

고객 마스터 키를 원격 키 관리 시스템(KMS)에 저장합니다.

원격 KMS를 사용해야 하는 이유에 대해 자세히 알아보려면 원격 키 관리 시스템을 사용해야 하는 이유를 참조하세요.

지원되는 모든 KMS 제공자 목록을 보려면 KMS 제공자 페이지를 참조하세요.

프로비저닝된 키 제공자에서 수동 또는 자동으로 CMK를 순환시킵니다. MongoDB는 이 프로세스에 대한 가시성이 없습니다. CMK를 순환시키면 MongoDB는 이를 사용하여 모든 새 DEK를 래핑합니다. 기존 암호화된 DEK는 다시 래핑되지 않습니다. 이는 여전히 이전 CMK로 래핑됩니다.

키 볼트에 있는 암호화된 DEK의 일부 또는 전부를 순환시키려면 KeyVault.rewrapManyDataKey() 메서드를 사용합니다. 애플리케이션을 중단하지 않고도 지정된 새 CMK로 키를 원활하게 다시 래핑합니다. 새 CMK로 다시 래핑한 후에도 DEK 자체는 변경되지 않습니다.

키 순환에 대한 자세한 내용은 암호화 키 순환을 참조하세요.

키 볼트 컬렉션은 암호화된 DEK(데이터 암호화 키) 문서를 저장하는 데 사용하는 MongoDB 컬렉션입니다. DEK 문서는 DEK를 포함하는 BSON 문서로 다음과 같은 구조를 가집니다.

{
"_id" : UUID(<string>),
"status" : <int>,
"masterKey" : {<object>},
"updateDate" : ISODate(<string>),
"keyMaterial" : BinData(0,<string>),
"creationDate" : ISODate(<string>),
"keyAltNames" : <array>
}

키 볼트 컬렉션은 표준 MongoDB 컬렉션을 만들 때와 마찬가지로 생성할 수 있습니다. 키 볼트 컬렉션에는 keyAltNames 필드에 고유 인덱스가 있어야 합니다. 즉, 이러한 값은 고유해야 합니다. 인덱스가 있는지 확인하려면 키 볼트 컬렉션에 대해 listIndexes 명령을 실행합니다.

1db.runCommand({
2 listIndexes: "__keyVault",
3});
1{
2 cursor: {
3 id: Long("0"),
4 ns: 'encryption.__keyVault',
5 firstBatch: [
6 { v: 2, key: { _id: 1 }, name: '_id_' }
7 ]
8 },
9 ok: 1,
10}

고유 인덱스가 존재하지 않는 경우 DEK 관리를 수행하기 전에 애플리케이션에서 인덱스를 생성해야 합니다.

MongoDB 컬렉션을 만드는 방법을 알아보려면 데이터베이스 및 컬렉션을 참조하세요.

팁

mongosh 기능

The mongosh method KeyVault.createKey() automatically creates a unique index on the keyAltNames field if one does not exist.

DEK, CMK 및 키 볼트 컬렉션이 지원되는 모든 KMS 제공자 아키텍처에서 어떻게 상호 작용하는지 자세히 설명하는 다이어그램을 보려면 KMS 제공자를 참조하세요.

관리자가 아닌 네임스페이스를 사용하여 키 볼트 컬렉션을 저장할 수 있습니다. 관례에 따라 이 문서 전체의 예시에서는 encryption.__keyVault 네임스페이스를 사용합니다.

경고

암호화 관련 컬렉션을 저장하는 데 admin 데이터베이스를 사용하지 않도록 합니다. 이 컬렉션에 관리자 데이터베이스를 사용하는 경우, 권한 부족으로 인해 MongoDB 클라이언트에서 데이터에 액세스하거나 암호를 해독하지 못할 수 있습니다.

키 볼트 컬렉션에 대한 read 액세스 권한이 있는 애플리케이션은 컬렉션을 쿼리하여 암호화된DEK(데이터 암호화 키)를 검색할 수 있습니다. 그러나 DEK 암호화에 사용되는 CMK(고객 마스터 키)에 액세스할 수 있는 애플리케이션만 해당 DEK를 암호화 또는 복호화에 사용할 수 있습니다. DEK로 문서를 암호화하고 해독하려면 애플리케이션에 키 볼트 컬렉션과 CMK에 대한 액세스 권한을 모두 부여해야 합니다.

To learn how to grant access to a MongoDB collection, see Manage Users and Roles in the MongoDB manual.

애플리케이션에 고객 마스터 키에 대한 액세스 권한을 부여하는 방법을 알아보려면 Queryable Encryption 자동 암호화 튜토리얼 또는 CSFLE 자동 암호화 튜토리얼을 참조하세요.

기본값 으로 MongoDB 데이터를 호스팅하는 클러스터 에 키 볼트 컬렉션 저장합니다. MongoDB 다른 MongoDB deployment 에서 키 볼트 컬렉션 호스팅하는 기능도 지원합니다. Queryable Encryption 작업을 수행하려면 애플리케이션이 두 클러스터에 모두 액세스 할 수 있어야 합니다.

DEK를 보호하려면 별도의 MongoDB deployment 에서 키 볼트 컬렉션 호스팅하다 . 데이터를 호스팅하는 클러스터 보다 해당 배포서버 에 더 엄격한 보안을 적용합니다. 이 추가 제어는 KMS 엔드포인트 구성 변경과 같은 키 볼트 컬렉션 문서의 승인되지 않은 변경을 방지하는 데 도움이 됩니다.

키 볼트 컬렉션 을 호스팅하는 클러스터 를 지정하려면 클라이언트 MongoClient 객체 의 keyVaultClient 필드 를 사용합니다. 클라이언트의 MongoClient 객체 에 있는 특정 구성 옵션에 학습 보려면 Queryable Encryption 을 위한 MongoClient 옵션 또는 CSFLE를 위한 MongoClient 옵션을 참조하세요.

키 볼트 컬렉션에 DEK를 추가하려면 ClientEncryption 객체의 createKey 메서드를 사용합니다.

DEK를 삭제하거나 업데이트하려면 다음 메커니즘 중 하나를 사용합니다.

  • rewrapManyDataKey 메서드

  • 표준 CRUD 작업

rewrapManyDataKey 메서드에 대해 자세히 알아보려면 클라이언트 또는 드라이버에 대한 메서드 문서를 참조하세요.

데이터 암호화 키 를 만드는 방법을 보여주는 튜토리얼을 보려면 Queryable Encryption 빠른 시작 또는 CSFLE 빠른 시작을 참조하세요.