소개
Docker 레지스트리를 보안하는 것은 컨테이너 이미지의 무결성을 유지하고 Docker 기반 애플리케이션의 안전성을 확보하는 데 필수적입니다. 이 튜토리얼에서는 Docker 레지스트리용 자체 서명 SSL 인증서를 생성하는 과정을 안내하여 Docker 클라이언트와 레지스트리 간의 신뢰할 수 있는 연결을 설정합니다.
자체 서명 SSL 인증서 이해
SSL(Secure Sockets Layer) 인증서는 클라이언트와 서버 간의 안전한 연결을 설정하는 데 사용됩니다. 이는 두 당사자 간에 전송되는 데이터가 암호화되어 무단 접근으로부터 보호됨을 보장합니다. 자체 서명 SSL 인증서는 신뢰할 수 있는 인증 기관 (CA) 이 아닌 동일한 실체가 생성하고 서명하는 유형의 SSL 인증서입니다.
자체 서명 SSL 인증서는 개발 또는 테스트 환경에서 종종 사용됩니다. 여기서 CA 서명 인증서를 얻는 비용과 복잡성이 필요하지 않을 수 있습니다. 신뢰할 수 있는 CA 가 사용할 수 없거나 조직이 인증서 관리 프로세스에 대한 더 많은 제어권을 원하는 경우에도 사용할 수 있습니다.
그러나 웹 브라우저 및 기타 클라이언트는 기본적으로 자체 서명 SSL 인증서를 신뢰하지 않습니다. 클라이언트가 자체 서명 인증서를 만나면 일반적으로 인증서가 신뢰할 수 없다는 것을 나타내는 경고 메시지가 표시됩니다. 이는 안전한 연결에 의존하는 웹 애플리케이션 및 기타 서비스에 문제를 일으킬 수 있습니다.
프로덕션 환경에서 자체 서명 SSL 인증서를 사용하려면 애플리케이션 또는 서비스에 액세스할 모든 클라이언트가 인증서를 신뢰하도록 해야 합니다. 이는 자체 서명 인증서를 클라이언트에 배포하고 인증서를 신뢰하도록 구성하여 수행할 수 있습니다.
Docker 레지스트리의 맥락에서 자체 서명 SSL 인증서를 사용하는 것은 특히 조직 내에서 개인 레지스트리를 실행하는 경우 실용적인 해결책이 될 수 있습니다. 자체 서명 인증서를 생성하고 Docker 가 이를 사용하도록 구성하면 신뢰할 수 있는 CA 서명 인증서가 필요하지 않고 Docker 클라이언트와 레지스트리 간의 통신이 안전하게 보장됩니다.
Docker 레지스트리용 자체 서명 SSL 인증서 생성
필수 사항
자체 서명 SSL 인증서를 생성하기 전에 다음 필수 사항을 확인하십시오.
- Linux 기반 시스템 (이 예제에서는 Ubuntu 22.04 사용)
- OpenSSL 설치 (대부분의 Linux 배포판에 미리 설치되어 있음)
자체 서명 SSL 인증서 생성 단계
Ubuntu 22.04 시스템의 터미널을 엽니다.
SSL 인증서를 위한 개인 키를 생성합니다.
openssl genrsa -out registry.key 2048
- 개인 키를 사용하여 자체 서명 SSL 인증서를 생성합니다.
openssl req -new -x509 -key registry.key -out registry.crt -days 365
이 명령은 인증서에 대한 다양한 세부 정보 (예: 일반 이름 (CN)) 를 입력하도록 요청합니다. CN 은 Docker 레지스트리의 호스트 이름 또는 IP 주소와 일치해야 합니다.
- 생성된 인증서를 확인합니다.
openssl x509 -in registry.crt -text -noout
이렇게 하면 생성된 자체 서명 SSL 인증서의 세부 정보가 표시됩니다.
- (선택 사항) Docker 레지스트리에 사용자 정의 도메인 이름을 사용하려면 Docker 클라이언트가 실행될 시스템의
/etc/hosts파일을 업데이트하여 도메인 이름을 Docker 레지스트리의 IP 주소로 매핑할 수 있습니다.
graph LR
A[개인 키 생성] --> B[자체 서명 SSL 인증서 생성]
B --> C[인증서 확인]
C --> D[`/etc/hosts` 업데이트 (선택 사항)]
이러한 단계를 따르면 Docker 레지스트리를 보호하는 데 사용할 수 있는 자체 서명 SSL 인증서가 생성됩니다. 다음 단계는 Docker 가 이 자체 서명 인증서를 사용하도록 구성하는 것입니다.
자체 서명 인증서를 사용하도록 Docker 구성
자체 서명 인증서를 Docker 호스트로 복사
- 이전 단계에서 생성된
registry.crt파일을 Docker 호스트로 복사합니다. 파일 전송 도구 또는scp명령어를 사용하여 파일을 복사할 수 있습니다.
scp registry.crt user@docker-host:/etc/docker/certs.d/myregistry.example.com/ca.crt
user@docker-host를 Docker 호스트의 사용자 이름과 호스트 이름 또는 IP 주소로, myregistry.example.com를 Docker 레지스트리의 호스트 이름 또는 IP 주소로 바꿔주세요.
자체 서명 인증서를 사용하도록 Docker 구성
- Docker 호스트에서 자체 서명 인증서를 위한 디렉터리를 만듭니다.
sudo mkdir -p /etc/docker/certs.d/myregistry.example.com
registry.crt파일을 새로 만든 디렉터리로 복사합니다.
sudo cp registry.crt /etc/docker/certs.d/myregistry.example.com/ca.crt
- 변경 사항을 적용하려면 Docker 데몬을 다시 시작합니다.
sudo systemctl restart docker
구성 확인
- Docker 클라이언트를 사용하여 Docker 레지스트리에서 이미지를 가져오려고 시도합니다.
docker pull myregistry.example.com/my-image:latest
구성이 올바르면 Docker 클라이언트는 SSL/TLS 관련 오류 없이 레지스트리에 연결할 수 있어야 합니다.
graph LR
A[Docker 호스트로 인증서 복사] --> B[인증서 디렉터리 생성]
B --> C[디렉터리로 인증서 복사]
C --> D[Docker 데몬 다시 시작]
D --> E[구성 확인]
이러한 단계를 따르면 Docker 레지스트리에 대한 자체 서명 SSL 인증서를 사용하도록 Docker 가 구성됩니다. 이렇게 하면 인증서가 신뢰할 수 있는 인증 기관에서 서명되지 않았더라도 Docker 클라이언트와 레지스트리 간의 통신이 안전하게 보장됩니다.
요약
이 튜토리얼에 설명된 단계들을 따르면 Docker 레지스트리에 대한 자체 서명 SSL 인증서를 생성하고, Docker 가 이 인증서를 사용하도록 구성하며, Docker 클라이언트와 레지스트리 간의 안전한 통신을 보장할 수 있습니다. 이를 통해 Docker 기반 인프라의 보안을 강화하고 전체 Docker 배포 프로세스를 효율화하는 데 도움이 될 것입니다.



