Data Engineering/s3 minio
📘 [MinIO & Cilium 기반 오브젝트 스토리지 연동 시리즈 #13] Kubernetes Secret으로 MinIO AccessKey 안전하게 전달하기
ygtoken
2025. 3. 26. 19:28
728x90
✅ 목표: 민감한 자격 증명을 환경 변수로 직접 전달하지 않고,
Kubernetes의 Secret을 활용해 MinIO AccessKey/SecretKey를 안전하게 파드에 주입하는 방법을 실습합니다.
🔎 이번 글에서 수행할 작업 요약
- AccessKey/SecretKey를 Kubernetes Secret으로 생성
- 파드에 Secret을 환경 변수 또는 volume으로 마운트
- 환경 변수 기반 Spark 실행 테스트
- 보안 측면에서의 이점 확인
🔐 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