도커 데몬에 보안 적용하기 --tlsverify
도커 설치 시 보안 연결 설정이 안되어 있다. 실제 운영 환경에서 도커를 사용한다면 보안을 적용해야 한다. 아니면 Remote API를 위해 바인딩된 IP 주소와 포트 번호만 알면 도커를 제어할 수 있기 때문이다.
보안을 적용할 때 사용될 파일은 총 5개다.
ca.pem
server-cert.pem
server-key.pem
cert.pem
key.pem
클라이언트가 도커 데몬에 접근하기 위해 필요한 파일이 ca.pem, cert.pem, key.pem이다.
서버측 파일 생성
mkdir keyss && cd keys
openssl genrsa -aes256 -out ca-key.pem 4096
1. 마지막에 비밀번호를 두 번 입력해 줘서 인증서에 사용될 키를 생성해 준다.
openssl req -new -x509 -days 10000 -key ca-key.pem -sha256 -out ca.pem
2. 공용 키를 생성한다. 모든 항목을 공백으로 입력해도 상관없다.
openssl genrsa -out server-key.pem 4096
3. 서버 측에서 사용될 키를 생성한다.
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
4. 서버 측에서 사용될 인증서를 위한 인증 요청서 파일을 생성한다. $HOST에는 사용 중인 도커의 호스트 IP 주소 혹은 도메인 이름을 입력한다. 단, 외부에서 접근 가능한 주소, 도메인이어야 한다.(아래도 같다.)
ech subjectAltName = IP:$HOST,IP:127.0.0.1 > extfile.cnf"
5. 접속에 사용될 IP 주소를 extfile.cnf 파일로 저장한다.
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf
6. 서버측 인증서 파일을 생성한다.
클라이언트 측에서 사용할 파일 생성
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile.cnf
1. 클라이언트 측의 키 파일과 인증 요청 파일을 생성하고, extfile.cnf 파일에 extendedKeyUsage 항목을 추가한다.
openssl x509 -req -days 30000 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -exfile extfile.cnf
2. 클라이언트 측의 인증서를 생성한다.
ls
3. 파일이 잘 만들어졌는지 확인한다. 5개의 pem이 있어야 한다.
chmod -v 0400 ca-key.pem key.pem server-key.pem ca.pem server-cert.pem cert.pem
4. 생성된 파일의 쓰기 권한을 삭제해 읽기 전용으로 만들어 준다.
cp {ca,server-cert,server-key,cert,key}.pem ~/.docker
5. 도커 데몬 설정 파일이 존재하는 디렉터리로 도커 데몬 측에서 필요한 파일을 옮긴다. 필수는 아니지만 도커 데몬에 필요한 파일을 한 곳에 모아두면 관리하기 쉽다.
docker --tlsverify \\
--tlscacert=/root/.docker/ca.pem \\
--tlscert=/root/.docker/server-cert.pem \\
--tlskey=/root/.docker/server-key.pem \\
-H=0.0.0.0:2376 \\
-H unix:///var/run/docker.sock
TLS 보안 적용을 활성화 하기 위해서 -tlsverify 옵션을 추가하고 나머지 명령어에서는 보안을 적용하는데 필요한 파일의 위치를 입력해 준다. -tlsverify 옵션은 도커 서비스의 설정 파일을 변경해서 사용할 수 있다는 것을 알아둬야 한다.
docker -H 192.168.99.100:2376 version
다른 도커 호스트에서 도커 클라이언트에 -H를 추가해 보안이 적용된 도커를 제어한다.
추가로 도커의 Remote API를 사용하는 포트는 보안이 적용되어 있으면 2375, 적용되어 있지 않다면 2376 포트를 설정해 준다. 관례이다.
TLS 연결 설정하지 않았다는 에러가 출력이 되는데 ca.pem, key.pem, cert.pem 파일이 필요하다. 이 파일을 docker 명령어의 옵션에 명시하고 다시 원격 제어를 시도한다.
docker -H 192.168.99.100:2376 \\
--tlscacert=/root/.docker/ca.pem \\
--tlscert=/root/.docker/cert.epm \\
--tlskey=/root/.docker/key.pem \\
--tlscerify version
이제 정상적으로 도커 클라이언트 원격 제어가 된다.
vi ~/.bashrc
export DOCKER_CERT_PATH="/root/.docker"
export DOCKER_TLS_VERIFY=1
셸을 사용할 때 마다 환경변수의 값을 설정할 수 있다.
curl <https://192.168.99.100:2376/version> \\
--cert ~/.docker/cert.pem \\
--key ~/.docker/key.pem \\
--cacert ~/.docker/ca.pem
curl로 보안이 적용된 도커 데몬의 Remote API를 사용하기 위해 플래그를 추가한다.
📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] : 스토리지 드라이버 원리, CoW 및 RoW 그리고 이미지와 컨테이너 (0) | 2022.02.28 |
---|---|
[Docker] : 도커 스토리지 드라이버 변경하기 --storage-driver (0) | 2022.02.28 |
[Docker] : 도커 데몬 제어 명령어 -H (0) | 2022.02.27 |
[Docker] : 도커 데몬 설정 (0) | 2022.02.27 |
[Docker] : 도커 데몬 실행, 중단하기 (0) | 2022.02.27 |
댓글