Docker는 현대 애플리케이션 개발과 배포에 있어서 매우 중요한 도구입니다. 그러나 Docker 데몬에 대한 보안이 적절히 설정되지 않은 경우 심각한 보안 문제가 발생할 수 있습니다. 이 글에서는 Docker 데몬을 안전하게 보호하는 방법에 대해 알아보겠습니다.
Docker 데몬에 접근 권한이 있는 사람은 다음과 같은 문제를 일으킬 수 있습니다:
Docker는 기본적으로 UNIX 소켓을 통해 Docker 데몬 서비스를 호스트 내에서만 노출하여 외부 접근을 방지합니다. 그러나 이는 데몬 서비스 자체에 대한 설정일 뿐, Docker로 배포된 애플리케이션에 대한 설정은 아닙니다. 애플리케이션은 여전히 호스트에 포트를 공개함으로써 접근할 수 있습니다.
현재는 호스트에 로그인한 사용자만 Docker 서비스에 접근할 수 있습니다. 따라서 첫 번째 보안 단계는 Docker 호스트 자체를 보호하는 것입니다. 이는 일반적인 서버 보안 모범 사례를 따르는 것을 포함합니다:
때로는 다른 관리 호스트나 사용자 노트북, 또는 다른 도구와의 통합 목적으로 Docker 데몬에 외부 접근을 허용해야 할 수도 있습니다. 이는 절대적으로 필요한 경우에만 수행해야 합니다. 이를 위해 daemon.json
파일에 hosts
옵션을 추가하여 Docker 데몬에 대한 외부 접근을 허용할 수 있습니다. 그러나 이 경우에도 Docker 데몬을 조직 내에서만 접근 가능한 비공개 인터페이스에 노출하도록 해야 합니다.
외부 접근을 허용할 경우 TLS 인증서를 통한 통신 보안이 필요합니다. 이를 위해 인증 기관(Certificate Authority, CA)을 구성하고 서버에 대한 인증서를 생성해야 합니다. 다음과 같은 단계로 설정합니다:
server.pem
과 serverkey.pem
인증서를 생성하여 Docker 호스트에 배치합니다.tls
옵션을 true
로 설정하고 인증서를 읽도록 구성합니다. 이때 포트는 2376으로 설정됩니다.true
로 설정하여 안전한 연결을 시작합니다.이 설정을 통해 Docker 클라이언트와 Docker 서버가 암호화된 방식으로 통신할 수 있지만, 여전히 인증은 이루어지지 않습니다.
인증서 기반 인증을 활성화하려면 다음과 같은 추가 설정이 필요합니다:
cacert
를 Docker 데몬 서버 측에 복사하고 tlscacert
매개변수를 daemon.json
파일에 구성합니다. 또한 tlsverify
플래그를 true
로 설정합니다. 이 플래그는 클라이언트가 보낸 인증서를 검증하는 데 사용됩니다.client.pem
과 clientkey.pem
이라고 명명합니다. 이를 호스트에 연결하려는 클라이언트 서버에 cacert
와 함께 안전하게 공유합니다.true
로 설정하고 클라이언트 인증서를 설정합니다.이제 CA 서버에서 서명된 인증서를 가진 클라이언트만 Docker 데몬에 접근할 수 있습니다.
true
로 설정합니다.true
로 설정하고, TLS 인증서, TLS 키, TLS CA 인증서를 설정합니다.Docker 데몬을 안전하게 보호하는 방법에 대해 알아보았습니다. 이 가이드를 통해 Docker 데몬을 안전하게 보호할 수 있습니다. 보안 설정을 꼼꼼히 따라하여 Docker 환경을 안전하게 유지하세요.