문서 메뉴

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

암호화 구성

이 페이지의 내용

  • 개요
  • 키 관리자
  • 로컬 키 관리
  • 기존 미사용 데이터 암호화

이 페이지에서는 미사용 암호화를 지원하기 위한 서버 구성에 대해 설명합니다. MongoDB Atlas 를 사용하는 경우 데이터는 이미 암호화되어 있습니다. MongoDB는 클라우드 제공자 수준에서 Atlas 암호화를 관리하지만 자체 키 관리 솔루션을 사용할 수도 있습니다. 자세한 내용은 Atlas 키 관리 문서 를 참조하세요.

MongoDB Enterprise 3.2에는 WiredTiger 스토리지 엔진에 대한 네이티브 암호화 옵션이 도입되었습니다. Atlas 외부에서는 WiredTiger 스토리지 엔진을 사용하는 엔터프라이즈 설치에만 암호화를 사용할 수 있습니다.

암호화 키의 안전한 관리는 스토리지 암호화를 위한 중요한 요건입니다. MongoDB는 MongoDB 설치와 함께 저장되지 않는 마스터 키를 사용합니다. 마스터 키만 외부에서 관리되며, 다른 키는 MongoDB 인스턴스와 함께 저장할 수 있습니다.

MongoDB의 암호화된 스토리지 엔진은 마스터 키에 대해 두 가지 키 관리 옵션을 지원합니다.

  • Key Management Interoperability Protocol(KMIP)를 통해 타사 키 관리 어플라이언스와 통합합니다. 권장

  • 키 파일을 통한 로컬 키 관리 방식을 사용합니다.

중요

MongoDB는 기존 데이터를 암호화할 수 없습니다. 새 키로 암호화를 활성화하면 MongoDB 인스턴스에 기존 데이터가 있을 수 없습니다. MongoDB 설치에 이미 기존 데이터가 있는 경우, 기존 미사용 데이터 암호화에서 추가 단계를 확인하세요.

MongoDB Enterprise는 호환되는 키 관리 어플라이언스를 사용하여 안전한 키 전송을 지원합니다. 키 관리자를 사용하면 키를 키 관리자에 저장할 수 있습니다.

MongoDB Enterprise는 Key Management Interoperability Protocol(KMIP)을 준수하는 키 관리 어플라이언스를 통해 안전한 키 전송을 지원합니다.

MongoDB의 인증 파트너 목록은 파트너 목록 을 참조하세요.

권장

키 관리자를 사용하면 HIPAA, PCI-DSS, FERPA 등의 키 관리 규제 지침을 충족하게 되며 로컬 키 관리 방식보다 권장됩니다.

  • 키 관리자는 KMIP 통신 프로토콜을 지원해야 합니다.

    기본 KMIP 프로토콜 버전은 1.2입니다. MongoDB 서버 구성 파일에서 KMIP 버전 1.0 또는 1.1을 사용하도록 MongoDB를 구성할 수 있습니다

  • KMIP를 사용하는 타사 키 관리 어플라이언스와 통합하려면 다음 KMIP 작업을 허용해야 합니다.

    • 생성(operation_create)

    • (operation_get) 가져오기

    • (operation_activate)활성화

  • KMIP 서버에 대해 MongoDB를 인증하려면 키 관리 어플라이언스에서 발행한 유효한 인증서가 있어야 합니다.

참고

버전 4.0에서 변경됨

Windows의 MongoDB Enterprise는 더 이상 저장된 암호화를 위한 블록 암호로 AES256-GCM 을(를) 지원하지 않습니다. 이 사용 방식은 Linux에서만 지원됩니다.

키 관리자에 연결할 때 신규 키를 생성하려면 다음 옵션을 사용하여 mongod를 시작합니다.

버전 1.0 또는 1.1 KMIP 서버에 연결하려면 --kmipUseLegacyProtocol 옵션을 사용합니다.

구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 --bind_ip 을(를) 지정합니다.

다음 작업에서는 키 관리자에 새 마스터 키를 생성합니다. mongod는 마스터 키를 사용하여 mongod가 각 데이터베이스에 대해 생성하는 키를 암호화합니다.

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem

mongod 는 시작 시 KMIP 서버에 대한 연결을 확인합니다.

--kmipServerName 에 지정된 서버 이름은 KMIP 서버에서 제공하는 인증서의 주체 대체 이름 SAN 또는 일반 이름 CN 과 일치해야 합니다. SAN 는 시스템 이름 또는 IP 주소일 수 있습니다.

0}이 있으면 은 와 SAN 일치를 시도하지 않습니다. mongod CN

KMIP 서버의 호스트 이름 또는 IP 주소가 SAN 또는 CN 중 하나와 일치하지 않는 경우 mongod 가 시작되지 않습니다.

키 생성 및 사용이 성공적으로 이루어졌는지 검증하려면 로그 파일을 확인합니다. 성공 시 프로세스는 다음 메시지를 기록합니다.

[initandlisten] Created KMIP key with id: <UID>
[initandlisten] Encryption key manager initialized using master key with id: <UID>

다음도 참조하세요.

