보안

TLS 인증서를 사용한 통신 보안: 카우치베이스 서버를 위한 최종 가이드(3부 중 3부)

카우치베이스 서버 내 TLS 이해

In 1부 그리고 파트 2 에서 TLS의 역사, 관련 구성 요소 및 작동 방식에 대해 설명했습니다. 이 가이드의 마지막 3부에서는 이 모든 것을 종합하여 Couchbase Server에서 TLS가 어떻게 작동하는지 알아봅니다.

카우치베이스 클러스터 인증서

Couchbase Server에서 클러스터 인증서는 모든 것을 하나 이상의 신뢰할 수 있는 CA(인증 기관)에 연결하며, 데이터베이스 암호화를 직접 처리하지 않습니다. 대신, 클러스터 내의 노드별 인증서에 대한 신뢰 체인을 설정합니다. 

Couchbase Server 배포의 모든 신뢰 당사자는 클러스터 인증서를 설치 및 신뢰해야 합니다. 웹 브라우저에 신뢰할 수 있는 루트 CA가 있는 이전 예와 마찬가지로, Couchbase 배포에서 각 Couchbase Server 노드 및 SDK 중 하나를 사용하는 연결 애플리케이션은 클러스터 인증서를 신뢰해야 합니다. 또한 클러스터 간 데이터를 안전하게 복제하기 위해 데이터 센터 간 복제(XDCR) 기능을 사용하는 추가 Couchbase Server 클러스터로 가져옵니다.

서비스형 데이터베이스(DBaaS) 제품인 Couchbase Capella에서는 모든 클러스터가 실제로 동일한 인증 기관을 사용하므로 모두 동일한 클러스터 인증서를 사용합니다. 그리고 2022년 초부터 이후 출시되는 모든 공식 Couchbase SDK에는 기본적으로 Capella 클러스터 인증서를 자동으로 신뢰하는 기능이 포함되어 있습니다.

네트워크 암호화를 위한 노드 인증서

노드 인증서와 노드별 개인 키는 Couchbase Server에서 네트워크 암호화를 담당하는 기본 구성 요소입니다. 노드 인증서는 신뢰할 수 있는 인증 기관(CA)에서 생성하며 CA의 개인 키(일명 클러스터 공개 키/인증서와 연결된 개인 키)로 서명됩니다.

다음은 Couchbase 노드 인증서를 만드는 과정입니다.

    1. CSR(인증서 서명 요청)은 내장된 노드의 공개 키를 사용하여 인증 기관에 요청합니다.
    2. 내장된 노드 공개 키를 포함하여 노드 인증서가 생성되며, 이는 CA 시스템 자체의 클러스터 개인 키를 사용하여 서명됩니다.
    3. 그런 다음 노드 인증서가 요청자에게 다시 제공됩니다.

이러한 인증서는 Couchbase 서버 노드 간의 보안 통신을 용이하게 하고 SDK에서 개별 Couchbase 서버 노드와의 암호화된 연결을 가능하게 합니다. 노드 인증서와 관련된 주요 사항은 다음과 같습니다:

노드 간 암호화: 노드 인증서는 Couchbase 서버 노드 간의 통신 채널을 보호하여 클러스터 내에서 데이터가 이동할 때 데이터를 보호합니다.

SDK 연결: SDK가 개별 Couchbase 서버 노드에 연결할 때 노드 인증서는 통신이 암호화되어 데이터 기밀성을 유지하도록 보장합니다.

HTTPS를 통한 관리자 GUI 액세스: 관리자는 노드 인증서를 활용하여 HTTPS를 통해 Couchbase 서버의 그래픽 사용자 인터페이스(GUI)에 안전하게 액세스할 수 있습니다.

SDK가 Couchbase Server 노드에 암호화된 연결을 만드는 방법의 예를 보면 다양한 구성 요소가 작동하는 것을 볼 수 있습니다. 다소 간단하게 설명하기 위해 일부 세부 사항은 일부러 생략했습니다.

SDK는 TLS 연결을 설정하는 클러스터의 각 Couchbase 서버 노드에 대해 이러한 단계를 수행합니다.

카우치베이스 서버에서 TLS 설정 예시

이 섹션에서는 Linux 호스트에서 버전 7.2.0을 실행하는 3노드 카우치베이스 서버 클러스터에서 TLS 네트워크 암호화를 설정합니다. 또한 인증 기관으로 사용되는 네 번째 Linux 호스트도 있습니다. 

클러스터 개인 키 + 인증서

인증 기관 호스트에 로그인하면 여기에서 클러스터 인증서를 만들 것입니다.

이 호스트는 최신 버전의 OpenSSL이 설치된 Linux 호스트입니다. 

먼저 나중에 노드별 인증서에 사용할 Couchbase 템플릿 파일을 만들겠습니다.

명령(출력 없음)

다음 단계는 암호화된 클러스터 개인 키를 생성하는 것입니다. cluster_private.key.

다음 명령을 실행하면 이 키를 암호화하기 위한 암호를 입력하라는 메시지가 표시됩니다. 

