[MinIO] MinIO Key Encryption Service(KES)

MinIO KES(Key Encryption Service)

MinIO Key Encryption Service (KES)λŠ” κ³ μ„±λŠ₯ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ statelessν•œ λΆ„μ‚° ν‚€ 관리 μ‹œμŠ€ν…œμ΄λ‹€. KESλŠ” μ»¨ν…Œμ΄λ„ˆ 기반(Kubernetes)의 ν˜„λŒ€μ μΈ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό 쀑앙 집쀑식 ν‚€ 관리 μ„œλΉ„μŠ€(KMS) κ°„μ˜ μ—°κ²° 역할을 ν•œλ‹€.

KES μž‘μ—… μˆœμ„œ

  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ TLS(Transport Layer Security) ν”„λ‘œν† μ½œμ„ 톡해 KES μ„œλ²„μ— μ ‘κ·Ό
  2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ KES μ„œλ²„ APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ μ•”ν˜Έν™” ν‚€λ₯Ό μƒμ„±ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.
  3. KESλŠ” μ•”ν˜Έν™” ν‚€λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  μƒνƒœ 정보가 μ €μž₯λ˜μ–΄ μžˆλŠ” KMS와 ν†΅μ‹ ν•œλ‹€.
  4. ν•˜μ§€λ§Œ, 만일 μƒνƒœλ₯Ό 가지지 μ•ŠλŠ” μž‘μ—…μΈ μ•”ν˜Έν™”, λ³΅ν˜Έν™”, ν‚€ νŒŒμƒ λ“±κ³Ό 같은 μž‘μ—…μ€, KMSμ™€μ˜ 톡신 ν•„μš” 없이, KESκ°€ 직접 μ²˜λ¦¬ν•˜μ—¬ 효율적인 ν‚€ 관리λ₯Ό μˆ˜ν–‰ν•œλ‹€.


KES Architecture

MinIO KESλŠ” λŒ€κ·œλͺ¨ μž‘μ—…λΆ€ν•˜λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ ν™•μž₯ κ°€λŠ₯ν•œ μ•„ν‚€ν…μ²˜λ₯Ό μ œκ³΅ν•œλ‹€.

KubernetesλŠ” Horizontal Pod Autoscaler(HPA)와 같은 μžλ™ μŠ€μΌ€μΌλ§ κΈ°λŠ₯을 톡해 ν˜„μž¬ μž‘μ—… λΆ€ν•˜μ— κΈ°λ°˜ν•˜μ—¬ μžλ™μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ³΅ν•œλ‹€. κ·ΈλŸ¬λ‚˜ μ•”ν˜Έν™” ν‚€λ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄ μ„€κ³„λœ ν•˜λ“œμ›¨μ–΄ λ³΄μ•ˆ μž₯치일 κ²½μš°μ—” μžλ™ μŠ€μΌ€μΌλ§μ΄ μ–΄λ €μšΈ 수 μžˆλ‹€.

반면, KESλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό KMSλ₯Ό λΆ„λ¦¬ν•˜μ—¬, λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μš”μ²­μ„ λ…μžμ μœΌλ‘œ μ²˜λ¦¬ν•˜κ³ , μ•”ν˜Έν™”ν‚€ 생성/μ‚­μ œ μ‹œμ—λ§Œ KMS와 ν†΅μ‹ ν•˜μ—¬ KMS에 λŒ€ν•œ λΆ€ν•˜λ₯Ό 크게 쀄여쀀닀.

μ΄λŸ¬ν•œ μ•„ν‚€ν…μ²˜λ₯Ό 톡해 KESλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό KMS κ°„μ˜ μƒν˜Έ μ˜μ‘΄μ„±μ„ 쀄이고, μˆ˜ν‰μœΌλ‘œ ν™•μž₯ κ°€λŠ₯ν•œ μ†”λ£¨μ…˜μ„ μ œκ³΅ν•˜μ—¬ λŒ€κ·œλͺ¨ μž‘μ—… λΆ€ν•˜λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ‹€.


KES Access Control

KESλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— 인증 및 κΆŒν•œμ„ λΆ€μ—¬ν•˜κΈ° μœ„ν•΄ mTLS 인증(mutual TLS authentication)을 μ‚¬μš©ν•œλ‹€.

mTLSλŠ” μƒν˜Έ 인증 및 κΆŒν•œ λΆ€μ—¬λ₯Ό μœ„ν•΄ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ μƒν˜Έ 인증을 μˆ˜ν–‰ν•˜λŠ” TLS(Transport Layer Security) ν”„λ‘œν† μ½œμ˜ ν•œ ν˜•νƒœμ΄λ‹€. KESμ—μ„œ mTLSλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨ ν΄λΌμ΄μ–ΈνŠΈλŠ” KES μ„œλ²„μ— λŒ€ν•œ μ‹ λ’°μ„± μžˆλŠ” 인증을 λ°›κ³ , μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ 신원을 ν™•μΈν•˜μ—¬ μš”μ²­μ„ μŠΉμΈν•˜κ±°λ‚˜ κ±°λΆ€ν•  수 μžˆλ‹€.

