Kubernetes Tools/Istio

[Istio ๊ฐ€์ด๋“œ ep.24] 3๋ถ€ ๋ณด์•ˆ ๋ฐ ์ธ์ฆ #8 | Istio์—์„œ Zero Trust ๋ณด์•ˆ ๋ชจ๋ธ ๊ตฌ์ถ•ํ•˜๊ธฐ

ygtoken 2025. 3. 18. 12:09
728x90

๐Ÿ”น ๊ฐœ์š”

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Istio๋ฅผ ํ™œ์šฉํ•˜์—ฌ Zero Trust ๋ณด์•ˆ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
Zero Trust ๋ณด์•ˆ ๋ชจ๋ธ์€ ๋„คํŠธ์›Œํฌ ๋‚ด๋ถ€์˜ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ๋„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ณ , ์ง€์†์ ์ธ ์ธ์ฆ๊ณผ ๋ณด์•ˆ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
Istio๋Š” mTLS, RBAC, AuthorizationPolicy, JWT ์ธ์ฆ ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ Zero Trust ํ™˜๊ฒฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” Zero Trust ๋ณด์•ˆ ๊ฐœ๋…, Istio์—์„œ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•, ์‹ค์ „ ์˜ˆ์ œ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 1. Zero Trust ๋ณด์•ˆ ๋ชจ๋ธ์ด๋ž€?

โœ… 1.1 Zero Trust ๊ฐœ๋…

Zero Trust(์ œ๋กœ ํŠธ๋Ÿฌ์ŠคํŠธ) ๋ณด์•ˆ ๋ชจ๋ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ณ , ์ง€์†์ ์ธ ์ธ์ฆ์„ ์š”๊ตฌํ•˜๋Š” ๋ณด์•ˆ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

Zero Trust์˜ ์ฃผ์š” ์›์น™

1๏ธโƒฃ Implicit Trust ์—†์Œ → ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ๋„ ๋ชจ๋“  ์š”์ฒญ์€ ์‹ ๋ขฐ๋˜์ง€ ์•Š์Œ
2๏ธโƒฃ ์ตœ์†Œ ๊ถŒํ•œ ์›์น™(Least Privilege Access) → ์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ๋งŒ ๋ถ€์—ฌ
3๏ธโƒฃ ์„œ๋น„์Šค ๊ฐ„ ๋ณด์•ˆ ์ธ์ฆ ํ•„์ˆ˜ → mTLS, JWT ๋“ฑ ์ธ์ฆ ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์ ์šฉ
4๏ธโƒฃ ๋„คํŠธ์›Œํฌ ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์—์„œ ๋ณด์•ˆ ๊ฒ€์ฆ
5๏ธโƒฃ ๋ณด์•ˆ ์œ„ํ˜‘ ๊ฐ์ง€ ๋ฐ ์ง€์†์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ’ก ๊ธฐ์กด ๋ณด์•ˆ ๋ชจ๋ธ์ด "๋„คํŠธ์›Œํฌ ๋‚ด๋ถ€๋Š” ์•ˆ์ „ํ•˜๋‹ค"๋Š” ๊ฐ€์ •์—์„œ ์ถœ๋ฐœํ–ˆ๋‹ค๋ฉด, Zero Trust๋Š” ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋„ ๊ณต๊ฒฉ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ „์ œํ•˜๊ณ  ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 2. Istio์—์„œ Zero Trust ๋ณด์•ˆ ์ ์šฉ

โœ… 2.1 Istio์—์„œ Zero Trust๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ

Istio๋ฅผ ํ™œ์šฉํ•˜์—ฌ Zero Trust๋ฅผ ์ ์šฉํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋Šฅ  ์„ค๋ช…
mTLS(Mutual TLS) ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”ํ•˜์—ฌ ๋ณด์•ˆ ๊ฐ•ํ™”
AuthorizationPolicy RBAC ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด
JWT ์ธ์ฆ API ์š”์ฒญ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ
๋„คํŠธ์›Œํฌ ์ •์ฑ… L3, L4, L7 ๊ณ„์ธต์˜ ํŠธ๋ž˜ํ”ฝ ๋ณด์•ˆ ๊ฐ•ํ™”
๊ฐ์‚ฌ ๋กœ๊ทธ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ณด์•ˆ ์ด๋ฒคํŠธ ๊ฐ์ง€ ๋ฐ ๋ถ„์„

๐Ÿ”น 3. Istio์˜ mTLS๋ฅผ ํ™œ์šฉํ•œ Zero Trust ์ ์šฉ

โœ… 3.1 ํด๋Ÿฌ์Šคํ„ฐ ์ „์ฒด์— mTLS ๊ฐ•์ œ ์ ์šฉ

Zero Trust ํ™˜๊ฒฝ์—์„œ๋Š” ๋ชจ๋“  ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์•”ํ˜ธํ™”๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, PeerAuthentication์„ ํ™œ์šฉํ•˜์—ฌ mTLS๋ฅผ ๊ฐ•์ œ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: enable-mtls
  namespace: istio-system
spec:
  mtls:
    mode: STRICT  # ๋ชจ๋“  ์„œ๋น„์Šค ๊ฐ„ mTLS ๊ฐ•์ œ ์ ์šฉ

