Kubernetes 환경에서는 Database Password, API Key, Token, Certificate 같은 민감한 정보를 관리해야 합니다.
Kubernetes는 이러한 데이터를 Secret Resource를 통해 저장합니다.
하지만 기본 Kubernetes Secret은 단순히 Base64 Encoding 형태로 저장됩니다.
즉:
Secret 생성
↓
Base64 Encoding
↓
etcd 저장
Base64는 암호화가 아니라 단순한 인코딩 방식입니다.
따라서 Enterprise 환경에서는 추가적인 데이터 보호 방식이 필요합니다.
이를 해결하기 위해 Kubernetes에서는 Encryption at Rest와 KMS(Key Management Service) 기반 Secret Encryption 구조를 사용합니다.
| 구성 요소 | 역할 |
|---|---|
| Kubernetes Secret | 민감 데이터 관리 |
| etcd | Cluster 상태 저장 |
| Encryption at Rest | 저장 데이터 암호화 |
| KMS | 암호화 Key 관리 |
| API Server | Secret 접근 제어 |
Secrets Encryption 구조를 이해하면 Kubernetes 환경에서 안전한 민감 데이터 보호 체계를 구축할 수 있습니다.
Kubernetes Secret이란?
Kubernetes Secret은 민감한 데이터를 저장하기 위한 Resource입니다.
저장 대상:
- Database Password
- API Token
- TLS Certificate
- SSH Key
- Cloud Credential
예:
Application
↓
Secret 조회
↓
Database 연결
Application 설정과 민감 정보를 분리할 수 있습니다.
Kubernetes Secret 기본 동작 방식
기본 구조:
User
↓
kubectl create secret
↓
API Server
↓
etcd 저장
Secret 데이터는 etcd에 저장됩니다.
문제는 기본 상태에서는 암호화되지 않는다는 점입니다.
Kubernetes Secret Base64 Encoding 문제
예:
Secret 값:
password123
↓
Base64 변환
cGFzc3dvcmQxMjM=
이 값은 누구나 Decode 가능합니다.
따라서 Base64는 보안 기능이 아닙니다.
Kubernetes Encryption at Rest란?
Encryption at Rest는 저장되어 있는 데이터를 암호화하는 방식입니다.
대상:
- Secret
- ConfigMap
- Resource Data
구조:
Secret
↓
API Server
↓
Encryption Provider
↓
Encrypted etcd
etcd 내부 데이터가 암호화됩니다.
Kubernetes Secret Encryption Architecture
전체 구조:
Application
↓
API Server
↓
Encryption Configuration
↓
Encryption Provider
↓
etcd
↓
Encrypted Data
API Server가 데이터를 저장하기 전에 암호화합니다.
Kubernetes Encryption Provider 종류
대표 방식:
Identity Provider
기본 방식입니다.
암호화하지 않습니다.
Secretbox
대칭키 기반 암호화 방식입니다.
AES-CBC
AES 기반 암호화 방식입니다.
KMS Provider
외부 Key Management System과 연동합니다.
Enterprise 환경에서는 KMS 방식이 많이 사용됩니다.
Kubernetes KMS(Key Management Service)란?
KMS는 Encryption Key를 안전하게 관리하는 서비스입니다.
대표:
- AWS KMS
- Google Cloud KMS
- Azure Key Vault
- HashiCorp Vault
Kubernetes Cluster와 Key 관리 시스템을 분리합니다.
Kubernetes KMS Architecture
구조:
Kubernetes API Server
↓
KMS Plugin
↓
External KMS
↓
Encryption Key
Kubernetes 내부에 직접 Key를 저장하지 않습니다.
Kubernetes Secret Rotation
보안 환경에서는 Key 변경이 필요합니다.
Rotation 과정:
새로운 Encryption Key 생성
↓
KMS 업데이트
↓
Secret 재암호화
↓
기존 Key 제거
정기적인 Key Rotation이 중요합니다.
Kubernetes RBAC와 Secret 보안
Secret Encryption만으로 충분하지 않습니다.
함께 적용:
- RBAC
- Namespace 분리
- Least Privilege
- Audit Logging
접근 권한 자체를 관리해야 합니다.
Kubernetes Secret과 External Secret
실무에서는 Kubernetes Secret 대신 외부 Secret 관리 시스템을 사용하는 경우도 많습니다.
예:
AWS Secrets Manager
↓
External Secrets Operator
↓
Kubernetes Secret
민감 정보를 외부에서 관리할 수 있습니다.
Kubernetes Secret 보안 Best Practice
권장:
- Secret Encryption 활성화
- RBAC 최소 권한
- Secret 접근 Audit 기록
- Git Repository에 Secret 저장 금지
- Key Rotation 적용
안전한 Secret 관리 체계를 구축합니다.
Kubernetes Secrets Encryption 장애 분석
Encryption 설정 확인:
kubectl get secrets
API Server 설정 확인:
cat encryption-config.yaml
etcd 데이터 확인:
etcdctl get secret-name
확인:
- Encryption Provider 설정
- KMS 연결 상태
- Key 권한
- Secret 접근 오류
Kubernetes Secrets Encryption 운영 전략
Production 환경:
Secret 분류
↓
Encryption 활성화
↓
KMS 연동
↓
RBAC 적용
↓
Audit Logging
↓
Key Rotation
민감 데이터를 체계적으로 보호합니다.
Kubernetes Secrets Encryption 장점
| 장점 | 설명 |
|---|---|
| 데이터 보호 | 저장 Secret 암호화 |
| 보안 강화 | Key 분리 관리 |
| Compliance 대응 | 감사 기준 충족 |
| 위험 감소 | Credential 노출 방지 |
Secrets Encryption은 Enterprise Kubernetes 보안의 필수 요소입니다.
자주 묻는 질문
Kubernetes Secret은 기본적으로 암호화되어 있나요?
아닙니다.
기본 Secret은 Base64 Encoding 형태이며 별도의 Encryption 설정이 필요합니다.
Secret을 Git에 저장하면 안 되나요?
일반적으로 권장하지 않습니다.
External Secret 관리 방식이나 암호화된 Secret 관리 방식을 사용합니다.
KMS는 꼭 필요한가요?
소규모 환경에서는 선택 사항이지만 Enterprise 환경에서는 많이 사용됩니다.
마무리
Kubernetes Secrets Encryption은 Kubernetes Secret 데이터를 보호하기 위해 Encryption at Rest와 KMS 기반 Key 관리를 적용하는 보안 구조입니다.
| 구성 요소 | 역할 |
|---|---|
| Secret | 민감 데이터 저장 |
| Encryption at Rest | 저장 데이터 보호 |
| KMS | Key 관리 |
| RBAC | 접근 제어 |
| Audit Log | 사용 기록 관리 |
Secrets Encryption 구조를 이해하면 Kubernetes 환경에서 안전한 Credential 관리와 Enterprise Security Architecture를 구축할 수 있습니다.