반응형



환경변수(Environment Variable) 보안은 한 줄로 말하면:
환경변수는 하드코딩보다는 안전하지만,
절대 완전한 Secret 저장소는 아니다
가 핵심이다.
실무에서 엄청 많이 쓰지만, 잘못 쓰면 유출 사고도 많다.
왜 환경변수를 쓰냐?
예전에는:
String password = "admin1234";
처럼 코드에 직접 넣었다.
문제
- Git 유출
- 협업자 노출
- 이미지 포함
- 배포파일 포함
위험.
그래서 등장한 방식
export DB_PASSWORD=xxxxx
앱에서는
spring:
datasource:
password: ${DB_PASSWORD}
장점
1. 코드와 Secret 분리
Git에 안 올라감.
2. 환경별 관리 가능
예:
환경값
| dev | dev_pw |
| prod | real_pw |
3. CI/CD 연동 쉬움
- GitHub Actions
- Jenkins
- GitLab CI
등과 잘 맞음.
그런데 왜 완벽하지 않냐?
엄청 중요.
환경변수는:
"프로세스 메모리 안에 존재"
한다.
즉 완전 은닉이 아니다.
실제 노출 가능한 경로
1. ps / proc 노출
Linux에서:
cat /proc/<pid>/environ
가능할 수 있다.
/proc 의미
Linux 커널의:
프로세스 정보 가상 파일 시스템
이다.
<pid>
Process ID.
예:
ps -ef
로 확인 가능.
environ
해당 프로세스 환경변수 조회 파일.
즉:
cat /proc/1234/environ
하면 환경변수 노출 가능할 수 있다.
2. Docker inspect
엄청 흔한 사고.
예:
docker inspect container_name
inspect 옵션 의미
컨테이너 메타정보 조회.
환경변수 포함 가능.
결과
DB_PASSWORD 노출
가능.
3. Kubernetes describe
예:
kubectl describe pod mypod
describe
Pod 상세정보 출력.
환경변수 노출 가능.
4. 로그 사고
예:
log.info(System.getenv());
최악.
5. Crash Dump / Heap Dump
JVM 메모리 덤프에:
환경변수 포함 가능
하다.
6. CI/CD 화면 노출
GitHub Actions 로그 등.
그래서 환경변수는
"노출 가능성을 줄이는 방식"
이지,
완전한 보안 저장소는 아니다.
실무에서 언제까지 괜찮나?
소규모/중간 규모
환경변수 많이 사용.
특히:
- Docker Compose
- Spring Boot
- Node.js
하지만 대규모 운영은?
보통:
- HashiCorp Vault
- AWS Secrets Manager
- KMS
등 사용.
왜냐면 필요한 기능
기능환경변수Secret Manager
| Rotation | 어려움 | 쉬움 |
| Audit | 거의 없음 | O |
| 권한관리 | 제한적 | 강력 |
| 동적 Secret | X | O |
.env 파일도 주의
예:
DB_PASSWORD=1234
가장 흔한 사고
.env Git 커밋
반드시
.env
추가 필요.
운영환경 추천 구조
개발환경
.env
환경변수
운영환경
Vault/KMS/Secret Manager
권장.
Docker 실무 추천
❌ 비추천
ENV DB_PASSWORD=1234
왜 위험?
이미지 레이어에 남을 수 있음.
✅ 추천
docker run -e DB_PASSWORD=...
또는:
- Docker Secret
- K8s Secret
사용.
Kubernetes Secret도 완벽 아님
기본은:
Base64 인코딩
일 뿐.
암호화 아님.
그래서 추가로:
- etcd encryption
- RBAC
- Secret Store CSI
등 사용.
실무 핵심 원칙
1. 하드코딩 금지
2. 환경변수 최소 사용
장기적으로 Secret Manager 이동 고려.
3. 로그 출력 금지
4. 운영 권한 최소화
docker inspect, /proc 접근 제한.
5. Rotation 가능 구조 설계
고정 비밀번호 오래 쓰지 말 것.
핵심 한 줄
환경변수는:
Secret을 코드에서 분리하는 데 매우 유용하지만,
프로세스·컨테이너·로그·덤프 등을 통해 노출될 수 있으므로
완전한 보안 저장소로 보면 안 되며,
대규모 운영에서는 Vault/KMS 같은 전용 Secret 관리 시스템과 함께 사용하는 것이 바람직하다
이다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| VPN (1) | 2026.05.20 |
|---|---|
| Zero Trust (0) | 2026.05.20 |
| Vault (0) | 2026.05.20 |
| Secret 관리 (0) | 2026.05.20 |
| Clickjacking (0) | 2026.05.19 |
댓글