Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

마스터 키 및 데이터 암호화 키 관리

이 페이지의 내용

  • 지원되는 키 관리 서비스
  • 암호화 Key Vault

버전 4.2에 추가되었습니다.

클라이언트 사이드 필드 수준 암호화 에는 고객 마스터 키 (CMK)에 액세스하기 위한 KMS (KMS)가 필요합니다. MongoDB 는 데이터 암호화 키 생성중에 지정된 CMK 를 사용하여 데이터 암호화 키를 자동으로 암호화합니다.

CMK 를 삭제하면 해당 CMK 로 암호화됨 모든 데이터 암호화 키를 영구적으로 읽을 수 없는 상태로 만들고, 해당 데이터 암호화 키로 암호화됨 모든 값을 영구적으로 읽을 수 없는 상태로 만듭니다.

클라이언트 사이드 필드 수준 암호화는 다음과 같은 KMS 제공자를 지원합니다.

  • Amazon Web Services KMS

  • Azure Key Vault

  • Google Cloud Platform KMS

  • 로컬로 관리되는 키

핵심: Amazon Amazon Web Services KMS mongosh MongoDB 4.2.2 Web Services KMS 지원 의 경우 또는 MongoDB 이상의 레거시 셸 mongo shell 을 사용합니다. 4.2.0 및 4.2.1 mongo shell 레거시 Amazon Web Services KMS 셸 은 KMS 응답 객체 의 예기치 않은 변경으로 KMS 인해 Amazon Web Services KMS 서비스를 지원 하지 않습니다. 자세한 내용은 서버-44721 를 참조하세요.

MongoDB 클라이언트 사이드 암호화 는 사용을 Amazon Web Services KMS 지원합니다. 데이터 암호화 키를 암호화하고 해독합니다. 구체적으로, MongoDB 는 지정된 고객 마스터 키 (CMK )를 사용하여 암호화하거나 복호화할 수 있도록 데이터 암호화 키 를 Amazon Web Services KMS 로 안전하게 전송합니다. CMK 는 Amazon Web Services KMS 를 벗어나지 않습니다.

mongosh 은(는) Amazon Web Services KMS 에 대한 액세스 를 구성하는 두 가지 방법을 지원합니다.

  • 클라이언트 사이드 필드 수준 암호화 명령줄 옵션 을 사용하거나

  • Mongo() 생성자를 사용하여 필요한 Amazon Web Services KMS 구성 옵션으로 데이터베이스 연결을 생성합니다.

Amazon Web Services KMS 에 액세스 를 구성하려면 최소한 Amazon Web Services 액세스 키와 해당 비밀 키가 필요합니다. 액세스 키에 연결된 IAM 사용자에게는 다음 작업이 포함된 정책이 하나 이상 있어야 합니다.

참고

KMS 액세스에 대한 최소 권한 원칙 구현

MongoDB 가 작동하는 데 필요한 작업과 리소스에만 액세스 있도록 IAM 사용자 역할을 구성하는 것이 좋습니다.

예를 들어 다음 정책 JSON은 필요한 조치의 범위를 단일 CMK로 지정합니다.

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt"
],
"Resource": "arn:aws:kms:region:account:key/12a345b6-cd7e-8f9g-0h1i-jk23l45mn6o7"
}
]
}

Amazon Web Services KMS 를 사용한 데이터 암호화 키 관리에 대한 전체 설명서는 데이터 암호화 키 관리 관리 참조하고 "Amazon Web Services KMS" 탭 을 선택합니다.

MongoDB 클라이언트 사이드 암호화는 Azure Key Vault KMS 사용을 지원합니다. 데이터 암호화 키를 암호화하고 해독합니다. 구체적으로, MongoDB는 지정된 고객 마스터 키(CMK)를 사용하여 암호화하거나 해독할 수 있도록 데이터 암호화 키를 Azure Key Vault로 안전하게 전송합니다. CMK는 Azure Key Vault를 벗어나지 않습니다.

mongosh 는 KMS 구성 옵션 을 사용하여 생성자를 사용하여 Mongo() Azure Key Vault 를 KMS 로 지정할 수 있도록 지원합니다.

Azure Key Vault 에 액세스 를 구성하려면 최소한 Azure 테넌트 ID, 클라이언트 ID 및 클라이언트 비밀이 필요합니다. 테넌트 ID 에는 다음 조치를 수행할 수 있는 기능 이 있어야 합니다.

참고

MongoDB 는 Azure의 클라이언트 인증서 인증 (TLS 상호 인증 이라고도 함)을 지원 하지 않습니다 .

Azure Key Vault 를 사용한 데이터 암호화 키 관리에 대한 전체 문서는 데이터 암호화 키 관리 를 참조하고 ' Azure Key Vault' 탭 을 선택합니다.

