Docker Compose Secrets Manager 운영 완벽 가이드! 민감 정보 안전하게 관리하는 방법 알아보기

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

Application은 다양한 Secret 정보를 필요로 합니다.

예:

Database Password

API Key

SSL Certificate

Cloud Access Token

JWT Secret

하지만 많은 환경에서 이러한 정보를 환경 변수나 설정 파일에 직접 입력하는 문제가 발생합니다.

잘못된 방식:

environment:

  DB_PASSWORD: password123

문제:

Git Push

↓

Secret 노출

↓

보안 사고 발생

Production 환경에서는 Secret을 별도로 관리하고 필요한 Container에만 안전하게 전달해야 합니다.

기본 구조:

Developer

↓

Secret Manager

↓

Docker Compose

↓

Container

이번 글에서는 Docker Compose Secrets 개념부터 Secret 저장 방식, Docker Secret 활용, External Secret Manager 연동, Production 보안 운영 방법까지 알아보겠습니다.

Docker Compose Secrets란?

Secrets는 민감한 정보를 안전하게 저장하고 Container에 전달하는 기능입니다.

일반 Configuration:

PORT=8080

MODE=production

Secret:

PASSWORD

TOKEN

PRIVATE KEY

차이:

Config

↓

일반 설정


Secret

↓

보호 대상 정보

환경 변수 방식의 문제점

많이 사용하는 방식:

services:

  database:

    environment:

      MYSQL_PASSWORD: mypassword

문제:

Git 저장소 노출

docker-compose.yml

↓

GitHub

↓

Password 공개

Log 노출

환경 변수 출력 과정에서 노출 가능

접근 관리 어려움

누가 Secret을 확인했는지 추적 어려움

Docker Compose Secrets 기본 구조

안전한 구조:

Secret File

↓

Docker Compose

↓

Container Mount

↓

Application 사용

예:

/secrets/db_password

Container 내부:

/run/secrets/db_password

Docker Compose Secret 파일 생성

예:

echo "mypassword" > db_password.txt

확인:

cat db_password.txt

파일:

mypassword

Docker Compose Secrets 설정

docker-compose.yml:

services:

  app:

    image: my-app

    secrets:

      - db_password


secrets:

  db_password:

    file: ./db_password.txt

구조:

db_password.txt

↓

Docker Secret

↓

Container

Container 내부 Secret 확인

Container 내부:

cat /run/secrets/db_password

결과:

mypassword

Application은 환경 변수 대신 Secret File을 읽어 사용합니다.

Docker Compose Secret과 Environment 비교

Environment:

DB_PASSWORD=password

Secret:

/run/secrets/db_password

비교:

항목EnvironmentSecret
보안낮음높음
Git 노출 위험있음낮음
권한 관리어려움가능
운영 환경비추천권장

Docker Compose Database Secret 관리

Database는 대표적인 Secret 관리 대상입니다.

예:

MySQL Password

PostgreSQL Password

Redis Password

구조:

Secret Manager

↓

Database Container

↓

Application

장점:

  • Password 보호
  • 변경 관리
  • 접근 제한

Docker Compose API Key 관리

외부 API 사용 시 Key가 필요합니다.

예:

Payment API Key

Cloud API Token

Email Service Key

잘못된 방식:

const key="123456"

권장:

Secret File

↓

Application

Docker Compose SSL Certificate 관리

HTTPS 운영에서는 Certificate 보호가 중요합니다.

관리 대상:

Private Key

Certificate

CA File

구조:

Secret Storage

↓

Nginx Container

↓

HTTPS Service

External Secret Manager 연동

기업 환경에서는 별도의 Secret Manager를 사용합니다.

대표:

  • HashiCorp Vault
  • AWS Secrets Manager
  • Google Secret Manager
  • Azure Key Vault

구조:

External Secret Manager

↓

Docker Compose

↓

Container

HashiCorp Vault 구조

Vault:

Secret 저장 시스템

구조:

Application

↓

Vault Authentication

↓

Secret 가져오기

↓

Application 실행

장점:

  • 중앙 관리
  • Audit Log
  • Access Policy

Docker Compose Secret Rotation

Secret은 정기적으로 변경해야 합니다.

예:

기존 Password

↓

새 Password 생성

↓

Service 업데이트

Rotation 과정:

Secret 변경

↓

Container 재배포

↓

새 Secret 적용

Docker Compose Secret 접근 권한 관리

모든 Container가 Secret을 볼 필요는 없습니다.

좋은 구조:

Payment Service

↓

Payment API Key 사용

나쁜 구조:

모든 Container

↓

모든 Secret 접근

원칙:

최소 권한

Docker Compose CI/CD Secret 관리

CI/CD에서도 Secret 보호가 필요합니다.

구조:

GitHub Actions

↓

Encrypted Secret

↓

Docker Build

↓

Deploy

주의:

Docker Image Layer에 Secret 저장 금지

잘못된 Dockerfile:

COPY password.txt /

문제:

Image History에 남음

Docker Compose Secret 보안 Best Practice

추천:

Secret 파일 Git 제외

.gitignore

↓

secret 파일 제외

평문 저장 금지

Password 직접 입력 금지

최소 권한 적용

필요한 Service만 접근

Rotation 운영

주기적 변경

Audit 기록

Secret 접근 기록 관리

Docker Compose Production Secret 구조

기업 운영:

Developer

↓

CI/CD

↓

Secret Manager

↓

Docker Compose

↓

Container

↓

Application

보안 흐름:

Secret 생성

↓

암호화 저장

↓

필요 시 전달

↓

사용 후 보호

자주 묻는 질문

Docker Compose Secrets는 Kubernetes Secret과 같은 기능인가요?

개념은 비슷하지만 Kubernetes는 더 큰 Container Orchestration 환경을 위한 기능입니다.

환경 변수로 Secret을 관리하면 안 되나요?

개발 환경에서는 사용할 수 있지만 Production에서는 별도 Secret 관리가 권장됩니다.

Secret 파일도 해킹되면 위험한가요?

네.

파일 권한과 접근 제어가 중요합니다.

Secret Rotation은 꼭 필요한가요?

장기 운영 서버에서는 주기적인 변경이 보안을 강화합니다.

마무리

Docker Compose Secrets Manager 운영은 Database Password, API Key, Certificate 같은 민감 정보를 안전하게 보호하기 위한 핵심 보안 기술입니다.

최종 구조:

Secret Manager

↓

Docker Compose

↓

Container

↓

Application

Production 서버에서는 서비스 성능뿐 아니라 민감 정보가 어디에 저장되고 누가 접근하는지 관리하는 것이 중요합니다.

다음 글에서는 Container 간 통신을 안전하게 분리하는 Docker Compose Network Isolation 보안 구성 방법을 알아보겠습니다.

댓글 남기기