개인 키는 PKCS8(PKCS #8) 형식이며 매우 안전한 265비트로 암호화됩니다. 고급 암호화 표준 (AES).

명령
출력

파일의 시작 부분을 확인하여 암호화된 개인 키인지 확인할 수 있습니다.

명령
출력

이제 PEM x.509 형식으로 클러스터 인증서를 만들겠습니다. 이 경우 인증서는 자체 서명을 위한 것으로, 다른 기관에서 보증하지 않습니다. 즉, 기존 개인 키를 기반으로 직접 만들 수 있습니다. ca.key를 클릭합니다.

3650일(10년) 동안 유효한 클러스터 인증서를 만들면 인증서에 클러스터 공개 키가 포함됩니다. 클러스터_개인.키 를 만들었습니다. 이제 이 명령의 개인 키를 해독하려면 이전에 입력한 암호 구문을 제공해야 합니다.

명령
출력

이제 새 인증서 파일의 내용을 인쇄할 수 있습니다(공개 키도 볼 수 있습니다).

명령
출력

이제 클러스터 인증서(cluster_cert.pem), 이 파일을 클러스터의 모든 Couchbase Server 노드에 복사해야 합니다. 또한 관리자의 노트북과 같이 관리자가 UI에 액세스하는 모든 호스트뿐만 아니라 SDK가 작동하는 모든 애플리케이션에도 이 파일을 추가해야 합니다. 이 파일은 민감한 파일이 아니며 공개 정보만 포함합니다.

노드 개인 키 + CSR

이 섹션의 단계는 각 카우치베이스 서버 노드에 대해 반복해야 합니다:

    • 카우치베이스 서버 노드에 로그인합니다.
    • 시스템의 다른 사용자가 액세스할 수 없는 임시 디렉터리에서 다음 명령을 실행합니다.

먼저 노드 개인 키인 node1을 PKCS1(PKCS #1) 형식으로 생성해 보겠습니다. 

명령
출력

다음으로 Node1에 대한 CSR(인증서 서명 요청)을 생성해 보겠습니다. node1 개인 키를 입력합니다. CSR에 공개 키가 포함된다는 것을 기억하세요. 

명령(출력 없음)

이제 이 CSR과 내장된 공개 키를 보고 확인할 수 있습니다.
명령
출력

이제 CSR 파일을 복사합니다, cbnode1.csr를 통해 CA 시스템으로 전송합니다. 여기에는 공개 정보만 포함되며 민감하지 않습니다.

노드 인증서 만들기

CA 시스템에 로그인하면 이제 CA 시스템에 위치한 클러스터의 각 Couchbase 서버 노드에 대한 CSR 파일이 있어야 합니다, cbnode1.csr, cbnode2.csr,

각 카우치베이스 서버 노드에 대해 템플릿 파일을 만들어야 합니다. 템플릿 파일은 앞서 만든 템플릿 파일입니다, cbserver.ext는 각 노드에 맞게 사용자 정의됩니다. 각 Couchbase 서버 노드에 대해 이 명령을 실행하여 필요에 따라 Couchbase 서버 노드의 DNS 호스트 이름과 파일 이름을 바꿉니다. 이렇게 하면 SAN(주체 대체 이름)이 Couchbase 서버 노드의 이름과 일치하도록 설정됩니다. 

카우치베이스 서버에 호스트 이름을 사용하는 경우 이 명령을 실행합니다:

명령(출력 없음)

또는 카우치베이스 서버에 호스트 이름 없이 IP 주소를 사용하는 경우 이 옵션을 실행하세요:

명령(출력 없음)

이제 클러스터의 각 Couchbase Server 노드에 대한 템플릿 파일이 있어야 합니다, cbnode1.ext, cbnode2.ext, cbnode3.ext, 등...

이제 각 카우치베이스 서버 노드에 대해 3개월 동안 유효한 인증서를 생성합니다. 인증서는 PEM x.509 형식이 될 것입니다. 각 노드에 대해 이 명령을 실행하여 파일 이름을 변경합니다. 이 명령을 실행할 때마다 암호화하는 데 사용되는 CA 암호 구문을 입력하라는 메시지가 표시됩니다. 클러스터_개인.키 이전에는

명령
출력

각 인증서 파일을 인증 기관에서 해당 인증서 파일이 속한 각 Couchbase 서버 노드로 복사합니다. 예를 들어, 다음을 복사합니다. node1_cert.pem 를 카우치베이스 서버 노드 1에 연결하고 node2_cert.pem 를 카우치베이스 서버 노드 2에 추가합니다.

카우치베이스 서버에 인증서를 로드합니다.

이 단계는 각 카우치베이스 서버 노드에서 수행해야 합니다.

카우치베이스 서버 노드에 로그인하면 3개의 파일이 있는 폴더가 있어야 합니다. 

    • 클러스터 인증서, cluster_cert.pem
    • 노드의 (공개) 인증서, node1_cert.pem
    • 노드의 개인 키, cbnode1_private.key

이전에 생성한 CSR 파일은 더 이상 필요하지 않습니다. 

이제 Couchbase Server의 올바른 명명 규칙을 사용하여 파일을 올바른 위치로 이동해야 합니다. 각 Couchbase Server 노드에서 동일한 대상 파일 이름이 사용되지만 각 노드에는 chain.pem 그리고 pkey.key.

명령

이제 모든 올바른 파일을 Couchbase Server 구성으로 가져올 준비가 되었습니다.

클러스터 인증서를 로드하여 시작하세요:

명령
출력

다음으로 노드 인증서와 개인 키를 로드하고 경고가 인쇄되지 않는지 확인합니다:

명령
출력

이제 카우치베이스 서버 클러스터에 TLS 연결을 사용할 수 있습니다. 

클러스터 인증서 신뢰하기

관리자 노트북

관리자의 노트북에 로그인합니다. 이 경우에는 Mac을 사용하지만 Windows 및 Linux 컴퓨터에서도 비슷한 단계를 수행할 수 있습니다. 

MacOS의 명령(출력 없음)

애플리케이션 SDK

이 예에서는 Java 애플리케이션을 사용하여 Couchbase Server에 연결하며, 애플리케이션이 클러스터 인증서를 가리키도록 하겠습니다. 또 다른 옵션은 SDK에서 정의된 모든 CA를 자동으로 신뢰하므로 JVM의 cacerts 신뢰 저장소를 사용하는 것입니다. 각 프로그래밍 언어에는 CA 인증서를 신뢰하는 데 선호하는 고유한 방법이 있습니다. 

관리자 노트북에서 노드의 호스트 이름 중 하나에 대한 기본 암호화된 UI 주소를 로드합니다. 경고 없이 로드됩니다: https://node1.cb.acme.com:18091/

마찬가지로 애플리케이션에서 데이터베이스로 TLS 암호화된 연결을 만들 수 있습니다.

90일 만료 전에 다음 단계를 다시 수행하여 새 노드별 키/인증서를 생성하고 배포하는 것을 잊지 마세요. 

고급 TLS 주제

지금까지 제공된 단계는 대부분의 애플리케이션에 적합하지만, 더 복잡한 요구 사항을 충족하기 위해 Couchbase Server에서 제공하는 몇 가지 추가 기능이 있습니다. 이러한 기능은 다음 블로그에서 다룹니다. 암호화된 개인 키 및 Multi-CA, Couchbase Server 7.1의 엔터프라이즈 보안 강화 기능 

카우치베이스 서버의 여러 인증 기관

단일 인증서를 클러스터 인증서로 포함하는 대신(cluster_cert.pem / ca.pem)를 사용하면 여러 인증서를 파일에 함께 연결할 수 있습니다. 이 옵션은 인증 기관을 중복하거나 다운타임 없이 한 인증 기관에서 다른 인증 기관으로 마이그레이션을 수행할 수 있는 좋은 옵션입니다.

암호화된 노드 개인 키

클러스터 개인 키에서 수행한 것과 마찬가지로 개인 키(pkey.key) 또한 선택적으로 암호로 암호화하여 올바른 권한이 있는 사람과 시스템만 읽을 수 있도록 할 수 있습니다.

결론

TLS 인증서와 적절한 구성은 Couchbase Server에서 보안 통신을 구축하는 데 기본이 됩니다. 클러스터 인증서의 역할, 노드 인증서의 중요성, CA(인증 기관)의 관여를 이해하면 관리자는 강력한 보안 조치를 구현할 수 있습니다. 또한 SAN(주체 대체 이름)을 숙지하면 여러 도메인 또는 하위 도메인에서 인증서를 배포할 때 유연성이 향상됩니다. 이 가이드에 제시된 지침을 따르면 관리자는 Couchbase 배포의 보안을 강화하고 무단 액세스로부터 중요한 데이터를 보호할 수 있습니다.

이 시리즈를 따라가 주셔서 감사드리며, 가이드 투어가 즐거우셨기를 바랍니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

Author

Posted by Ian McCloy, 제품 관리 이사, Couchbase

이안 맥클로이는 카우치베이스의 플랫폼 및 보안 제품 관리 그룹 디렉터로 영국에 거주하고 있습니다. 그의 전담 팀은 Couchbase Server와 SaaS 데이터베이스인 Capella의 안정성, 가용성, 서비스 가능성 및 보안 아키텍처를 담당하고 있습니다. 이 팀은 또한 Couchbase Kubernetes 자율 운영자와 같은 클라우드 네이티브 플랫폼을 소유하고 있습니다. Ian은 소프트웨어 엔지니어, 기술 지원 엔지니어, 품질 보증 엔지니어, 시스템 관리자 등 다양한 경력을 보유하고 있습니다. 20년 경력의 대부분을 글로벌 기술 팀을 이끌었으며 정보 보안, 가상화 및 하드웨어 설계 분야에서 여러 특허를 보유하고 있습니다. https://www.linkedin.com/in/ianmccloy/

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.