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 2048
및openssl req -x509 ...
명령어로 365일 유효한 CA 생성 - 서버 및 클라이언트 인증서 생성:
openssl genrsa
와openssl 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 build
및docker run
명령어로 컨테이너 실행 후psql
을 사용하여sslmode=verify-full
연결 테스트 - Sliplane 배포: GitHub 저장소에
ssl-config.sh
와Dockerfile
업로드 후 Sliplane에서 서비스 배포,sliplane.app
도메인을 사용한 인증서 생성 및 환경 변수 설정
결론
- SSL/TLS 설정 시 환경 변수를 런타임에만 전달하고, 인증서는
.gitignore
에 추가하여 보안 강화 - Sliplane 배포 시
sliplane.app
도메인을 사용해야 하며, 인증서 생성 시 해당 도메인을 반드시 지정해야 성공적 배포 가능 sslmode=verify-full
설정으로 암호화된 연결만 허용하여 중간자 공격 방지