서버 운영 환경에서는 다양한 민감 정보를 관리해야 합니다.
예:
- Database 비밀번호
- API Key
- 인증 Token
- TLS 인증서
- Cloud Access Key
이러한 정보를 Application 코드 내부에 직접 작성하면 심각한 보안 문제가 발생할 수 있습니다.
예:
Application 코드
↓
Database Password 포함
↓
Git Repository 저장
↓
외부 노출 위험
Kubernetes에서는 이러한 문제를 해결하기 위해 Secret Resource를 제공합니다.
Kubernetes Secret은 민감한 데이터를 별도로 저장하고 Pod에서 안전하게 사용할 수 있도록 관리하는 기능입니다.
| 구성 요소 | 역할 |
|---|---|
| Secret | 민감 정보 저장 |
| ConfigMap | 일반 설정 저장 |
| Volume Mount | 파일 형태 제공 |
| Environment Variable | 환경 변수 제공 |
Secret 구조를 이해하면 Database 인증 정보, API Token, TLS Certificate 등을 안전하게 관리할 수 있습니다.
Kubernetes Secret이 필요한 이유
Application 운영에서는 설정 정보와 비밀번호를 분리해야 합니다.
잘못된 방식:
Application Code
↓
Database Password 포함
↓
Git 저장
↓
Password 노출
안전한 방식:
Secret 생성
↓
Pod 연결
↓
Application 사용
민감 정보와 Application을 분리할 수 있습니다.
Kubernetes Secret과 ConfigMap 차이
두 Resource는 비슷하지만 목적이 다릅니다.
| 구분 | ConfigMap | Secret |
|---|---|---|
| 용도 | 일반 설정 | 민감 정보 |
| 데이터 | 환경 설정, 옵션 | 비밀번호, Token |
| 암호화 | 기본 미지원 | Base64 Encoding |
| 보안 중요도 | 일반 | 높음 |
Database 주소는 ConfigMap, Password는 Secret으로 관리하는 방식이 일반적입니다.
Kubernetes Secret 저장 구조
Secret은 Kubernetes API Server에 저장됩니다.
구조:
Secret 생성
↓
API Server 저장
↓
Pod 요청
↓
Container 전달
기본적으로 Secret 데이터는 Base64 Encoding 형태로 저장됩니다.
중요:
Base64는 암호화가 아니라 Encoding 방식입니다.
따라서 추가적인 보안 설정이 필요합니다.
Kubernetes Secret 생성 방법
직접 생성
예:
kubectl create secret generic db-secret \
--from-literal=password=my-password
Secret 생성:
↓
Kubernetes 저장
↓
Pod 사용 가능
Kubernetes Secret YAML 구조
예:
apiVersion: v1
kind: Secret
metadata:
name: database-secret
type: Opaque
data:
password: bXktcGFzc3dvcmQ=
주요 구성:
| 항목 | 설명 |
|---|---|
| metadata | Secret 이름 |
| type | Secret 종류 |
| data | 저장 데이터 |
운영 환경에서는 YAML 파일 관리에도 주의해야 합니다.
Kubernetes Secret을 Environment Variable로 사용
Application에서 환경 변수로 사용할 수 있습니다.
예:
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: database-secret
key: password
Container 실행 시 Secret 값을 전달합니다.
Kubernetes Secret을 Volume으로 Mount
Secret은 파일 형태로 제공할 수도 있습니다.
구조:
Secret
↓
Volume
↓
Container 내부 파일
TLS Certificate 같은 데이터 관리에 활용됩니다.
Kubernetes TLS Secret 관리
HTTPS 서비스를 운영하려면 인증서 관리가 필요합니다.
구조:
TLS Certificate
↓
Kubernetes Secret
↓
Ingress Controller
↓
HTTPS 서비스
예:
kubectl create secret tls tls-secret \
--cert=cert.crt \
--key=cert.key
웹 서비스 보안 운영에 사용됩니다.
Kubernetes Secret 암호화 저장
기본 Secret은 Base64 Encoding 상태입니다.
보안을 강화하려면 Encryption at Rest를 사용할 수 있습니다.
구조:
Secret
↓
API Server
↓
Encryption Provider
↓
Encrypted Storage
Etcd 데이터 보호에 활용됩니다.
Kubernetes Secret과 RBAC 관계
Secret 접근 권한은 RBAC으로 관리합니다.
예:
개발자
↓
Pod 조회 가능
하지만
Secret 조회 불가
운영자
↓
Secret 관리 가능
민감 정보 접근을 제한할 수 있습니다.
Kubernetes Secret 운영 시 주의사항
Secret은 중요 데이터이므로 관리가 필요합니다.
| 항목 | 방법 |
|---|---|
| 접근 제한 | RBAC 적용 |
| 암호화 | Encryption at Rest |
| 백업 보호 | Secret Backup 관리 |
| 권한 검토 | 정기 확인 |
Secret 관리가 잘못되면 전체 서비스 보안 문제가 발생할 수 있습니다.
Kubernetes Secret 장애 사례
| 문제 | 원인 |
|---|---|
| Application 실행 실패 | Secret Key 오류 |
| 인증 실패 | 잘못된 Password |
| Permission Denied | RBAC 부족 |
| TLS 오류 | Certificate 문제 |
Log와 Event 확인이 필요합니다.
Kubernetes Secret 확인 방법
Secret 목록:
kubectl get secrets
상세 확인:
kubectl describe secret secret-name
데이터 확인:
kubectl get secret secret-name -o yaml
운영 환경에서는 접근 권한을 확인해야 합니다.
Kubernetes Secret과 DevOps 관계
CI/CD 환경에서도 Secret 관리가 중요합니다.
구조:
CI/CD Pipeline
↓
Secret Management
↓
Kubernetes Deploy
↓
Application 실행
Git Repository에 Password를 저장하지 않는 것이 중요합니다.
Kubernetes Secret 외부 관리 방식
대규모 환경에서는 외부 Secret Manager를 사용하기도 합니다.
예:
Cloud Secret Manager
↓
CSI Driver
↓
Kubernetes Pod
대표:
- AWS Secrets Manager
- HashiCorp Vault
Enterprise 환경에서 많이 사용됩니다.
Kubernetes Secret 장점
| 장점 | 설명 |
|---|---|
| 정보 분리 | Code와 Secret 분리 |
| 접근 제어 | RBAC 관리 |
| 자동 연결 | Pod 사용 가능 |
| 보안 강화 | 암호화 지원 |
Secret은 Kubernetes 보안 운영의 핵심 기능입니다.
자주 묻는 질문
Kubernetes Secret은 암호화되어 저장되나요?
기본적으로 Base64 Encoding이며 별도의 Encryption 설정이 필요합니다.
ConfigMap에 비밀번호를 저장하면 안 되나요?
가능하지만 보안 목적의 데이터는 Secret 사용이 권장됩니다.
Secret을 Git에 저장해도 되나요?
민감 정보가 포함된 Secret 파일은 직접 저장하지 않는 것이 좋습니다.
마무리
Kubernetes Secret은 Database Password, API Token, TLS Certificate 같은 민감 정보를 안전하게 관리하기 위한 Kubernetes Resource입니다.
| 구성 요소 | 역할 |
|---|---|
| Secret | 민감 정보 저장 |
| ConfigMap | 일반 설정 관리 |
| RBAC | 접근 권한 제어 |
| Encryption | 데이터 보호 |
Secret 구조를 이해하면 Kubernetes 환경에서 Application 인증 정보와 보안 데이터를 안전하게 관리할 수 있습니다.
다음 글에서는 Kubernetes 서비스 접근 보안을 다루는 Kubernetes ServiceAccount 완벽 가이드! Application 인증과 API 접근 권한 관리 구조 이해하기를 알아보겠습니다.