Kubernetes 환경에서는 Database Password, API Key, Token, Certificate 같은 민감한 정보가 필요합니다.
하지만 이러한 정보를 Application 코드나 YAML 파일에 직접 작성하면 심각한 보안 문제가 발생할 수 있습니다.
예:
Application 설정 파일
↓
Database Password 포함
↓
Git Repository 저장
↓
Credential 노출 위험
Kubernetes는 이러한 문제를 해결하기 위해 Secret Resource를 제공합니다.
Secret은 민감한 데이터를 별도로 관리하고 Pod에 안전하게 전달하는 Kubernetes 보안 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Secret | 민감 정보 저장 |
| ServiceAccount | 인증 정보 관리 |
| Volume Mount | Secret 전달 |
| RBAC | 접근 권한 제어 |
| Encryption at Rest | 저장 데이터 보호 |
Secret Management 구조를 이해하면 Kubernetes 환경에서 안전한 Credential 운영이 가능합니다.
Kubernetes Secret이란?
Secret은 Kubernetes에서 비밀번호, Token, 인증서 같은 민감 정보를 저장하는 Resource입니다.
관리 대상:
- Database Password
- API Token
- SSH Key
- TLS Certificate
- Cloud Credential
일반 Configuration 데이터는 ConfigMap,
민감 정보는 Secret을 사용합니다.
Kubernetes Secret과 ConfigMap 차이
두 기능은 비슷하지만 목적이 다릅니다.
| 구분 | ConfigMap | Secret |
|---|---|---|
| 목적 | 일반 설정값 | 민감 정보 |
| 데이터 | 환경 설정 | Password·Token |
| 보안 수준 | 일반 | 암호화 설정 가능 |
| 사용 예 | Application 설정 | Database 인증 정보 |
보안 정보는 Secret으로 관리하는 것이 좋습니다.
Kubernetes Secret 동작 구조
전체 흐름:
Secret 생성
↓
API Server 저장
↓
Pod 요청
↓
kubelet 전달
↓
Container 사용
Application 코드에 직접 Credential을 포함하지 않습니다.
Kubernetes Secret 생성 방법
Secret 생성:
kubectl create secret generic db-secret \
--from-literal=username=admin \
--from-literal=password=password123
확인:
kubectl get secret
Secret Resource가 생성됩니다.
Kubernetes Secret YAML 구조
예:
apiVersion: v1
kind: Secret
metadata:
name: database-secret
type: Opaque
data:
username: YWRtaW4=
password: cGFzc3dvcmQ=
Secret 데이터는 Base64 형태로 저장됩니다.
Kubernetes Secret Base64 보안 이해
중요한 부분입니다.
Base64는 암호화가 아닙니다.
변환:
Plain Text
↓
Base64 Encoding
↓
저장
따라서 Base64만으로는 안전하지 않습니다.
추가 보안 설정이 필요합니다.
Kubernetes Encryption at Rest
Secret 데이터를 저장할 때 암호화를 적용할 수 있습니다.
기본:
Secret
↓
etcd 저장
보안 강화:
Secret
↓
Encryption Provider
↓
암호화된 etcd 저장
Database Layer에서 보호합니다.
Kubernetes Secret Volume Mount
Secret을 Container 파일 형태로 전달할 수 있습니다.
구조:
Secret
↓
Volume
↓
Container
↓
File 접근
예:
volumes:
- name: secret-volume
secret:
secretName: database-secret
Application이 파일로 Credential을 사용할 수 있습니다.
Kubernetes Secret Environment Variable 사용
Secret 값을 환경 변수로 전달할 수 있습니다.
예:
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: database-secret
key: password
Container 내부에서 사용할 수 있습니다.
Kubernetes TLS Secret 관리
HTTPS 인증서도 Secret으로 관리합니다.
예:
kubectl create secret tls my-cert \
--cert=tls.crt \
--key=tls.key
Ingress HTTPS 구성에서 사용됩니다.
Kubernetes ImagePullSecret
Private Registry 인증 정보도 Secret을 사용합니다.
구조:
Secret
↓
Registry 인증
↓
Private Image Pull
보안 Registry 운영에 필수입니다.
Kubernetes Secret과 RBAC
Secret은 민감 정보이므로 접근 제어가 중요합니다.
예:
개발자:
Pod 조회 가능
Secret 조회 불가
운영자:
Secret 관리 가능
최소 권한 원칙을 적용해야 합니다.
Kubernetes Secret 접근 위험
잘못된 설정:
모든 User
↓
Secret 조회 가능
↓
Password 노출
따라서 Secret 접근 권한 제한이 필요합니다.
Kubernetes External Secret 관리
대규모 환경에서는 외부 Secret Manager를 사용합니다.
예:
- HashiCorp Vault
- AWS Secrets Manager
- Azure Key Vault
- Google Secret Manager
Kubernetes 내부에 직접 저장하지 않고 연동합니다.
Kubernetes Secret Rotation
Credential은 주기적으로 변경해야 합니다.
Rotation 과정:
기존 Secret 변경
↓
새 Credential 생성
↓
Application 업데이트
↓
기존 Credential 제거
보안 운영에서 중요한 과정입니다.
Kubernetes Secret 장애 분석
Secret 문제가 발생하면 확인합니다.
Secret 확인:
kubectl get secret
상세 확인:
kubectl describe secret secret-name
Pod 확인:
kubectl describe pod pod-name
확인:
- Secret 이름 오류
- 권한 문제
- Mount 오류
- Key 이름 오류
Kubernetes Secret 운영 Best Practice
Production 환경:
- Secret 암호화 적용
- RBAC 제한
- External Secret 활용
- Rotation 정책 운영
- Audit Logging 활성화
- Git 저장 금지
민감 정보 보호 체계를 구축해야 합니다.
Kubernetes Secret과 DevSecOps
안전한 Pipeline:
Code
↓
Secret 분리
↓
CI/CD Credential 관리
↓
Deployment
↓
Runtime Secret 주입
개발 과정부터 보안을 적용합니다.
Kubernetes Secret Monitoring
확인 항목:
- Secret 접근 기록
- 권한 변경
- Credential 사용
- Rotation 상태
Audit 기반 관리가 필요합니다.
Kubernetes Secret Management 운영 전략
Production 환경:
Secret 정책 정의
↓
Encryption 적용
↓
RBAC 설정
↓
External Secret 연동
↓
Rotation 자동화
↓
접근 기록 관리
안전한 Credential Lifecycle을 구축합니다.
Kubernetes Secret Management 장점
| 장점 | 설명 |
|---|---|
| Credential 보호 | 민감 정보 분리 |
| 접근 제어 | 권한 관리 |
| 자동화 | Secret 전달 관리 |
| Compliance 대응 | 보안 정책 적용 |
Secret Management는 Kubernetes 보안 운영의 핵심 영역입니다.
자주 묻는 질문
Kubernetes Secret은 완전히 암호화되어 있나요?
기본적으로 Base64 Encoding이며, 안전한 운영을 위해 Encryption at Rest 설정이 필요합니다.
Secret을 Git Repository에 저장해도 되나요?
권장되지 않습니다.
External Secret Manager 또는 별도 보안 관리 방식이 필요합니다.
ConfigMap 대신 Secret을 사용하면 되나요?
Password, Token 같은 민감 데이터는 Secret을 사용하고 일반 설정은 ConfigMap을 사용합니다.
마무리
Kubernetes Secret Management는 Database Password, API Token, Certificate 같은 민감 정보를 안전하게 관리하는 핵심 보안 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Secret | 민감 정보 저장 |
| Encryption at Rest | 데이터 보호 |
| RBAC | 접근 제어 |
| External Secret | 외부 보안 저장소 연동 |
Secret 구조를 이해하면 Kubernetes 환경에서 안전한 Credential 관리와 Enterprise 보안 운영 체계를 구축할 수 있습니다.
다음 글에서는 Kubernetes 네트워크 보안 영역인 Kubernetes NetworkPolicy 완벽 가이드! Pod 간 통신 제어와 Zero Trust Network 구조 이해하기를 진행하겠습니다.