티스토리 뷰
728x90
Kubernetes의 ConfigMap과 Secret은 애플리케이션 구성 정보를 외부에서 주입(injection)하기 위한 중요한 리소스입니다. 둘 다 환경 변수, 커맨드라인 인자, 볼륨을 통해 파드에 주입될 수 있으며, 애플리케이션 코드 수정 없이 환경 설정 변경이 가능하게 해줍니다.
하지만 사용 목적과 보안 수준에서 중요한 차이점이 존재합니다.
🔍 ConfigMap vs Secret: 차이점
항목 | ConfigMap | Secret |
용도 | 일반 설정값 저장 (예: DB 호스트, 포트 등) | 민감한 정보 저장 (예: 비밀번호, API 키, TLS 인증서 등) |
데이터 저장 방식 | 일반 텍스트 (Base64 인코딩 없이 저장됨) | Base64 인코딩된 문자열로 저장됨 |
보안 | 암호화 없이 저장됨 (노출 위험 높음) | 기본적으로 etcd에 Base64로 저장되며, 필요 시 암호화 설정 가능 |
기본 권한 제어 | 없음 (RBAC으로 제한 가능) | RBAC을 통해 접근 제어 가능 |
쿠버네티스 리소스 유형 | v1.ConfigMap | v1.Secret |
예시 사용처 | 로그 레벨, 외부 API 주소 등 | DB 비밀번호, JWT 시크릿, SSH 키 등 |
✅ ConfigMap 장단점
장점
- 비민감 설정 관리에 적합
→ 환경 변수나 구성파일을 외부화하여 재빌드 없이 설정 변경 가능 - YAML 관리가 쉬움
→ Base64 인코딩 불필요, 사람이 읽고 쓰기 쉬움
단점
- 보안 취약
→ 민감한 데이터를 저장하면 누구나 쉽게 열람 가능 - 감사 및 추적 기능 부족
→ 변경 이력 확인이 어렵고 감사(Audit) 로그 관리가 어려움
✅ Secret 장단점
장점
- 보안성 우수
→ 민감 정보 보호에 최적화, RBAC + etcd 암호화 설정 가능 - 다양한 Secret 타입 지원
→ Opaque, TLS, Docker config 등 다양한 유형 제공
단점
- YAML 작성이 불편함
→ Base64 인코딩 필수, 사람이 직접 읽기 어려움 - 기본적으로 완벽한 보안을 제공하지 않음
→ Base64는 단순 인코딩, 암호화 설정은 별도 구성 필요 (예: EncryptionConfiguration)
🛠 언제 무엇을 써야 할까?
사용 시나리오 | 추천 리소스 |
DB 호스트, 포트, 로그 레벨 등 설정값 | ConfigMap |
DB 비밀번호, API Key, OAuth 토큰 | Secret |
TLS 인증서, SSH 키 등 민감 파일 | Secret (특히 TLS 타입) |
📌 정리
- ConfigMap은 비민감한 설정 정보를 관리하는 데 이상적이며,
- Secret은 민감한 정보를 안전하게 주입하는 데 필수입니다.
실무에서는 다음과 같은 보안 모범 사례를 따르는 것이 좋습니다:
- ConfigMap에는 절대 민감 정보를 넣지 마세요.
- Secret을 사용할 땐 etcd 암호화를 활성화하고, RBAC으로 접근을 제한하세요.
- CI/CD 파이프라인에서 Secret을 자동으로 주입하거나 갱신하도록 구성하세요.
728x90
'쿠버네티스' 카테고리의 다른 글
쿠버네티스 kubectl 명령어 정리 (0) | 2025.04.04 |
---|---|
쿠버네티스 자동화 종류 (0) | 2025.04.04 |
Kubespray 간략 설치 방법 (0) | 2025.03.29 |
Traefik의 주요 특징 (0) | 2025.03.29 |
쿠버네티스환경에 Config Server 없이 중앙 집중형 설정 관리 방법 (0) | 2025.03.27 |