개발 창고/Server

Kubernetes Secret: 민감 정보 안전하게 관리하기

Royzero 2025. 8. 9. 23:04
반응형

개요

Kubernetes에서는 다양한 애플리케이션 설정과 정보를 저장하고 전달해야 합니다. 이 중에서도 비밀번호, API 키, 토큰 등 민감한 정보를 안전하게 다루는 방법이 바로 Secret 리소스입니다. 이 문서에서는 Secret의 개념, 생성 방법, Pod와의 연동 방식, 실무 적용 팁까지 깊이 있게 살펴봅니다.


1. Secret이란?

Kubernetes Secret은 암호화되거나 인코딩된 상태로 민감 데이터를 저장하고 Pod에 주입하는 리소스입니다.

  • 보안 강화를 위해 ConfigMap과 분리되어 사용
  • base64 인코딩으로 저장되며, 암호화는 etcd 레벨에서 적용 가능
  • Pod에 환경변수나 Volume 형태로 주입 가능

2. Secret의 주요 사용 사례

  • DB 접속 비밀번호 저장 및 주입
  • 외부 API 인증 토큰 관리
  • SSH Key, TLS 인증서 등 보안 자격증명 전달

3. Secret 생성 방법

방법 1: kubectl로 생성

kubectl create secret generic my-secret \
  --from-literal=username=admin \
  --from-literal=password=1234

방법 2: YAML로 정의

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
  namespace: default
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNA==

data 필드는 base64 인코딩된 값이어야 합니다.


4. Pod에 Secret 주입하기

환경변수로 전달

env:
- name: USERNAME
  valueFrom:
    secretKeyRef:
      name: my-secret
      key: username

Volume으로 마운트

volumes:
- name: secret-volume
  secret:
    secretName: my-secret

volumeMounts:
- name: secret-volume
  mountPath: "/etc/secrets"
  readOnly: true

5. Secret 타입

타입 설명
Opaque 일반적인 key-value (기본값)
kubernetes.io/dockerconfigjson Docker 이미지 인증 정보
kubernetes.io/tls TLS 인증서 및 키 정보

6. 보안 강화 방법

  • etcd 암호화 활성화: kube-apiserver 설정에 --encryption-provider-config 사용
  • RBAC 최소 권한 원칙 적용: Secret 접근 권한 제한
  • Secret 자동 Rotation 도구 사용: Vault, Sealed Secrets, External Secrets 등

7. Secret 상태 및 삭제

kubectl get secrets
kubectl describe secret my-secret
kubectl delete secret my-secret

8. FAQ (Answer Engine Optimization)

Q1. Secret은 실제로 암호화되어 저장되나요?
기본은 base64 인코딩이며, etcd 암호화를 별도 설정해야 실제 암호화됩니다.

Q2. ConfigMap과 뭐가 다른가요?
Secret은 민감 데이터를 다루며, 더 엄격한 보안 정책이 적용됩니다.

Q3. base64로만 인코딩하면 안전한가요?
아닙니다. base64는 단순 인코딩이며, 반드시 etcd 암호화를 함께 적용해야 합니다.

Q4. 여러 Pod에서 하나의 Secret을 공유할 수 있나요?
네. 같은 네임스페이스 내에서는 자유롭게 공유 가능합니다.


9. 요약

항목 설명
용도 비밀번호, 토큰 등 민감 정보 저장 및 전달
주입 방식 환경변수, Volume
보안 고려사항 etcd 암호화, RBAC 제한, 외부 비밀관리 연동 가능
타입 Opaque, TLS, Docker config 등

반응형