인증(Authentication)

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” μƒλŒ€μ—κ²Œ μžμ‹ μ˜ x.509 μΈμ¦μ„œμ™€ ν•΄λ‹Ή μΈμ¦μ„œμ— λŒ€ν•œ κ°œμΈν‚€λ₯Ό 보여주어 인증 절차λ₯Ό μ§„ν–‰ν•œλ‹€. μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈμ¦μ„œκ°€ μœ νš¨ν•˜κ³  인증된 κ²½μš°μ—λ§Œ 연결을 ν—ˆμš©ν•œλ‹€.

이λ₯Ό 톡해 mTLSλ₯Ό μ‚¬μš©ν•œ 인증은 ν΄λΌμ΄μ–ΈνŠΈ 및 μ„œλ²„ μƒμ˜ μƒν˜Έ 신뒰성을 ν™•μΈν•˜κ³  인증된 연결을 μˆ˜λ¦½ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.

ν…ŒμŠ€νŠΈ 및 초기 κ°œλ°œμ‹œ

ν…ŒμŠ€νŠΈλ‚˜ 초기 개발 μ‹œμ—λŠ” μ‹ λ’°λ˜μ§€ μ•Šκ±°λ‚˜ 자체 μ„œλͺ…λœ μΈμ¦μ„œλ₯Ό μ‚¬μš©ν•  수 있으며, 이λ₯Ό μœ„ν•΄ kes server --auth μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ KES μ„œλ²„λ₯Ό μ‹œμž‘ν•  수 μžˆλ‹€. μ΄λŠ” λ³΄μ•ˆ μΈμ¦μ„œκ°€ μ•„λ‹Œ μΈμ¦μ„œλ₯Ό μ‚¬μš©ν•˜μ—¬ mTLSλ₯Ό μˆ˜ν–‰ν•  수 μžˆλŠ” μœ μ—°μ„±μ„ μ œκ³΅ν•œλ‹€. κ·ΈλŸ¬λ‚˜ MinIOλŠ” 운영 ν™˜κ²½μ—μ„œλŠ” μ‹ λ’°ν•  수 μžˆλŠ” μΈμ¦μ„œλ§Œ ν—ˆμš©ν•˜λŠ” 것을 κ°•λ ₯히 ꢌμž₯ν•œλ‹€.


κΆŒν•œ(Authorization)

KESλŠ” μ •μ±… 기반의 μ ‘κ·Ό μ œμ–΄(Policy-Based Access Control, PBAC)λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈκ°€ μˆ˜ν–‰ν•  수 μžˆλŠ” μž‘μ—…μ„ κ²°μ •ν•œλ‹€. 각 정책은 ν•˜λ‚˜ μ΄μƒμ˜ 신원(identity)으둜 κ΅¬μ„±λ˜λ©°, 각 신원은 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„μ˜ x.509 μΈμ¦μ„œ SHA-256 ν•΄μ‹œκ°’μœΌλ‘œ 확인할 수 μžˆλ‹€. μ„œλ²„λŠ” λ‹€μŒ 쑰건이 참인 κ²½μš°μ—λ§Œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν—ˆμš©ν•œλ‹€

  • KES μ„œλ²„μ— ν•΄λ‹Ή ν΄λΌμ΄μ–ΈνŠΈ 신원을 ν¬ν•¨ν•˜λŠ” 정책이 쑴재
  • 정책이 μš”μ²­ν•œ μž‘μ—…μ„ λͺ…μ‹œμ μœΌλ‘œ ν—ˆμš©

λ§Œμ•½ KES μ„œλ²„μ— ν•΄λ‹Ήν•˜λŠ” 정책이 μ‘΄μž¬ν•˜μ§€ μ•Šκ±°λ‚˜, 정책이 μš”μ²­ν•œ μž‘μ—…μ„ λͺ…μ‹œμ μœΌλ‘œ ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” 경우, KES μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ κ±°λΆ€ν•œλ‹€.


KES Policies

KES μ„œλ²„ 정책은 μ–΄λ–€ λ¦¬μ†ŒμŠ€μ—μ„œ μ–΄λ–€ API μž‘μ—…μ΄ ν—ˆμš©λ˜κ±°λ‚˜ κ±°λΆ€λ˜λŠ”μ§€ μ •μ˜ν•˜λŠ” 일련의 κ·œμΉ™μ„ μ •μ˜ν•˜μ—¬, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ ν—ˆμš©ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€.

