Data Engineering/s3 minio

📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #13] Kubernetes Secret으로 MinIO AccessKey 안전하게 전달하기

ygtoken 2025. 3. 26. 19:28
728x90

목표: 민감한 자격 증명을 환경 변수로 직접 전달하지 않고,
Kubernetes의 Secret을 활용해 MinIO AccessKey/SecretKey를 안전하게 파드에 주입하는 방법을 실습합니다.


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

  1. AccessKey/SecretKey를 Kubernetes Secret으로 생성
  2. 파드에 Secret을 환경 변수 또는 volume으로 마운트
  3. 환경 변수 기반 Spark 실행 테스트
  4. 보안 측면에서의 이점 확인

🔐 1단계: MinIO 자격 증명용 Secret 생성

이 단계의 목적: AccessKey와 SecretKey를 kubectl 명령으로
base64 인코딩 없이 Kubernetes Opaque Secret으로 생성합니다.

kubectl create secret generic minio-credentials \
  --namespace etl \                                              # 사용할 네임스페이스 지정
  --from-literal=AWS_ACCESS_KEY_ID=minioadmin \                 # MinIO Access Key
  --from-literal=AWS_SECRET_ACCESS_KEY=minioadmin               # MinIO Secret Key
# 생성된 Secret 확인
kubectl get secret minio-credentials -n etl -o yaml

✅ 민감 정보는 plain text 노출 없이 Secret으로 관리됩니다.


🧱 2단계: 파드에 Secret 환경 변수로 주입

이 단계의 목적: Spark 또는 애플리케이션 파드에 Secret 데이터를
환경 변수 형태로 주입하여 사용 가능하도록 구성합니다.

# spark-env-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: spark-secret-env                              # 파드 이름
  namespace: etl
spec:
  containers:
  - name: spark
    image: bitnami/spark:latest                       # 예시용 Spark 이미지
    command: ["sleep", "3600"]                        # 테스트 목적으로 대기 상태 유지
    env:
    - name: AWS_ACCESS_KEY_ID                         # 환경 변수 이름
      valueFrom:
        secretKeyRef:
          name: minio-credentials                     # 참조할 Secret 이름
          key: AWS_ACCESS_KEY_ID                      # Secret 내부 키
    - name: AWS_SECRET_ACCESS_KEY
      valueFrom:
        secretKeyRef:
          name: minio-credentials
          key: AWS_SECRET_ACCESS_KEY
kubectl apply -f spark-env-pod.yaml

🚀 3단계: 파드 내부에서 환경 변수 확인 및 MinIO 접근 테스트

이 단계의 목적: Secret이 파드에 정상 주입되었는지 확인하고,
Spark나 CLI 도구가 해당 환경 변수를 사용해 MinIO에 접근 가능한지 검증합니다.

# 파드에 접속
kubectl exec -it spark-secret-env -n etl -- bash
# 환경 변수 확인
echo $AWS_ACCESS_KEY_ID
echo $AWS_SECRET_ACCESS_KEY

# MinIO 접근 테스트
curl -I http://minio.minio.svc.cluster.local:9000

✅ MinIO가 403 또는 200 응답을 반환하면 접근은 정상적으로 동작하는 상태입니다.


🧩 보안 설계 참고: Volume 방식과의 비교

방식 장점 단점
env (환경 변수) 코드 수정 없이 접근 가능, Spark 설정과 호환 파드 내 env 노출 가능성
volumeMount (파일) 파일 기반 앱에 적합, 프로세스 분리 Spark 옵션과 연동 어려움

보안이 중요한 경우 RBAC와 Secret encryption, rotation을 반드시 함께 고려해야 합니다.


📎 요약 및 핵심 정리

  • MinIO AccessKey/SecretKey를 직접 전달하지 않고, Kubernetes Secret을 통해 안전하게 관리 가능함
  • Spark, Python 등 다양한 애플리케이션에서 환경 변수로 주입해 사용할 수 있음
  • 보안 강화를 위해 RBAC 및 secret encryption과 함께 사용하는 것이 바람직함
  • volumeMount 방식과 장단점을 비교하여 환경에 맞게 선택해야 함
728x90