[CKS] 28. Docker Securing the Daemon

도커 데몬 원격 접속 시 발생할 수 있는 보안 위협을 방지합니다. TLS 인증으로 트래픽을 암호화하고 허가된 사용자만 접속을 제어하여 시스템과 데이터를 안전하게 보호할 수 있습니다.

개요

Docker Daemon을 보호하는 방법과 데몬에 대한 보안을 수행해야하는 이유를 설명합니다.

Docker 데몬을 해킹한다면

기본적으로 Docker API는 Unix 소켓에 바인딩되어 엑세스를 제한하고 있습니다.

내부의 인터폰처럼 내부 프로세스들끼리만 통신하는 유닉스 소켓을 구성하며 /var/run/docker.sock 파일 형태로 존재합니다. 이는 기본적으로 root 사용자나 docker 그룹에 속한 사용자만 /var/run/docker.sock 파일에 접근(읽기/쓰기)할 수 있는 권한을 가지며 자연스럽게 네트워크 혹은 권한이 없는 일반 사용자에게는 접속이 허가되지 않습니다.

Docker host 보안

하지만 외부 연결을 허용하는 경우 host에 대한 보안 조치를 수행해야하는데 이는 다음과 같은 체크리스트가 존재합니다.

Docker 데몬 expose

여러 시나리오에서는 Docker 데몬에 대한 외부 엑세스를 허용하곤 합니다.

앞선 자료를 통해 정리했듯이 hosts 옵션을 추가하여 수정하는데, 각 접속 위치에 따라 host ip를 추가합니다.

{
  "hosts": [ "tcp://<HOST_IP>:2375" ]
}

TLS

일반적으로 권장되는 방식은 다음과 같습니다.

  1. CA 설정과 서버 인증서(server.pem / serverkey.pem)을 생성합니다.
  2. TLS를 활성화하고 포트를 변경하거나 숨깁니다.

인증서를 소유한 클라이언트로만 제한하기 위해선 tlsverify 옵션을 활성화합니다.

docker --tlscert=<path_to_cert> --tlskey=<path_to_key> --tlscacert=<path_to_ca_cert> ps

서버 구성은 다음과 같습니다.

{
  "hosts": ["tcp://<HOST_IP>:2376"],
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem",
  "tlsverify": true,
  "tlscacert": "/var/docker/cacert.pem"
}

TLS는 트래픽 암호화를 보장하지만, 클라이언트 인증을 자체적으로 강제하지는 않는다는 점을 주의해야합니다.