KMIP 서버에서 이미 관리되고 있는 기존 마스터 키를 사용할 수 있습니다. 기존 키를 사용하려면 mongod를 시작하여 mongod를 키 관리자에 연결할 때 다음 옵션을 사용합니다.

버전 1.0 또는 1.1 KMIP 서버에 연결하려면 --kmipUseLegacyProtocol 옵션을 사용합니다.

구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 --bind_ip 을(를) 지정합니다.

mongod --enableEncryption \
--kmipServerName <KMIP Server HostName> \
--kmipPort <KMIP server port> \
--kmipServerCAFile ca.pem \
--kmipClientCertificateFile client.pem \
--kmipKeyIdentifier <UID>

mongod 는 시작 시 KMIP 서버에 대한 연결을 확인합니다.

--kmipServerName 에 지정된 서버 이름은 KMIP 서버에서 제공하는 인증서의 주체 대체 이름 SAN 또는 일반 이름 CN 과 일치해야 합니다. SAN 는 시스템 이름 또는 IP 주소일 수 있습니다.

0}이 있으면 은 와 SAN 일치를 시도하지 않습니다. mongod CN

KMIP 서버의 호스트 이름 또는 IP 주소가 SAN 또는 CN 중 하나와 일치하지 않는 경우 mongod 가 시작되지 않습니다.

다음도 참조하세요.

중요

키 파일 메서드를 사용하는 경우에는 대부분의 키 관리 규제 지침을 충족하지 않으며, 사용자가 자신의 키를 직접 안전하게 관리해야 합니다.

키 파일의 안전한 관리는 매우 중요합니다.

키 파일을 사용하여 암호화하려면 단일 16자 또는 32자 문자열을 포함하는 base64로 인코딩된 키 파일이 있어야 합니다. 키 파일은 mongod 프로세스의 소유자만 액세스할 수 있어야 합니다.

  1. 16자 또는 32자 문자열을 사용해 base64로 인코딩된 키 파일을 생성합니다. 원하는 메서드를 사용하여 인코딩된 키 파일을 생성할 수 있습니다. 예를 들면 다음과 같습니다.

    openssl rand -base64 32 > mongodb-keyfile
  2. 파일 권한을 업데이트합니다.

    chmod 600 mongodb-keyfile
  3. 키 파일을 사용하려면 다음 옵션을 사용하여 mongod를 시작합니다.

    • --enableEncryption,

    • --encryptionKeyFile <path to keyfile>,

    mongod --enableEncryption --encryptionKeyFile mongodb-keyfile

    구성에 필요한 추가 옵션을 포함합니다. 예를 들어 원격 클라이언트를 배포에 연결하거나 배포 멤버가 다른 호스트에서 실행되도록 하려면 --bind_ip 을(를) 지정합니다.

  4. 암호화 키 관리자가 키 파일을 사용하여 성공적으로 초기화되었는지 확인합니다. 작업이 성공하면 프로세스는 다음 메시지를 기록합니다.

    [initandlisten] Encryption key manager initialized with key file: <path to keyfile>

다음도 참조하세요.

MongoDB는 기존 데이터를 암호화할 수 없습니다. 신규 키로 암호화를 활성화하면 MongoDB 인스턴스에 기존 데이터가 있을 수 없습니다.

기존 데이터가 있는 복제본 세트를 사용하는 경우, 롤링 초기 동기화를 사용하여 데이터를 암호화합니다.

예를 들어 멤버가 3명인 복제본 세트를 생각해 보겠습니다. 복제본 세트가 사용 중이며 암호화하려는 데이터를 보유하고 있습니다. 미사용 데이터를 암호화하기 위해 수행할 단계는 다음과 같습니다.

1

서버를 준비하려면 다음 단계를 따릅니다.

  • 세컨더리 서버 중 하나를 선택합니다.

  • 세컨더리 서버에서 mongod를 중지합니다.

  • 선택 사항: dbPath의 데이터를 백업합니다. 전체 백업이 필요하지 않은 경우에는 diagnostic.data 디렉토리만 백업하여 문제 발생 시 유용한 문제 해결 데이터를 보존하는 것이 좋습니다. 자세한 내용은 풀타임 진단 데이터 캡처에서 확인할 수 있습니다.

  • dbPath에서 파일과 디렉토리를 제거합니다.

2

암호화를 활성화 한 상태에서 세컨더리 서버를 시작합니다. mongod 인스턴스는 새 키 저장소를 생성합니다.

3

프라이머리에서 데이터를 가져옵니다. mongod 프로세스를 시작하여 복제 옵션을 적절히 지정합니다.

mongod 는 초기 동기화를 수행하고 동기화 프로세스 중에 데이터를 암호화합니다.

4

첫 번째 세컨더리가 데이터 가져오기 및 암호화를 완료하면, 다른 세컨더리 mongod 인스턴스에서 이 프로세스를 반복합니다.

5

모든 세컨더리가 암호화되면, 프라이머리를 step down합니다. 적격 세컨더리가 새로운 프라이머리를 선출하게 됩니다.

이전의 프라이머리는 이제 세컨더리가 됩니다. 이 단계들을 반복하여 암호화되지 않은 데이터를 제거한 다음 초기 동기화를 실행합니다.

← 저장된 데이터 암호화