Docker 기반 PostgreSQL 보안: SSL/TLS 설정 가이드
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

SSL/TLS 설정을 통한 Docker 기반 PostgreSQL 보안

카테고리

인프라/DevOps/보안

서브카테고리

인프라 구성 요소와 상호작업

대상자

  • *Docker 및 PostgreSQL 사용자**

- 중급 이상의 기술 수준을 요구하는 DevOps 엔지니어 및 데이터베이스 관리자

- TLS 설정, Docker 컨테이너 구성, 인프라 배포에 관심 있는 개발자

핵심 요약

  • SSL/TLS 설정은 PostgreSQL의 보안을 강화하기 위해 필수적이며, sslmode=verify-full로 암호화된 연결만 허용
  • openssl 명령어를 사용한 CA, 서버 및 클라이언트 인증서 생성 후 Docker 환경 변수에 삽입
  • Dockerfile에 ssl-config.sh 스크립트를 복사하여 PostgreSQL 컨테이너 내 SSL 설정 자동화

섹션별 세부 요약

1. 인증서 생성

  • 루트 CA 인증서 생성: openssl genrsa -out rootCA.key 2048openssl req -x509 ... 명령어로 365일 유효한 CA 생성
  • 서버 및 클라이언트 인증서 생성: openssl genrsaopenssl x509 명령어로 localhost 또는 사용자 지정 도메인으로 서명된 인증서 생성
  • 인증서 보안 주의사항: .gitignore에 추가 및 Docker 이미지에 직접 포함 금지

2. SSL 설정 스크립트 작성

  • ssl-config.sh 스크립트 생성: 서버 인증서, 키, CA 파일을 Docker 컨테이너에 복사 및 PostgreSQL 설정 파일(postgresql.conf, pg_hba.conf)에 SSL 관련 설정 추가
  • 필수 환경 변수: SERVER_CRT, SERVER_KEY, ROOT_CA_CRT로 인증서 내용을 전달

3. Dockerfile 구성

  • Dockerfile 생성: postgres:17.5 기반 이미지 사용, ssl-config.sh/docker-entrypoint-initdb.d/에 복사하여 초기화 스크립트로 실행

4. 로컬 테스트 및 배포

  • 로컬 테스트: docker builddocker run 명령어로 컨테이너 실행 후 psql을 사용하여 sslmode=verify-full 연결 테스트
  • Sliplane 배포: GitHub 저장소에 ssl-config.shDockerfile 업로드 후 Sliplane에서 서비스 배포, sliplane.app 도메인을 사용한 인증서 생성 및 환경 변수 설정

결론

  • SSL/TLS 설정 시 환경 변수를 런타임에만 전달하고, 인증서는 .gitignore에 추가하여 보안 강화
  • Sliplane 배포 시 sliplane.app 도메인을 사용해야 하며, 인증서 생성 시 해당 도메인을 반드시 지정해야 성공적 배포 가능
  • sslmode=verify-full 설정으로 암호화된 연결만 허용하여 중간자 공격 방지