[Cluster Setup and Hardening] Docker 데몬 보안 가이드: 핵심 보안 전략과 설정 방법

IMKUNYOUNG·2024년 7월 6일
0

CKS

목록 보기
26/70

Docker는 현대 애플리케이션 개발과 배포에 있어서 매우 중요한 도구입니다. 그러나 Docker 데몬에 대한 보안이 적절히 설정되지 않은 경우 심각한 보안 문제가 발생할 수 있습니다. 이 글에서는 Docker 데몬을 안전하게 보호하는 방법에 대해 알아보겠습니다.

Docker 데몬 접근 권한의 문제점

Docker 데몬에 접근 권한이 있는 사람은 다음과 같은 문제를 일으킬 수 있습니다:

  1. 기존 컨테이너 삭제: 애플리케이션을 호스팅하는 컨테이너를 삭제하여 사용자에게 영향을 미칠 수 있습니다.
  2. 데이터 손실: Docker 볼륨 형태로 저장된 애플리케이션 데이터를 삭제하여 데이터 손실을 초래할 수 있습니다.
  3. 비트코인 채굴 등 악의적 사용: 자신의 애플리케이션을 실행하여 비트코인 채굴 같은 악의적인 목적에 사용할 수 있습니다.
  4. 호스트 시스템 루트 접근: 프리빌리지 컨테이너를 실행하여 호스트 시스템 자체에 루트 접근 권한을 얻을 수 있습니다. 이는 네트워크 전체를 위험에 빠뜨릴 수 있습니다.

Docker 데몬의 기본 보안 설정

Docker는 기본적으로 UNIX 소켓을 통해 Docker 데몬 서비스를 호스트 내에서만 노출하여 외부 접근을 방지합니다. 그러나 이는 데몬 서비스 자체에 대한 설정일 뿐, Docker로 배포된 애플리케이션에 대한 설정은 아닙니다. 애플리케이션은 여전히 호스트에 포트를 공개함으로써 접근할 수 있습니다.

현재는 호스트에 로그인한 사용자만 Docker 서비스에 접근할 수 있습니다. 따라서 첫 번째 보안 단계는 Docker 호스트 자체를 보호하는 것입니다. 이는 일반적인 서버 보안 모범 사례를 따르는 것을 포함합니다:

  • 루트 사용자 비활성화
  • 서버 접근 제어
  • 비밀번호 기반 인증 비활성화
  • 엄격한 SSH 키 기반 인증 적용
  • 사용하지 않는 포트 비활성화

외부 접근 설정

때로는 다른 관리 호스트나 사용자 노트북, 또는 다른 도구와의 통합 목적으로 Docker 데몬에 외부 접근을 허용해야 할 수도 있습니다. 이는 절대적으로 필요한 경우에만 수행해야 합니다. 이를 위해 daemon.json 파일에 hosts 옵션을 추가하여 Docker 데몬에 대한 외부 접근을 허용할 수 있습니다. 그러나 이 경우에도 Docker 데몬을 조직 내에서만 접근 가능한 비공개 인터페이스에 노출하도록 해야 합니다.

TLS를 통한 통신 보안

외부 접근을 허용할 경우 TLS 인증서를 통한 통신 보안이 필요합니다. 이를 위해 인증 기관(Certificate Authority, CA)을 구성하고 서버에 대한 인증서를 생성해야 합니다. 다음과 같은 단계로 설정합니다:

  1. 서버 인증서 생성: server.pemserverkey.pem 인증서를 생성하여 Docker 호스트에 배치합니다.
  2. daemon.json 구성: tls 옵션을 true로 설정하고 인증서를 읽도록 구성합니다. 이때 포트는 2376으로 설정됩니다.
  3. 환경 변수 설정: Docker TLS 환경 변수를 true로 설정하여 안전한 연결을 시작합니다.

이 설정을 통해 Docker 클라이언트와 Docker 서버가 암호화된 방식으로 통신할 수 있지만, 여전히 인증은 이루어지지 않습니다.

인증서 기반 인증

인증서 기반 인증을 활성화하려면 다음과 같은 추가 설정이 필요합니다:

  1. CA 인증서 구성: cacert를 Docker 데몬 서버 측에 복사하고 tlscacert 매개변수를 daemon.json 파일에 구성합니다. 또한 tlsverify 플래그를 true로 설정합니다. 이 플래그는 클라이언트가 보낸 인증서를 검증하는 데 사용됩니다.
  2. 클라이언트 인증서 생성: 클라이언트용 인증서를 생성하고 이를 client.pemclientkey.pem이라고 명명합니다. 이를 호스트에 연결하려는 클라이언트 서버에 cacert와 함께 안전하게 공유합니다.
  3. 클라이언트 설정: 클라이언트 측에서는 Docker TLS verify 플래그를 true로 설정하고 클라이언트 인증서를 설정합니다.

이제 CA 서버에서 서명된 인증서를 가진 클라이언트만 Docker 데몬에 접근할 수 있습니다.

요약

  • 암호화만 활성화: 서버 측에서 TLS 플래그와 TLS 인증서 및 키 플래그를 구성하고, 클라이언트 측에서는 TLS 플래그를 true로 설정합니다.
  • 인증 활성화: 서버 측에서 TLS verify 플래그를 설정하고 서버 인증서 및 키, 그리고 CA 인증서를 함께 설정합니다. 클라이언트 측에서는 TLS verify 플래그를 true로 설정하고, TLS 인증서, TLS 키, TLS CA 인증서를 설정합니다.

마무리

Docker 데몬을 안전하게 보호하는 방법에 대해 알아보았습니다. 이 가이드를 통해 Docker 데몬을 안전하게 보호할 수 있습니다. 보안 설정을 꼼꼼히 따라하여 Docker 환경을 안전하게 유지하세요.

0개의 댓글