26S21c

QK·2026년 9월 21일

MinIO AIStor 환경에서 암호화 키 관리(SSE-S3, SSE-KMS)를 제공하는 MinKMS(MinIO KMS / KES 차세대 엔터프라이즈 컴포넌트)를 Kubernetes 클러스터에 배포하고 AIStor 테넌트와 연동하는 표준 절차입니다.


1. 사전 준비 (TLS 인증서 및 시크릿)

MinKMS는 상호 TLS(mTLS)를 필수로 요구하므로, KMS 서버 인증서와 MinIO 테넌트가 KMS에 접근할 때 사용할 클라이언트 인증서가 준비되어 있어야 합니다.

# 네임스페이스 생성 (예: minkms 또는 minio)
kubectl create namespace minkms

# 1. MinKMS 서버 TLS 시크릿 생성
kubectl create secret tls minkms-tls \
  --cert=minkms-server.crt \
  --key=minkms-server.key \
  -n minkms

# 2. MinIO 테넌트 인증용 클라이언트 인증서 공개키를 KMS 허용 목록에 등록하기 위한 Secret
kubectl create secret generic minkms-identities \
  --from-file=minio-client.crt=minio-client.crt \
  -n minkms

2. MinKMS 설정 파일(ConfigMap) 생성

MinKMS는 백엔드 키 저장소(Vault, AWS KMS 또는 자체 로컬 암호화 키 스토리지)와 클라이언트 권한 정책을 정의합니다.

# minkms-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: minkms-config
  namespace: minkms
data:
  config.yaml: |
    address: 0.0.0.0:7373
    tls:
      key: /etc/minkms/certs/tls.key
      cert: /etc/minkms/certs/tls.crt
    policy:
      minio:
        paths:
          - /v1/key/create/*
          - /v1/key/generate/*
          - /v1/key/decrypt/*
        identities:
          # minio-client.crt의 SHA-256 identity 해시값
          - <MINIO_CLIENT_CERT_IDENTITY_HASH>
    keystore:
      # 예: 로컬 파일 기반 또는 외부 Vault/KMIP 등 백엔드 지정
      fs:
        path: /var/lib/minkms/keys
kubectl apply -f minkms-config.yaml

Identity 해시 추출 팁:
kes identity of minio-client.crt 또는 openssl x509 -in minio-client.crt -pubkey -noout | openssl pkey -pubin -outform DER | openssl dgst -sha256로 해시값을 계산해 넣습니다.


3. MinKMS Deployment 및 Service 배포

  1. Deployment 및 Service 매니페스트 적용: KMS 데몬 구동.
# minkms-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: minkms
  namespace: minkms
spec:
  replicas: 2
  selector:
    matchLabels:
      app: minkms
  template:
    metadata:
      labels:
        app: minkms
    spec:
      containers:
      - name: minkms
        image: quay.io/minio/kes:latest # AIStor 전용 엔터프라이즈 MinKMS 이미지 지정
        args:
          - server
          - --config=/etc/minkms/config/config.yaml
        ports:
          - containerPort: 7373
            name: https
        volumeMounts:
          - name: config
            mountPath: /etc/minkms/config
          - name: certs
            mountPath: /etc/minkms/certs
          - name: keys
            mountPath: /var/lib/minkms/keys
      volumes:
        - name: config
          configMap:
            name: minkms-config
        - name: certs
          secret:
            secretName: minkms-tls
        - name: keys
          emptyDir: {} # 영구 보관 필요 시 PVC로 마운트
---
apiVersion: v1
kind: Service
metadata:
  name: minkms
  namespace: minkms
spec:
  selector:
    app: minkms
  ports:
    - port: 7373
      targetPort: 7373
      name: https
kubectl apply -f minkms-deployment.yaml
  1. 기동 상태 검증: 엔드포인트 헬스체크.
    Pod가 정상 기동되고 Ready 상태인지 확인합니다.
kubectl get pods -n minkms -l app=minkms

검증: STATUS가 Running이고 재시작 카운트가 올라가지 않는지 확인합니다.


4. MinIO AIStor 테넌트에 MinKMS 연동 설정

MinIO 테넌트 CRD(또는 Helm values)의 kms 섹션에 MinKMS 엔드포인트와 클라이언트 mTLS 시크릿을 등록합니다.

# AIStor Tenant CRD 예시 (또는 values.yaml)
spec:
  features:
    enableKMS: true
  kms:
    # MinKMS Service 내부 도메인 주소
    endpoint: "https://minkms.minkms.svc.cluster.local:7373"
    # MinIO가 사용할 기본 마스터 키 이름
    defaultKey: "my-minio-key"
    # MinIO 클라이언트 mTLS 인증서 시크릿
    certificate:
      secretName: minio-kes-client-cert

테넌트를 업데이트(kubectl apply)하면 MinIO 서버 파드들이 재기동되면서 시작 시 MinKMS와 mTLS 핸드셰이크를 맺고 SSE-S3/KMS 암호화 기능이 활성화됩니다.


5. 연동 테스트 (mc 명령어로 검증)

앞서 구성한 mc를 통해 버킷 기본 암호화 정책을 걸고 동작을 확인합니다.

# 1. 테스트 버킷 생성
mc mb myaistor/encrypted-bucket

# 2. SSE-KMS 기본 암호화 설정
mc encrypt set sse-kms my-minio-key myaistor/encrypted-bucket

# 3. 파일 업로드 후 암호화 메타데이터 검증
mc cp /etc/hosts myaistor/encrypted-bucket/
mc stat myaistor/encrypted-bucket/hosts
  • Encryption: 항목에 SSE-KMS가 표시되면 MinKMS 연동이 정상 완료된 것입니다.
profile
engineer

0개의 댓글