์„ค๋ช…:

  • mtls.mode: STRICT → ๋ชจ๋“  ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์•”ํ˜ธํ™” (mTLS ๊ฐ•์ œ ์ ์šฉ)

๐Ÿ’ก mTLS๋ฅผ ์ ์šฉํ•˜๋ฉด, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด TLS๋กœ ๋ณดํ˜ธ๋˜๋ฉฐ, ๋ฌด๋‹จ ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”น 4. RBAC ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ์ ‘๊ทผ ์ œ์–ด (AuthorizationPolicy ํ™œ์šฉ)

โœ… 4.1 ํŠน์ • ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ ์ฐจ๋‹จ

์•„๋ž˜ ์˜ˆ์ œ๋Š” frontend ์„œ๋น„์Šค๋งŒ backend์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ์ •์ฑ…์ž…๋‹ˆ๋‹ค.

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-frontend-only
  namespace: default
spec:
  action: ALLOW
  rules:
    - from:
        - source:
            principals: ["cluster.local/ns/default/sa/frontend"]  # frontend ์„œ๋น„์Šค๋งŒ ํ—ˆ์šฉ
      to:
        - operation:
            methods: ["GET"]  # GET ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
            paths: ["/api/data"]  # ํŠน์ • ๊ฒฝ๋กœ๋งŒ ํ—ˆ์šฉ

์„ค๋ช…:

  • source.principals → frontend ์„œ๋น„์Šค์—์„œ ์˜ค๋Š” ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
  • operation.methods: ["GET"] → GET ์š”์ฒญ๋งŒ ํ—ˆ์šฉ
  • operation.paths: ["/api/data"] → ํŠน์ • API ์—”๋“œํฌ์ธํŠธ๋งŒ ํ—ˆ์šฉ

๐Ÿ’ก Zero Trust ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ์ฐจ๋‹จํ•˜๊ณ , ํ•„์š”ํ•œ ์„œ๋น„์Šค๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 5. JWT(JSON Web Token)๋ฅผ ํ™œ์šฉํ•œ API ์ธ์ฆ ๊ฐ•ํ™”

โœ… 5.1 JWT ์ธ์ฆ ์ ์šฉ (RequestAuthentication ์‚ฌ์šฉ)

Zero Trust ํ™˜๊ฒฝ์—์„œ๋Š” API ์š”์ฒญ์ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์•„๋ž˜ ์˜ˆ์ œ๋Š” JWT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋งŒ API์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
  name: jwt-auth
  namespace: default
spec:
  selector:
    matchLabels:
      app: my-service  # ํŠน์ • ์„œ๋น„์Šค์— JWT ์ธ์ฆ ์ ์šฉ
  jwtRules:
    - issuer: "https://auth.example.com"  # JWT ๋ฐœ๊ธ‰์ž
      jwksUri: "https://auth.example.com/.well-known/jwks.json"  # JWT ๊ฒ€์ฆ ํ‚ค

์„ค๋ช…:

  • issuer: "https://auth.example.com" → JWT ๋ฐœ๊ธ‰์ž(OAuth 2.0 ์ธ์ฆ ์„œ๋ฒ„)
  • jwksUri → JWT ์„œ๋ช…์„ ๊ฒ€์ฆํ•  ๊ณต๊ฐœ ํ‚ค URL

๐Ÿ’ก JWT ์ธ์ฆ์„ ์ ์šฉํ•˜๋ฉด, API ์š”์ฒญ ์‹œ ์œ ํšจํ•œ ํ† ํฐ์ด ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉด ์ ‘๊ทผ์ด ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น 6. Zero Trust ํ™˜๊ฒฝ์—์„œ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง

โœ… 6.1 Istio์˜ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ ํ™œ์šฉ

Zero Trust ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ ์ด๋ฒคํŠธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ , ์ด์ƒ ์ง•ํ›„๋ฅผ ํƒ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Kiali → Istio์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์‹œ๊ฐํ™”ํ•˜์—ฌ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ€๋Šฅ
  • Prometheus & Grafana → ์„œ๋น„์Šค ๊ฐ„ TLS ํŠธ๋ž˜ํ”ฝ ๋ฐ ์ธ์ฆ ์‹คํŒจ์œจ ๋ถ„์„
  • Jaeger & Zipkin → ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋žœ์žญ์…˜ ์ถ”์  ๋ฐ ์žฅ์•  ์›์ธ ๋ถ„์„

๋ณด์•ˆ ๋กœ๊ทธ ํ™•์ธ ๋ฐฉ๋ฒ•

kubectl logs -l app=istio-ingressgateway -n istio-system

๐Ÿ’ก ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ, ๋น„์ •์ƒ์ ์ธ ์š”์ฒญ์„ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

  • Zero Trust ๋ณด์•ˆ ๋ชจ๋ธ์€ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋„ ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ณ , ์ง€์†์ ์ธ ์ธ์ฆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • Istio์˜ mTLS๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์„œ๋น„์Šค ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • AuthorizationPolicy๋ฅผ ํ™œ์šฉํ•˜๋ฉด RBAC ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค ๊ฐ„ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์ ์šฉํ•˜๋ฉด API ์š”์ฒญ์ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์™”๋Š”์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ(Kiali, Prometheus, Grafana, Jaeger ๋“ฑ)์„ ํ™œ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
728x90