본문 바로가기
system_fundamentals/security_cryptography

환경변수 보안

by 죄니안죄니 2026. 5. 20.
반응형
환경변수 보안
환경변수 보안환경변수 보안
 
 

환경변수(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

댓글