Certificated 도전/KCSA - Kubernetes

Kubernetes Secrets 보안 모범 사례

지추월자 2025. 3. 30. 08:01
반응형

 

🔐 Kubernetes Secrets 보안 모범 사례

→ 비밀번호, API 토큰, SSH 키 같은 민감한 정보를 안전하게 관리하는 방법!


🎯 핵심 개념 요약

  • Secret이란?
    → 비밀번호, OAuth 토큰, SSH 키 같은 민감 정보를 저장하는 Kubernetes 객체
  • ConfigMap이랑 뭐가 달라?
    → ConfigMap은 민감하지 않은 설정값, Secret은 민감한 데이터를 위한 것!
  • 주의! Secret은 기본적으로 암호화되지 않은 상태로 etcd에 저장
    → 설정을 바꾸면 암호화 저장 가능함

🛠️ 클러스터 관리자용 Best Practices

1️⃣ etcd에 저장되는 Secret을 암호화하기

  • 기본값은 평문(base64만 인코딩) 저장이야.
  • 꼭 EncryptionConfiguration 설정해서 etcd 저장소 내 암호화를 적용하자.
    👉 Encrypt Secret Data at Rest 문서 참고

2️⃣ RBAC 권한 최소화 (Least Privilege)

👤 사용자 & 컴포넌트에 따라 권한 차등 설정!

  • 컴포넌트: list나 watch 같은 강력한 권한은 정말 꼭 필요한 시스템 컴포넌트에만
  • 사람: get, list, watch 권한은 제한! etcd 접근은 오직 관리자만!
  • Tip: 주석(annotations) 기준으로 세부 권한 제어하려면 서드파티 인증 시스템 사용 고려

⚠️ 주의사항

  • list 권한만 있어도 Secret 내용 다 볼 수 있음
  • Pod에 Secret을 마운트할 수 있는 권한이 있는 사용자는 사실상 Secret 내용을 조회할 수 있음
    → 완전히 통제하려면 Pod 생성도 제한해야 함

3️⃣ 짧은 수명(Short-lived)의 Secret 사용

  • 만료가 빠른 토큰 사용, 자동 갱신 구조 설계 추천

4️⃣ 감사 로그 설정

  • 여러 Secret에 접근하는 사용자 행동을 탐지할 수 있는 감사 규칙 설정!

5️⃣ Namespace로 Secret 접근 제한

  • 네임스페이스별로 권한 분리해서, 불필요한 접근 막기

6️⃣ etcd 스토리지 관리

  • etcd 삭제 시 디스크도 완전히 지우기(shredding)
  • 여러 etcd 인스턴스 사용하는 경우엔 TLS 암호화 통신 필수

7️⃣ 외부 Secret 저장소 사용하기

  • Secret을 클러스터 외부에 저장하고, Pod가 그 Secret을 직접 참조할 수 있도록 구성 가능

🧩 예시:

  • Secrets Store CSI Driver → Pod에 외부 비밀정보를 volume 형태로 마운트해주는 DaemonSet
  • 외부 저장소 예시: Azure Key Vault, AWS Secrets Manager, HashiCorp Vault 등

👨‍💻 개발자를 위한 Best Practices

1️⃣ Secret은 필요한 컨테이너에만 주자

  • Pod에 여러 컨테이너가 있다면, 필요한 컨테이너에만 Secret 마운트 or env var로 주입하기

2️⃣ 앱 내에서도 Secret 노출 조심!

  • Secret을 로그에 출력하거나, 외부 서버에 전송하는 것 → 절대 금지!
  • 메모리 상에 남아있는 Secret도 가능한 한 빨리 지우는 처리가 필요

3️⃣ Secret 매니페스트 파일 공유 금지

  • base64로 인코딩된 Secret을 Git에 커밋하거나 공유하지 말기
    → base64는 암호화가 아니고, 그냥 평문 인코딩일 뿐임!

🧠 요약 정리

역할 지켜야 할 보안 수칙

관리자 - etcd 암호화 - RBAC 최소 권한 - Secret 접근 분리 - 외부 저장소 연동 - 감사 로그 설정
개발자 - Secret 필요한 컨테이너만 접근 - Secret 유출 금지(log, 전송) - 매니페스트 공유 금지

 

반응형