Docker Compose Secrets 관리 완벽 가이드! 민감 정보와 인증 데이터 안전하게 보호하기

서버 운영 환경에서 가장 중요한 보안 요소 중 하나는 민감한 정보를 안전하게 관리하는 것입니다.

Application을 운영하다 보면 다양한 Secret 정보가 필요합니다.

예:

  • Database Password
  • API Key
  • JWT Secret
  • SSL 인증서
  • Cloud Access Key
  • 관리자 계정 정보

잘못된 관리 방식:

docker-compose.yml

↓

Password 저장

↓

Git 업로드

↓

정보 노출 위험

Production 환경에서는 Secret을 별도로 관리해야 합니다.

안전한 구조:

Secret Storage

↓

Docker Compose

↓

Container

↓

Application

이번 글에서는 Docker Compose Secrets 개념부터 환경 변수와 차이점, Secret 파일 관리, Docker Swarm Secret, Production 서버 보안 전략까지 알아보겠습니다.

Docker Compose Secrets란 무엇인가?

Secret은 민감한 데이터를 안전하게 Container에 전달하기 위한 기능입니다.

일반적인 환경 변수:

환경 변수

↓

Container 전달

Secret 방식:

Secret 저장

↓

필요한 Container만 접근

관리 대상:

  • Password
  • Token
  • Private Key
  • 인증 정보

Docker Compose Secret이 필요한 이유

가장 흔한 보안 문제:

environment:

  DB_PASSWORD: mypassword

문제:

  • Git 저장소 노출
  • 팀원 공유 시 위험
  • Backup 파일에 포함 가능

예:

GitHub 업로드

↓

비밀번호 공개

↓

Database 접근 위험

Secret 사용:

Secret 파일

↓

Container 전달

↓

외부 노출 감소

Docker Compose Environment와 Secret 차이

구분EnvironmentSecret
저장 방식환경 변수별도 파일
보안 수준일반적높음
관리 방식쉬움안전
Password가능권장
Token가능권장

개발 환경:

Environment 사용 가능

Production:

Secret 관리 권장

Docker Compose Secret 기본 구조

Secret 파일 생성:

echo "password123" > db_password.txt

구조:

project

├── docker-compose.yml

└── db_password.txt

docker-compose.yml:

services:

  mysql:

    image: mysql:8

    secrets:

      - db_password


secrets:

  db_password:

    file: ./db_password.txt

동작:

db_password.txt

↓

Docker Secret

↓

MySQL Container

Docker Compose Secret 파일 확인

Container 내부에서는 Secret이 파일 형태로 전달됩니다.

위치:

/run/secrets/

확인:

ls /run/secrets

결과:

db_password

내용 확인:

cat /run/secrets/db_password

Docker Compose MySQL Secret 적용 예제

기존 방식:

environment:

  MYSQL_ROOT_PASSWORD: password

Secret 방식:

services:

  mysql:

    image: mysql:8

    secrets:

      - mysql_root_password


secrets:

  mysql_root_password:

    file: ./mysql_password.txt

장점:

  • Compose 파일에 Password 없음
  • Git 업로드 안전
  • 관리 편리

Docker Compose Application Secret 사용

Application에서도 Secret을 사용할 수 있습니다.

예:

API_KEY

JWT_SECRET

DATABASE_PASSWORD

구조:

Secret File

↓

Application Container

↓

환경 설정

Docker Compose SSL 인증서 Secret 관리

HTTPS 환경에서는 인증서 관리가 중요합니다.

관리 대상:

  • private key
  • certificate
  • CA 파일

구조:

SSL Secret

↓

Nginx Container

↓

HTTPS 서비스

예:

services:

  nginx:

    image: nginx

    secrets:

      - ssl_key

Docker Compose Secret 권한 관리

Secret 파일은 접근 권한을 제한해야 합니다.

설정:

chmod 600 db_password.txt

의미:

소유자만 읽기 가능

확인:

ls -l db_password.txt

Docker Compose Git 보안 관리

Secret 파일은 Git에 포함하면 안 됩니다.

.gitignore:

db_password.txt

.env

구조:

Git Repository

↓

소스 코드만 저장

↓

Secret 제외

Docker Compose Docker Swarm Secret

Docker Swarm에서는 공식 Secret 기능을 제공합니다.

생성:

docker secret create db_password password.txt

확인:

docker secret ls

특징:

  • 암호화 저장
  • Container 접근 제한
  • 운영 환경 적합

Docker Compose Secret 운영 전략

Production 권장 구조:

Developer

↓

Secret Manager

↓

Docker Compose

↓

Container

관리:

  • Secret 파일 분리
  • 접근 권한 제한
  • 정기 변경
  • 노출 기록 확인

Docker Compose Secret Rotation

보안을 위해 Secret 변경이 필요합니다.

예:

기존 Password

↓

새 Password 생성

↓

Container 업데이트

과정:

Secret 변경

↓

Service 재배포

↓

접속 확인

Docker Compose Secret 장애 대응

Container가 Secret을 읽지 못하는 경우

확인:

ls /run/secrets

확인:

  • Secret 이름
  • 파일 경로
  • 권한

Permission 오류

확인:

ls -l secret-file

해결:

chmod 600

Database 연결 실패

확인:

Password 변경 여부

↓

Application 설정 확인

Docker Compose Secret Best Practice

운영 환경 추천:

  • Password 파일 분리
  • Git 저장 금지
  • 접근 권한 제한
  • Secret Rotation
  • Backup 암호화
  • 최소 접근 권한

최종 구조:

Secret Manager

↓

Docker Compose

↓

Application Container

↓

Database

↓

Encrypted Storage

자주 묻는 질문

.env 파일도 Secret인가요?

아닙니다.

.env는 환경 설정 관리 방식이고 Secret은 민감 정보 보호 목적입니다.

Password를 Compose 파일에 작성하면 안 되나요?

개발 환경에서는 가능하지만 Production에서는 권장하지 않습니다.

Secret 파일도 Backup 해야 하나요?

필요합니다.

다만 암호화하여 안전하게 보관해야 합니다.

Docker Compose에서 Secret을 사용할 수 있나요?

가능합니다.

특히 운영 환경에서는 Secret 관리 방식 사용을 권장합니다.

마무리

Docker Compose Secrets 관리는 안전한 Container 운영 환경을 만들기 위한 핵심 과정입니다.

민감한 정보는 코드와 분리하고 필요한 Container만 접근하도록 설계해야 합니다.

Production 보안 구조:

Secret 관리

↓

Container 전달

↓

권한 제한

↓

안전한 서비스 운영

이 구조를 적용하면 Database Password, API Key, 인증서 같은 중요 정보를 더욱 안전하게 관리할 수 있습니다.

다음 글에서는 개발 환경과 운영 환경을 분리하는 Docker Compose 환경 분리 구성 방법을 알아보겠습니다.

댓글 남기기