MongoDB 클라이언트 사이드 암호화는 GCP KMS 사용을 지원합니다. 데이터 암호화 키를 암호화하고 해독합니다. 구체적으로 MongoDB 는 지정된 고객 마스터 키(CMK)를 사용하여 암호화하거나 복호화할 수 있도록 데이터 암호화 키를 GCP KMS 로 안전하게 전송합니다. CMK는 GCP KMS 를 벗어나지 않습니다.

KMS 는 구성 mongosh Google Cloud Platform KMS KMS 옵션 Mongo()을 사용하여 생성자를 사용하여 를 로 지정할 수 있도록 지원합니다.

Google Cloud Platform KMS 에 액세스 를 구성하려면 최소한 Google Cloud Platform 이메일 및 관련 비공개 키가 필요합니다. Google Cloud Platform 이메일 계정에는 지정된 비공개 키에 대해 다음과 같은 IAM 권한이 있어야 합니다.

  • cloudkms.cryptoKeyVersions.useToEncrypt

  • cloudkms.cryptoKeyVersions.useToDecrypt

이러한 IAM 권한은 특정 Google Cloud Platform 사전 정의 역할 Google Cloud Platform 에 포함되어 있습니다.또는 사용자 지정 역할 에 포함될 수 있습니다.

Google Cloud Platform KMS 를 사용한 데이터 암호화 키 관리에 대한 전체 문서는 데이터 암호화 키 관리 관리 참조하고 'Google Cloud Platform KMS' 탭 을 선택합니다.

mongoshMongo() 생성자를 사용하여 로컬로 managed 키를 KMS 로 지정하는 것을 지원합니다. 로컬 키는 바이트의 96긴 string 이어야 합니다.

로컬로 관리되는 키를 사용한 데이터 암호화 키 관리에 대한 전체 문서는 데이터 암호화 키 관리 를 참조하고 "로컬 키 파일" 탭을 선택하세요.

키 볼트는 클라이언트 사이드 필드 수준 암호화 에 사용할 데이터 암호화 키를 저장하는 컬렉션 입니다. 데이터 암호화 키는 지원되는 키 관리 시스템( KMS )을 통해 managed 고객 마스터 키 (CMK )를 사용하여 암호화됨 .

mongosh 데이터 암호화 키 관리 를 위한 헬퍼 메서드를 제공합니다.

사용 사례
도우미 메서드
데이터 암호화 키 검색
데이터 암호화 키 생성 또는 수정
데이터 암호화 키 제거

KeyVault.deleteKey()

중요

데이터 암호화 키 를 제거하면 해당 데이터 암호화 키 를 사용하여 암호화됨 모든 필드를 영구적으로 읽을 수 없는 상태로 만듭니다.

키 볼트 컬렉션 에 대한 read 액세스 이 있는 애플리케이션은 컬렉션 을 쿼리하여 데이터 암호화 키를 조회 할 수 있습니다. 그러나 데이터 암호화 키 를 암호화하는 데 사용되는 CMK 에 액세스 수 있는 애플리케이션만 암호화 또는 암호 해독에 해당 키를 사용할 수 있습니다.

기본값 MongoDB 는 연결된 클러스터 에 키 볼트 컬렉션 을 저장합니다. MongoDB 는 원격 클러스터 를 Key Vault로 지정하는 기능도 지원합니다. 클라이언트 사이드 필드 수준 암호화 작업을 수행하려면 애플리케이션이 원격 Key Vault 클러스터 와 연결 클러스터 에 모두 액세스 수 있어야 합니다.

데이터 암호화 키는 다음과 같은 구조를 갖습니다.

{
"_id" : UUID("<string>"),
"keyMaterial" : BinData(0,"<encrypted binary data string>"),
"creationDate" : ISODate("2019-08-20T15:45:02.575Z"),
"updateDate" : ISODate("2019-08-20T15:45:02.575Z"),
"status" : <int>,
"version" : NumberLong(0),
"masterKey" : {
"provider" : "<string>",
"key" : "<string>",
"region" : "<string>",
"endpoint" : "<string>"
},
"keyAltNames" : [
"<string>"
]
}

클라이언트 사이드 필드 수준 암호화 는 keyAltNames 값의 고유성에 따라 달라집니다. mongosh KeyVault.createKey() 메서드는 keyAltNames고유 인덱스 가 없는 경우 고유 인덱스를 생성합니다. 애플리케이션은 키 볼트 컬렉션 에 대해 listIndexes 명령을 사용하여 고유 인덱스 가 있는지 확인할 수 있습니다. 고유 인덱스 가 존재하지 않는 경우 애플리케이션은 데이터 암호화 키 관리 를 수행하기 전에 고유 인덱스를 생성 해야 합니다 .

데이터 암호화 키 관리에 대한 전체 문서는 데이터 암호화 키 관리 를 참조하세요 .

돌아가기

명시적(수동) 클라이언트 측 필드 레벨 암호화