문서 메뉴

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

키 및 키 자격 증명 모음Keys and Key Vaults

이 페이지의 내용

  • 개요
  • 데이터 암호화 키 및 고객 마스터 키
  • 키 순환
  • 키 볼트 컬렉션
  • 키 볼트 컬렉션 이름
  • 권한
  • 키 볼트 클러스터
  • 키 볼트 collection 업데이트

이 가이드에서는 Queryable Encryption의 다음 구성 요소에 대해 자세히 알아볼 수 있습니다.

  • 데이터 암호화 키(DEK)

  • 고객 마스터 키(CMK)

  • 키 볼트 컬렉션

  • 키 관리 시스템(KMS)

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

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

KMS(키 관리 시스템)라고도 하는 CMK(고객 마스터 키)는 클라우드 KMS와 같은 고객 프로비저닝 키 공급업체에서 생성하는 최상위 키입니다. CMKDEK(데이터 암호화 키)를 암호화하고, 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(Data Encryption Key) 문서를 저장하는 데 사용하는 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 기능

mongosh 메서드 KeyVault.createKey()keyAltNames 필드에 고유 인덱스가 없는 경우 자동으로 고유 인덱스를 생성합니다.

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

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

경고

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

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

MongoDB 컬렉션에 대한 액세스 권한을 부여하는 방법을 알아보려면 MongoDB 매뉴얼의 사용자 및 역할 관리 를 참조하세요.

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

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

키 볼트 컬렉션을 호스팅하는 클러스터를 지정하려면 클라이언트 MongoClient 객체의 keyVaultClient 필드를 사용합니다. 클라이언트의 MongoClient 객체에 있는 Queryable Encryption 관련 구성 옵션에 대해 자세히 알아보려면 Queryable Encryption 을 위한 MongoClient 옵션을 참조하세요.

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

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

  • rewrapManyDataKey 메서드

  • 표준 CRUD 작업

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

데이터 암호화 키를 생성하는 방법을 보여주는 튜토리얼을 보려면 빠른 시작을 참조하세요.

← 명시적 암호화