[MinIO] MinIO Key Encryption Service(KES)
MinIO KES(Key Encryption Service)
MinIO Key Encryption Service (KES)λ κ³ μ±λ₯ μ ν리μΌμ΄μ μ μν statelessν λΆμ° ν€ κ΄λ¦¬ μμ€ν μ΄λ€. KESλ 컨ν μ΄λ κΈ°λ°(Kubernetes)μ νλμ μΈ μ ν리μΌμ΄μ κ³Ό μ€μ μ§μ€μ ν€ κ΄λ¦¬ μλΉμ€(KMS) κ°μ μ°κ²° μν μ νλ€.
KES μμ μμ
- μ ν리μΌμ΄μ μ TLS(Transport Layer Security) νλ‘ν μ½μ ν΅ν΄ KES μλ²μ μ κ·Ό
- μ ν리μΌμ΄μ μ KES μλ² APIλ₯Ό μ¬μ©νμ¬ μλ‘μ΄ μνΈν ν€λ₯Ό μμ±νλ λ±μ μμ μ μννλ€.
- KESλ μνΈν ν€λ₯Ό ν¬ν¨ν λͺ¨λ μν μ λ³΄κ° μ μ₯λμ΄ μλ KMSμ ν΅μ νλ€.
- νμ§λ§, λ§μΌ μνλ₯Ό κ°μ§μ§ μλ μμ μΈ μνΈν, 볡νΈν, ν€ νμ λ±κ³Ό κ°μ μμ μ, 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