26S21g

QK·2026년 9월 21일

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 연동 절차입니다.


주요 변경점 요약 (Legacy KES vs New MinKMS)

비교 항목과거 KES최신 MinKMS (AIStor 전용)
운영 주체수동 Deployment / 단순 차트minio/minkms-operator 가 StatefulSet으로 관리
루트 암호화Keystore 직접 지정Root Encryption Key (REK / HSM / Soft-HSM) 봉인 방식
멀티테넌시단일 정책 파일Enclave 단위로 키/인증 격리
클라이언트 인증클라이언트 인증서 공개키 HashEnclave API Key (Admin API Key와 분리)

  1. MinKMS Operator 배포 (Helm):
    MinKMS 리소스를 라이프사이클 관리할 오퍼레이터를 먼저 설치합니다.
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
  1. Root Encryption Key (REK) 및 Admin API Key 생성:
    MinKMS에 저장되는 모든 암호화 키를 봉인(Seal)할 루트 키와 클러스터 초기 제어용 Admin API Key를 도커 컨테이너를 통해 사전 계산합니다.

  2. 루트 암호화 키 생성 (Soft-HSM 예시):

docker run --rm quay.io/minio/aistor/minkms:latest --soft-hsm

출력 형식: hsm:ALGORITHM:KEYSTRING... 형태의 문자열이 출력됩니다. 안전한 곳에 복사해 둡니다.

  1. Admin API Key 및 Identity 추출:
docker run --rm quay.io/minio/aistor/minkms:latest identity "hsm:ALGORITHM:KEYSTRING..."

출력 예시:

  • API Key: <ADMIN_API_KEY> (초기 클러스터 관리 작업에 사용)
  • Identity: <ADMIN_IDENTITY_HASH>
  1. MinKMS 클러스터 배포 (Helm):
    앞서 생성한 루트 키를 주입하여 MinKMS StatefulSet 클러스터를 배포합니다.

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 상태여야 합니다.

  1. Enclave 생성 및 AIStor 전용 API Key / Master Key 발급:
    최신 MinKMS에서는 AIStor 테넌트가 시스템 관리자 권한(ADMIN_API_KEY)을 직접 사용하지 못하도록, 독립된 Enclave와 전용 API Key를 발급해야 합니다.

  2. 테넌트용 Enclave 생성:

kubectl exec -n minkms minkms-0 -- \
  /minkms add-enclave --api-key <ADMIN_API_KEY> aistor-enclave
  1. Enclave 관리용 Identity(API Key) 발급 (AIStor 연동용):
kubectl exec -n minkms minkms-0 -- \
  /minkms add-identity --api-key <ADMIN_API_KEY> --enclave aistor-enclave --admin
  • 중요: 터미널에 <ENCLAVE_API_KEY>가 단 한 번 출력됩니다. 서버에 평문으로 저장되지 않으므로 반드시 기록해 두어야 합니다.
  1. 기본 서버 측 암호화(SSE) 마스터 키 생성:
kubectl exec -n minkms minkms-0 -- \
  /minkms add-key --api-key <ADMIN_API_KEY> --enclave aistor-enclave aistor-default-key
  1. AIStor 테넌트에 MinKMS 연동 등록:
    발급받은 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
profile
engineer

0개의 댓글