문서 메뉴

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

암호화 키 회전

이 페이지의 내용

  • 복제본 세트 멤버 로테이션
  • KMIP 마스터키 순환

대부분의 규제 요건에서는 민감한 데이터의 암호를 해독하는 데 사용되는 관리 키를 1년에 한 번씩 로테이션하고 새 키로 교체해야 합니다.

참고

명확화

MongoDB는 키 로테이션을 위한 두 가지 옵션을 제공합니다. 새 키를 사용하는 새 인스턴스로 바이너리를 로테이션할 수 있습니다. 또는 키 관리를 위해 KMIP 서버를 사용하는 경우 고객 마스터 키를 로테이션할 수 있습니다.

참고

쓰기 쿼럼 변경을 방지하려면 한 번에 두 개 이상의 복제본 세트 멤버를 교체하지 마세요.

복제본 세트의 경우 멤버를 로테이션하려면 다음과 같이 하세요:

  1. 새 키를 사용하도록 구성된 새 mongod 인스턴스를 시작합니다. 복제본 세트의 이름과 함께 --replSet 옵션을 포함하고, --dbpath--bind_ip와 같이 구성에 특정한 다른 옵션을 포함합니다.

    mongod --replSet myReplSet --enableEncryption \
    --kmipServerName <KMIP Server HostName> \
    --kmipServerCAFile ca.pem --kmipClientCertificateFile client.pem
  2. mongosh 를 복제본 세트의 프라이머리에 연결합니다.

  3. 인스턴스를 복제본 세트에 추가합니다:

    rs.add( { host: <host:port> } )

    경고

    MongoDB 5.0 이전에는 데이터가 일관될 때까지 새로 추가된 보조 서버가 읽기 작업을 수행하거나 기본 서버가 될 수 없더라도 여전히 투표 멤버로 간주됩니다. 5.0 이전 버전의 MongoDB를 실행 중이고 votespriority 설정이 0보다 큰 보조를 추가하는 경우, 투표 회원의 과반수가 온라인 상태이지만 기본 회원을 선출할 수 없는 경우가 발생할 수 있습니다. 이러한 상황을 방지하려면 priority :0votes :0 새 보조를 처음에 추가하는 것이 좋습니다. 그런 다음 rs.status() 실행하여 멤버가 SECONDARY 상태로 전환되었는지 확인합니다. 마지막으로 rs.reconfig() 를 사용하여 우선 순위와 투표를 업데이트하세요.

    초기 동기화 프로세스 중에 완전히 새로운 데이터베이스 키 세트와 새 시스템 키를 사용하여 데이터를 다시 암호화합니다.

  4. 복제본 세트에서 이전 노드를 제거하고 모든 데이터를 삭제합니다. 자세한 지침은 복제본 세트에서 구성원 제거를 참조하세요.

키 관리를 위해 KMIP 서버를 사용하는 경우 유일한 외부 관리 키인 고객 마스터 키 를 로테이션할 수 있습니다. 새 마스터 키를 사용하면 내부 키 저장소가 다시 암호화되지만 데이터베이스 키는 변경되지 않습니다. 이렇게 하면 전체 데이터 세트를 다시 암호화할 필요가 없습니다.

  1. 복제본 세트의 세컨더리 멤버에 대한 마스터 키를 한 번에 하나씩 로테이션합니다.

    1. --kmipRotateMasterKey 옵션을 포함하여 세컨더리를 다시 시작합니다. 구성과 관련된 기타 옵션(예: --bind_ip)을 포함하세요. 멤버에 --kmipKeyIdentifier 옵션이 이미 포함되어 있는 경우 --kmipKeyIdentifier 옵션을 새 키로 업데이트하여 사용하거나 생략하여 KMIP 서버에 새 키를 요청합니다:

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

      구성 파일을 사용하는 경우 security.kmip.rotateMasterKey를 포함합니다.

    2. 마스터 키 로테이션과 데이터베이스 키 저장소의 재암호화가 성공적으로 완료되면 mongod가 종료됩니다.

    3. --kmipRotateMasterKey 매개 변수 없이 보조 서버를 다시 시작합니다. 구성과 관련된 다른 옵션(예: --bind_ip)을 포함합니다.

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

      구성 파일을 사용하는 경우 security.kmip.rotateMasterKey 설정을 제거합니다.

  2. 복제본 세트 기본값을 내려놓습니다.

    mongosh 를 프라이머리에 연결하고 rs.stepDown() 를 사용하여 프라이머리를 물러나고 새 프라이머리를 강제로 선출합니다.

    rs.stepDown()
  3. rs.status()가 프라이머리가 물러나고 다른 멤버가 PRIMARY 상태를 취했음을 표시하면 물러난 멤버에 대한 마스터 키를 로테이션합니다.

    1. --kmipRotateMasterKey 옵션을 포함하여 물러난 멤버를 다시 시작합니다. 구성과 관련된 다른 옵션(예: --bind_ip)을 포함합니다. 멤버에 --kmipKeyIdentifier 옵션이 이미 포함되어 있는 경우 --kmipKeyIdentifier 옵션을 새 키로 업데이트하여 사용하거나 생략합니다.

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

      구성 파일을 사용하는 경우 security.kmip.rotateMasterKey를 포함합니다.

    2. 마스터 키 로테이션과 데이터베이스 키 저장소의 재암호화가 성공적으로 완료되면 mongod가 종료됩니다.

    3. --kmipRotateMasterKey 옵션 없이 물러난 멤버를 다시 시작합니다. 구성과 관련된 다른 옵션(예: --bind_ip)을 포함합니다.

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

      구성 파일을 사용하는 경우 security.kmip.rotateMasterKey 설정을 제거합니다.

← 암호화 구성