일반적으둜 μ •μ±…μ˜ νŒ¨ν„΄μ€ μ•„λž˜μ™€ 같은 ν˜•μ‹μ΄λ‹€.

/<API-version>/<API>/<operation>/[<argument0>/<argument1>/...]

만일 κ±°λΆ€ νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜κ±°λ‚˜, ν—ˆμš© νŒ¨ν„΄μ΄ μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ prohibited by policy 였λ₯˜μ™€ ν•¨κ»˜ μš”μ²­μ„ κ±°λΆ€ν•œλ‹€.

allow, deny

μ•„λž˜ μ •μ±… yaml 파일 쀑 일뢀 μ˜ˆμ‹œλ₯Ό 보자.

policy:
  my-policy:
    allow:
    - /v1/metrics
    - /v1/key/create/my-key
    - /v1/key/generate/my-key*
    - /v1/key/decrypt/my-key*
    deny:
    - /v1/key/*/my-key-internal*

이 μ½”λ“œλŠ” β€œmy-policyβ€λΌλŠ” μ΄λ¦„μ˜ 정책이 μ •μ˜λ˜μ–΄ μžˆλ‹€. 이 정책은 allow κ·œμΉ™ 4κ°œμ™€ deny κ·œμΉ™ 1개λ₯Ό μ •μ˜ν•˜κ³  μžˆλ‹€.

λ¨Όμ € deny κ·œμΉ™μ΄ μ²˜λ¦¬λœλ‹€.

my-key-internalλΌλŠ” 접두사λ₯Ό 가진 λͺ¨λ“  킀에 λŒ€ν•œ key API(key/*/)λ₯Ό κΈˆμ§€ν•˜λŠ” deny κ·œμΉ™μ΄ μ •μ˜ λ˜μ–΄ μžˆλ‹€. 예둜 /v1/key/create/my-key-internal, /v1/key/generate/my-key-internal, /v1/key/generate/my-key-internal2와 같은 μš”μ²­μ€ κ±°λΆ€λœλ‹€.

deny κ·œμΉ™ 처리 ν›„, allow κ·œμΉ™μ— 따라 μš”μ²­μ„ ν‰κ°€ν•œλ‹€.

μš°μ„  /v1/key/create/my-keyλŠ” my-keyλΌλŠ” μ΄λ¦„μ˜ ν‚€λ₯Ό μƒμ„±ν•˜λŠ” μš”μ²­μ„ ν—ˆμš©ν•œλ‹€. ν•˜μ§€λ§Œ my-key2와 같은 λ‹€λ₯Έ 문자 μ‘°ν•©μœΌλ‘œ ν‚€ 생성은 정책에 μ˜ν•΄ κΈˆμ§€λœ 였λ₯˜λ‘œ λ°˜ν™˜ν•œλ‹€.

/v1/key/generate/my-key*와 /v1/key/decrypt/my-key*λŠ” μ‚¬μš©μžκ°€ μƒˆλ‘œμš΄ 데이터 μ•”ν˜Έν™” ν‚€(DEK)λ₯Ό μƒμ„±ν•˜κ±°λ‚˜, μ•”ν˜Έν™”λœ DEKλ₯Ό λ³΅ν˜Έν™”ν•˜λŠ” μš”μ²­μ„ ν•  경우, my-keyλΌλŠ” 접두사λ₯Ό 가진 λͺ¨λ“  ν‚€λ₯Ό ν—ˆμš©ν•œλ‹€. 예둜, /v1/key/generate/my-key λ˜λŠ” /v1/key/generate/my-key2λŠ” ν—ˆμš©ν•˜μ§€λ§Œ, /v1/key/generate/key-to-generate1은 κ±°λΆ€ν•œλ‹€.


paths, identities

μ•„λž˜μ²˜λŸΌ pathsλ₯Ό 톡해 APIμž‘μ—…μ„ ν—ˆμš©ν•˜λŠ”μ§€ λͺ…μ‹œν•  μˆ˜λ„ μžˆλ‹€. λ˜ν•œ identitesλ₯Ό 톡해 νŠΉμ • ν΄λΌμ΄μ–ΈνŠΈμ—λ§Œ κΆŒν•œμ„ λΆ€μ—¬ν•  μˆ˜λ„ μžˆλ‹€. μ•„λž˜ μ˜ˆμ‹œμΈ β€œminio-sseβ€λΌλŠ” μ΄λ¦„μ˜ 정책은 MinIO μ„œλ²„ μΈ‘ μ•”ν˜Έν™”(MinIO Server-Side Encryption)λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•œ API μ—”λ“œν¬μΈνŠΈκ°€ κΈ°μˆ λ˜μ–΄ μžˆλ‹€.

