MinIO 공식 최신 문서 기준, MinKMS는 레거시 KES와 완전히 다른 아키텍처를 사용합니다.
과거 KES 방식(단순 YAML 정책 + mTLS 해시)에서 벗어나, 최신 MinKMS는 MinKMS Operator, StatefulSet 기반의 고가용성 복제 클러스터(Raft 유사 프로토콜), Root Encryption Key (REK/Soft-HSM), 격리 단위인 Enclave, API Key 기반 RBAC 체계로 동작합니다.
공식 가이드라인(docs.min.io/kms/installation/kubernetes/upstream/)에 맞춘 최신 Helm Chart 배포 및 AIStor 연동 절차입니다.
| 비교 항목 | 과거 KES | 최신 MinKMS (AIStor 전용) |
|---|---|---|
| 운영 주체 | 수동 Deployment / 단순 차트 | minio/minkms-operator 가 StatefulSet으로 관리 |
| 루트 암호화 | Keystore 직접 지정 | Root Encryption Key (REK / HSM / Soft-HSM) 봉인 방식 |
| 멀티테넌시 | 단일 정책 파일 | Enclave 단위로 키/인증 격리 |
| 클라이언트 인증 | 클라이언트 인증서 공개키 Hash | Enclave API Key (Admin API Key와 분리) |
helm repo add minio https://operator.min.io/
helm repo update
minkms-operator-values.yaml 작성 (SUBNET 라이선스 입력):
global:
license: "<YOUR-MINIO-SUBNET-LICENSE-STRING>"
helm install minkms-operator minio/minkms-operator \
-n minkms-operator --create-namespace \
-f minkms-operator-values.yaml
Root Encryption Key (REK) 및 Admin API Key 생성:
MinKMS에 저장되는 모든 암호화 키를 봉인(Seal)할 루트 키와 클러스터 초기 제어용 Admin API Key를 도커 컨테이너를 통해 사전 계산합니다.
루트 암호화 키 생성 (Soft-HSM 예시):
docker run --rm quay.io/minio/aistor/minkms:latest --soft-hsm
출력 형식: hsm:ALGORITHM:KEYSTRING... 형태의 문자열이 출력됩니다. 안전한 곳에 복사해 둡니다.
docker run --rm quay.io/minio/aistor/minkms:latest identity "hsm:ALGORITHM:KEYSTRING..."
출력 예시:
API Key: <ADMIN_API_KEY> (초기 클러스터 관리 작업에 사용)Identity: <ADMIN_IDENTITY_HASH>minkms-values.yaml:
minkms:
replicas: 3 # 기본 3개 노드로 복제 및 고가용성 구성
hsm:
key: "hsm:ALGORITHM:KEYSTRING..." # 2단계에서 생성한 REK 문자열
persistence:
size: 10Gi
storageClass: "" # 기본 StorageClass 사용 시 공란
helm install minkms minio/minkms \
-n minkms --create-namespace \
-f minkms-values.yaml
검증: kubectl get pods -n minkms 실행 시 minkms-0, minkms-1, minkms-2 파드가 모두 Running 상태여야 합니다.
Enclave 생성 및 AIStor 전용 API Key / Master Key 발급:
최신 MinKMS에서는 AIStor 테넌트가 시스템 관리자 권한(ADMIN_API_KEY)을 직접 사용하지 못하도록, 독립된 Enclave와 전용 API Key를 발급해야 합니다.
테넌트용 Enclave 생성:
kubectl exec -n minkms minkms-0 -- \
/minkms add-enclave --api-key <ADMIN_API_KEY> aistor-enclave
kubectl exec -n minkms minkms-0 -- \
/minkms add-identity --api-key <ADMIN_API_KEY> --enclave aistor-enclave --admin
<ENCLAVE_API_KEY>가 단 한 번 출력됩니다. 서버에 평문으로 저장되지 않으므로 반드시 기록해 두어야 합니다.kubectl exec -n minkms minkms-0 -- \
/minkms add-key --api-key <ADMIN_API_KEY> --enclave aistor-enclave aistor-default-key
ENCLAVE_API_KEY를 테넌트 네임스페이스에 Secret으로 생성하고, 테넌트 Helm values에 지정합니다.# AIStor 테넌트 네임스페이스(예: minio)에 API Key 시크릿 등록
kubectl create secret generic aistor-kms-auth \
--from-literal=api-key="<ENCLAVE_API_KEY>" \
-n minio
MinIO AIStor Tenant Helm 설정 (tenant-values.yaml):
tenant:
name: aistor
kms:
enabled: true
# MinKMS Service 엔드포인트
endpoint: "https://minkms.minkms.svc.cluster.local:7373"
enclave: "aistor-enclave"
defaultKey: "aistor-default-key"
secretName: aistor-kms-auth
helm upgrade --install aistor minio/tenant -n minio -f tenant-values.yaml
mc)테넌트 파드가 정상 재기동된 후, mc로 버킷에 암호화를 걸어 동작을 검증합니다.
# 1. 버킷 생성
mc mb myaistor/secure-bucket
# 2. Enclave 마스터 키 지정 암호화 활성화
mc encrypt set sse-kms aistor-default-key myaistor/secure-bucket
# 3. 객체 업로드 및 SSE-KMS 상태 확인
mc cp test.txt myaistor/secure-bucket/
mc stat myaistor/secure-bucket/test.txt