본문 바로가기
클라우드/쿠버네티스

🔐 Kubernetes Secret: 민감한 정보를 안전하게 관리하는 법 (과 그 한계)

by gasbugs 2026. 2. 9.

안녕하세요! 지난번 ConfigMap에 이어, 오늘은 보안이 필요한 데이터를 다루는 Secret(시크릿)에 대해 알아보겠습니다. 비밀번호, OAuth 토큰, ssh 키와 같은 민감한 정보를 어떻게 관리해야 할까요?

 

 


1. Secret이란 무엇인가요? 🔒

Secret은 비밀번호, 토큰, 키와 같은 소량의 민감한 데이터를 보관하고 관리하기 위한 객체입니다. ConfigMap과 유사하지만, 데이터를 Base64로 인코딩하여 저장한다는 점이 다릅니다.

💡 핵심 요약
- 효율성: Pod가 실행될 때만 메모리에 마운트되어 디스크 노출을 최소화합니다.
- 보안성: 민감한 정보를 애플리케이션 이미지나 YAML 파일에 노출하지 않고 주입할 수 있습니다.


2. Secret 생성하기 🛠️

시크릿 역시 kubectl 명령어와 YAML 파일을 통해 생성할 수 있습니다.

A. kubectl 명령어로 생성

# 사용자 이름과 비밀번호를 포함하는 시크릿 생성
kubectl create secret generic db-user-pass \
  --from-literal=username='admin' \
  --from-literal=password='S3cretP@ssw0rd'

B. YAML 파일로 정의

YAML 파일을 작성할 때는 반드시 값이 Base64로 인코딩되어야 합니다.

  • 예: admin → YWRtaW4=
  • 예: S3cretP@ssw0rd → UzNjcmV0UEBzc3cwcmQ=
apiVersion: v1
kind: Secret
metadata:
  name: db-user-pass
type: Opaque
data:
  username: YWRtaW4=
  password: UzNjcmV0UEBzc3cwcmQ=

3. Secret을 컨테이너에 연결하기 🔗

시크릿을 사용하는 방법은 ConfigMap과 거의 동일합니다.

① 환경 변수로 주입

spec:
  containers:
  - name: my-container
    image: nginx
    env:
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-user-pass
            key: password

② 볼륨으로 마운트 (가장 권장되는 방식)

시크릿 볼륨을 사용하면 데이터가 tmpfs(RAM 기반 파일 시스템)에 저장되므로, 데이터가 노드 디스크에 기록되지 않아 더 안전합니다.

spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: db-user-pass

4. 쿠버네티스 시크릿의 치명적인 한계와 이유 ⚠️

많은 분이 오해하시는 부분이지만, 쿠버네티스 자체 시크릿 기능만으로는 완전한 보안을 달성하기 어렵습니다.

왜 시크릿만으로는 부족할까?

  1. 단순 Base64 인코딩: 시크릿 데이터는 암호화(Encryption)가 아닌 인코딩(Encoding)만 되어 있습니다. 즉, 누구나 base64 -d 명령으로 원본 내용을 볼 수 있습니다.
  2. etcd 내 평문 저장: 기본적으로 시크릿 정보는 쿠버네티스의 저장소인 etcd에 암호화되지 않은 채로 저장됩니다. etcd 접근 권한이 있는 사람은 모든 비밀 정보를 탈취할 수 있습니다.
  3. 권한 관리의 한계: RBAC을 통해 접근을 제한할 수 있지만, Pod를 생성할 수 있는 권한이 있다면 해당 Pod에 시크릿을 마운트하여 내용을 확인하는 편법이 가능합니다.

5. 더 안전한 대안: 외부 Secret 관리 도구 🛡️

전문적인 보안 수준을 요구하는 환경에서는 쿠버네티스 시크릿 대신(혹은 결합하여) 다음과 같은 솔루션을 사용합니다.

  • HashiCorp Vault: 업계 표준과 같은 도구로, 동적 비밀번호 생성 및 강력한 암호화 기능을 제공합니다.
  • AWS Secrets Manager / Azure Key Vault: 클라우드 서비스에서 제공하는 관리형 보안 서비스입니다.
  • External Secrets Operator (ESO): 외부 도구(Vault, AWS 등)의 정보를 쿠버네티스 시크릿으로 안전하게 동기화해주는 오픈소스 프로젝트입니다.

마무리하며 🎁

주군, 시크릿은 편리하지만 '절대적인 금고'는 아닙니다. 운영 환경에서는 반드시 etcd 암호화(Encryption at Rest)를 활성화하거나, Vault와 같은 전문 도구를 병행하시는 것을 추천드립니다.