환경변수 및 시크릿 관리 (Environment Config & Secrets)
2025-10-27
요약
- 시스템 엔지니어(SE)는 모든 환경 구성을 재현 가능하고 안전하게 관리해야 한다.
- 본 문서는 환경변수 구조, Secret 관리 정책, Vault 사용 예시를 포함한다.
- 목표: 환경별 일관성 / 민감정보 보호 / 배포 자동화와 연계
| 항목 | 내용 |
|---|
| 환경 구조 | local/dev/stage/prod 통일 |
| Secret 관리 | Vault/K8s Secret 병행 |
| 자동화 | GitOps 기반 관리 |
| 보안 | Secret 노출 방지 + 주기적 로테이션 |
1. 환경 구조 원칙
| 환경 | 목적 | 예시 도메인 |
|---|
| local | 개발용 | localhost:3000 |
| dev | 내부 테스트 | dev.api.company.com |
| stage | 사전 검증 | stage.api.company.com |
| prod | 운영 | api.company.com |
모든 환경은 .env.{환경명} 파일로 구분하며, 동일 키를 사용한다.
2. 환경변수 관리 정책
| 항목 | 원칙 |
|---|
| 공통 변수 | ENV, PORT, LOG_LEVEL, DB_URL |
| 비밀 값 | .env 대신 Vault/Secret Manager 사용 |
| 버전 관리 | .env.example만 Git에 포함 |
| 자동 로드 | dotenv, configmap 활용 |
apiVersion: v1
kind: ConfigMap
metadata:
name: backend-config
data:
ENV: "prod"
LOG_LEVEL: "info"
3. Secret 관리 방식
| 방법 | 설명 | 예시 |
|---|
| Kubernetes Secret | Base64 인코딩 값 저장 | kubectl create secret |
| HashiCorp Vault | 동적 시크릿 발급, 만료 관리 | DB credentials rotation |
| AWS Secret Manager | Cloud 기반 비밀 관리 | Multi-region backup |
Vault Token은 24h 단위 갱신, 로그에 노출 금지.
4. 환경 프로비저닝 자동화
- 모든
.env 및 Secret은 Ansible / Terraform / ArgoCD Values 로 자동 배포
- 수동 편집 금지 (
kubectl edit 불허)
- 변경 시 Git MR 통한 승인 필수