policy:
   minio-sse:
      paths:
      - /v1/key/create/*
      - /v1/key/generate/*
      - /v1/key/decrypt/*
      - /v1/key/delete/*
      identities:
      - <SHA-256 HASH>
  • policy.policyname.pathsλŠ” minio-sse 정책이 μ ‘κ·Ό κΆŒν•œμ„ λΆ€μ—¬ν•˜λŠ” API μ—”λ“œν¬μΈνŠΈ 이닀.
  • policy.policyname.identitiesλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ x.509 μΈμ¦μ„œ SHA-256 ν•΄μ‹œκ°’μ΄λ‹€.

μ •μ±…κ³Ό identitiesλŠ” 1:N 관계λ₯Ό 가지며, ν•œ μ •μ±…μ—λŠ” μ—¬λŸ¬ identitiesλ₯Ό ν¬ν•¨μ‹œν‚¬ 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ ν•˜λ‚˜μ˜ identitiesλŠ” ν•œ λ²ˆμ— μ΅œλŒ€ ν•˜λ‚˜μ˜ μ •μ±…κ³Ό 연결될 수 μžˆλ‹€.

KES μ„œλ²„λŠ” 2가지 μ •μ±… ꡬ성 방법을 μ œκ³΅ν•œλ‹€.

  • KES ꡬ성 νŒŒμΌμ„ ν†΅ν•œ μ •μ±… 영ꡬ 적용
  • kes policy λ˜λŠ” kes identityλ₯Ό ν†΅ν•œ KES μ„œλ²„μ˜ μΌμ‹œμ μΈ μ •μ±… 생성

kes policy λ˜λŠ” kes identityλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±ν•˜κ±°λ‚˜ μˆ˜μ •ν•œ 정책은 KES μ„œλ²„λ₯Ό λ‹€μ‹œ μ‹œμž‘ν•˜λ©΄ μ‚¬λΌμ§€κ²Œ λœλ‹€.


Integrations KMS

MinIO KES κ³΅μ‹λ¬Έμ„œμ— λ‚˜μ™€μžˆλŠ” 톡합 지원 KMSλŠ” μ•„λž˜μ™€ κ°™λ‹€.

  • AWS Secrets Manager: μ•„λ§ˆμ‘΄ μ›Ή μ„œλΉ„μŠ€(AWS)의 ν‚€ 관리 μ„œλΉ„μŠ€λ‘œ, μ•”ν˜Έν™” 킀와 λ‹€λ₯Έ λ³΄μ•ˆ μžμ›μ„ μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©.
  • Azure Key Vault: λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈ Azure의 ν‚€ 관리 μ„œλΉ„μŠ€λ‘œ, λ³΄μ•ˆ ν‚€, μ•”ν˜Έ 및 μΈμ¦μ„œμ™€ 같은 μ€‘μš”ν•œ 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³  μ•‘μ„ΈμŠ€ν•  수 μžˆλ„λ‘ 지원.
  • Fortanix SDKMS: Fortanix의 Secure Data Kit Management System(SDKMS)둜, ν΄λΌμš°λ“œ 및 μ˜¨ν”„λ ˆλ―ΈμŠ€ ν™˜κ²½μ—μ„œ 킀와 μ•”ν˜Έλ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©.
  • Google Cloud Secret Manager: Google Cloud의 ν‚€ 관리 μ„œλΉ„μŠ€λ‘œ, μ•”ν˜Έν™” ν‚€, API 토큰 및 기타 λΉ„λ°€ 정보λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³  μ•‘μ„ΈμŠ€ν•  수 μžˆλ„λ‘ 지원.
  • Hashicorp Vault Keystore: Hashicorp VaultλŠ” μ˜€ν”ˆ μ†ŒμŠ€μ˜ λ³΄μ•ˆ ν‚€ μ €μž₯μ†Œλ‘œ, λ‹€μ–‘ν•œ λΉ„λ°€ 정보 및 μ•”ν˜Έν™” ν‚€λ₯Ό μ•ˆμ „ν•˜κ²Œ μ €μž₯ν•˜κ³  μ•‘μ„ΈμŠ€ν•  수 μžˆλ„λ‘ 지원.
  • Thales CipherTrust Manager (formerly Gemalto KeySecure): Thales의 CipherTrust ManagerλŠ” ν‚€ 및 μ•”ν˜Έ 관리 μ‹œμŠ€ν…œμœΌλ‘œ, λ‹€μ–‘ν•œ μ•”ν˜Έν™” μ†”λ£¨μ…˜κ³Ό ν†΅ν•©ν•˜μ—¬ ν‚€ 라이프사이클 및 λ³΄μ•ˆ μš”κ΅¬ 사항을 관리.


MinIO KES에 λŒ€ν•œ 더 μžμ„Έν•œ μ„€λͺ…은 κ³΅μ‹λ¬Έμ„œλ₯Ό μ°Έκ³ ν•˜κΈ° λ°”λž€λ‹€.

Leave a comment