Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #15] Secret volumeMount vs env 비교 및 보안 설계 전략

ygtoken 2025. 3. 26. 20:34
728x90

목표: Kubernetes에서 Secret을 애플리케이션에 전달할 때 사용하는
env 방식과 volumeMount 방식의 차이점을 정리하고,
보안 설계 전략 관점에서 어떤 방식이 적합한지 실습을 통해 비교합니다.


🔎 이번 글에서 수행할 작업 요약

  1. Secret 전달 방식 종류(env, volumeMount) 정리
  2. 각각의 방식으로 MinIO 인증 정보 주입 실습
  3. 보안, 편의성, 자동화 측면에서의 장단점 비교
  4. 실제 환경에서의 설계 가이드 정리

🧠 1단계: Secret 전달 방식 개념 정리

전달 방식 설명 장점 단점
env 환경 변수로 주입 간편, 코드 수정 불필요 환경 변수 노출 가능성 있음
volumeMount 파일로 마운트 파일 접근 제어 가능, 자동 회전 대응 코드가 파일 참조해야 함

✅ 민감 정보의 노출을 줄이기 위해 volumeMount 방식이 더 안전하다는 평가가 많음
그러나 Spark, PySpark 등 일부 툴은 환경 변수 방식에 더 최적화되어 있음


🛠️ 2단계: volumeMount 방식 Secret 전달 실습 (라인별 주석 포함)

# secret-vol-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: spark-secret-vol                             # 테스트 파드 이름
  namespace: etl
spec:
  containers:
  - name: spark
    image: bitnami/spark:latest                      # Spark 예제 이미지
    command: ["sleep", "3600"]                       # 파드 대기 유지
    volumeMounts:
    - name: creds
      mountPath: /etc/minio-secrets                  # 🔐 Secret이 파일로 마운트될 경로
      readOnly: true                                 # 읽기 전용 권장
  volumes:
  - name: creds
    secret:
      secretName: minio-credentials                  # 참조할 Secret 이름
kubectl apply -f secret-vol-pod.yaml

✅ 해당 파드에 들어가면 /etc/minio-secrets/AWS_ACCESS_KEY_ID 와 같은 파일이 생성되어 있음
MinIO 환경에서 MINIO_ACCESS_KEY와 MINIO_SECRET_KEY 환경 변수를 사용해야 하며,
이 값을 Secret으로 전달하여 MinIO에 접근할 수 있음.


🧪 3단계: 파드 내에서 두 방식 비교 확인

# 파드 접속
kubectl exec -it spark-secret-vol -n etl -- bash
# volumeMount 방식으로 확인
cat /etc/minio-secrets/MINIO_ACCESS_KEY
cat /etc/minio-secrets/MINIO_SECRET_KEY

# 환경 변수 방식은 설정되어 있지 않음
echo $MINIO_ACCESS_KEY
echo $MINIO_SECRET_KEY

☑️ volumeMount 방식은 파일 경로에 접근해야 하며, 코드 또는 설정에서 이 경로를 참조해야 함


🔍 4단계: 설계 시 고려할 보안 요소

  • Secret의 자동 회전에 volumeMount 방식이 더 유리함 (파일 자동 갱신)
  • 환경 변수는 kubectl describe pod 등으로 쉽게 노출될 수 있음
  • RBAC과 함께 사용할 경우 volumeMount는 PodSpec 단위로 제한 가능
  • 민감 정보가 CLI에 직접 노출되지 않도록 환경 구성 필요

📎 요약 및 핵심 정리

  • Kubernetes Secret을 전달할 때 env와 volumeMount 방식은 각각의 장단점이 존재함
  • env는 간편하지만 보안에 취약할 수 있고, volumeMount는 안전하지만 구현이 다소 복잡할 수 있음
  • 보안 중심 설계에서는 volume 방식이 적합하며, 주기적 회전이나 RBAC 제한 적용도 용이함
  • Spark와 같이 환경 변수 기반 구성이 필수인 경우에는 env 방식을 사용할 수 있으나,
    운영 환경에서는 사전 보안 정책 검토가 반드시 필요함

 

728x90