Istio์˜ ์‚ฌ์šฉ์ž, ์„œ๋น„์Šค ๋ณด์•ˆ ๊ตฌ์กฐ. ์‚ฌ์šฉ์ž ๊ด€์  ๋ณด์•ˆ via OIDC, RequestAuthentication, ์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ via mTLS, SPIFFE ์—์„œ ์ž์„ธํžˆ ๋…ผํ•œ๋‹ค.

Istio์˜ ์‚ฌ์šฉ์ž, ์„œ๋น„์Šค ๋ณด์•ˆ ๊ตฌ์กฐ. ์‚ฌ์šฉ์ž ๊ด€์  ๋ณด์•ˆ via OIDC, RequestAuthentication, ์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ via mTLS, SPIFFE ์—์„œ ์ž์„ธํžˆ ๋…ผํ•œ๋‹ค.

Introduction

๋Œ€ํ‘œ์  Service Mesh ์ œํ’ˆ์ธ Istio์— ๋Œ€ํ•œ overview๋กœ Kubernetes๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ์„ค๋ช…ํ•œ๋‹ค.

Istio overview: Architecture, Traffic Management, Istio overview: Observability ์— ์ด์–ด Security feature์— ๋Œ€ํ•ด ๋‹ค๋ฃฌ๋‹ค(์ดํ›„ Istio overview: Extensibility, Etc. ๋กœ ์ด์–ด ์ง„๋‹ค).

์ฐธ์กฐํ•œ ๋ฌธ์„œ๋Š” ๊ธ€ ๋‚ด๋ถ€ ๋ฐ References ์— ๋‹ฌ์•˜๋‹ค.

Summary

  • ๋ณด์•ˆ ๊ด€์ ์—์„œ Istio๋Š” ZTA(Zero Trust Architecture)๋ฅผ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.
  • Istio๋Š” ์‚ฌ์šฉ์ž ๊ด€์  ๋ณด์•ˆ์œผ๋กœ JWT/JWK ๊ธฐ๋ฐ˜์˜ OIDC(OpenID Connect)๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • Istio๋Š” ์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ์œผ๋กœ mTLS ๋ฐ SPIFFE(Secure Production Identity Framework for Everyone)๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • AuthorizationPolicy ๋ฅผ ํ†ตํ•ด L7 ์ˆ˜์ค€์—์„œ access control์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Zero Trust Architecture

SecurityDescribes Istio's authorization and authentication functionality.
https://istio.io/latest/docs/concepts/security/

Istio๋Š” ZTA(Zero Trust Architecture)๋ฅผ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š”๋ฐ, ์‹ค์ œ ์œ„ ๊ณต์‹ ๋ฌธ์„œ๋Š” Zero Trust network๋ฅผ ์–ธ๊ธ‰ํ•œ๋‹ค. ์ด๋Š” Istio๊ฐ€ multi clusters ๋ฐ ์™ธ๋ถ€ host๊ฐ€ ํฌํ•จ๋œ ํ™˜๊ฒฝ๋„ ์ง€์›ํ•จ์„ ๊ณ ๋ คํ•˜๋ฉด ์ถฉ๋ถ„ํžˆ ์ดํ•ด๋˜๋Š” ๋ถ€๋ถ„์ด๋‹ค(์ด๋“ค ํ™˜๊ฒฝ์—์„œ๋Š” traffic์ด ๋ณดํ˜ธ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋ณด์•ˆ ์ •์ฑ…์ด ์ƒ์ดํ•œ ๊ตฌ๊ฐ„์„ ์ง€๋‚˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค).

ZTA; Zero Trust Architecture๋ž€ (ํ•˜๊ธฐ ๋งํฌ ์š”์•ฝ)

Zero trust security modelThe zero trust security model, also known as zero trust architecture (ZTA), and sometimes known as perimeterless security, describes an approach to the strategy, design and implementation of IT systems. The main concept behind the zero trust security model is "never trust, always verify", which means that users and devices should not be trusted by default, even if they are connected to a permissioned network such as a corporate LAN and even if they were previously verified.
https://en.wikipedia.org/wiki/Zero_trust_security_model#cite_note-:3-10

๊ฒฝ๊ณ„ ์—†๋Š” ๋ณด์•ˆ(perimeterless security)๋กœ๋„ ๋ถˆ๋ฆฌ๋Š” ZTA์˜ ์ฃผ์š” ๊ฐœ๋…์€ "์‹ ๋ขฐํ•˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ํ™•์ธ"์ด๋‹ค. ์ด๋Š” ์œ„์น˜์— ๊ด€๊ณ„ ์—†์ด resource์— ์ ‘๊ทผํ•˜๋Š” user์™€ device๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ ๋ขฐ ๋ถˆ๊ฐ€ํ•˜๋‹ค๋Š” ๋œป์œผ๋กœ, LAN, VPN ๋“ฑ ์ „ํ†ต์  ๋ณด์•ˆ ์š”์†Œ๊ฐ€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค, ์ธํ”„๋ผ, IoT ์„œ๋น„์Šค ๋“ฑ์˜ ํ˜„๋Œ€ network ํ™˜๊ฒฝ์—์„œ๋Š” ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ธ์‹์— ๊ทผ๊ฐ„ํ•œ๋‹ค.

ZTA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ user์™€ device ๋ชจ๋‘์— ๋Œ€ํ•œ ์ธ์ฆ๊ณผ ์ตœ์†Œ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์š”๊ตฌํ•˜์—ฌ, ์ „์ฒด ๊ตฌํ˜„์—๋Š” ํ–ฅ์ƒ๋œ ID ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ฐ ์ •์ฑ… ๊ธฐ๋ฐ˜ ์•ก์„ธ์Šค ์ œ์–ด, ๋งˆ์ดํฌ๋กœ ์„ธ๋ถ„ํ™”, ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ(overlay network) ๊ฐ€ ํฌํ•จ๋œ๋‹ค.

์œ„์˜ ZTA ์„ค๋ช… ์ค‘ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ๊ฐ€ ํŠนํžˆ ๋ˆˆ์— ๋„๋Š”๋ฐ, Service Mesh, ์ฆ‰ Istio ์ž์ฒด๊ฐ€ ์ผ์ข…์˜ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋งจ ์•ž์˜ ๊ทธ๋ฆผ์€ ์ด๋Ÿฌํ•œ ๊ด€์ ์—์„œ์˜ Istio์˜ ๋ณด์•ˆ features ์ „์ฒด์˜ ์š”์•ฝ์œผ๋กœ, Istio์˜ ๋ณด์•ˆ ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž์™€ ์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ์œผ๋กœ ๋‚˜๋ˆ  ๋ณผ ์ˆ˜ ์žˆ์–ด, ๊ฐ๊ฐ ์ขŒ์ธก๊ณผ ์šฐ์ธก์— ํ•ด๋‹นํ•œ๋‹ค. ์–‘์ž ๊ณตํ†ต์œผ๋กœ ์ธ์ฆ(AuthN; AutheNtication), ์ธ๊ฐ€(AuthZ; AuthoriZation)๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ์—์„œ๋Š” mTLS์„ ํ†ตํ•ด, ๊ธฐ๋ฐ€์„ฑ, ๋ฌด๊ฒฐ์„ฑ, ๋ถ€์ธ๋ฐฉ์ง€๊ฐ€ ์ถ”๊ฐ€๋œ๋‹ค. ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ ์ด๋Š” ๋ถˆํ•„์š”ํ•œ๋ฐ, ์ผ๋ฐ˜์ ์œผ๋กœ public CA(Certificate Authority) ๊ด€๋ฆฌ ํ•˜์— TLS๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฐธ๊ณ ๋กœ, AAA(Authentication, Authorization, Audit) ์ค‘ Audit์€ ์•„๋ž˜ ์„ค๋ช…ํ•  AuthorizationPolicy ์˜ action ์—์„œ AUDIT (logging)์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด์™ธ์—๋„ Istio overview: Observability์—์„œ ๋…ผํ•œ (Access) Logs๋Š” Audit์„ ์œ„ํ•œ ์žฅ์น˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ZTA ๋ฐ Istio์™€์˜ ๊ตฌ์ฒด์  ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ๋Š” Zero Trust Architecture via Istio ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.

์‚ฌ์šฉ์ž ๊ด€์  ๋ณด์•ˆ via OIDC, RequestAuthentication

Istio์˜ ์‚ฌ์šฉ์ž ๋ณด์•ˆ ๊ตฌ์กฐ

Istio์˜ ์‚ฌ์šฉ์ž ๋ณด์•ˆ ๊ตฌ์กฐ

์‚ฌ์šฉ์ž ์ธ์ฆ์œผ๋กœ๋Š” ๋Œ€ํ‘œ์ ์ธ ์ธ์ฆ ํ”„๋กœํ† ์ฝœ์ธ JWT/JWK, OAuth 2.0 ๊ธฐ๋ฐ˜์˜ OpenID Connect(OIDC)๋ฅผ ์ง€์›ํ•œ๋‹ค. RequestAuthentication Istio resource๋Š” IdP(ID Provider) ์ •๋ณด ๋ฐ ์ ์šฉํ•  workload๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

RequestAuthenticationRequest authentication configuration for workloads.
https://istio.io/latest/docs/reference/config/security/request_authentication/

์•„๋ž˜๋Š” ์œ„ ๊ณต์‹ ๋ฌธ์„œ์— ๋‹ด๊ธด RequestAuthentication ๋ฐ AuthorizationPolicy ์˜ˆ๋ฅผ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋กœ, app:httpbin ์ธ workload์— ์ ‘๊ทผ์„ ์œ„ํ•ด์„œ๋Š” issuer-foo ๋ž€ IdP(ID Provider)๊ฐ€ ๋ฐœ๊ธ‰ํ•œ JWT์—, Host header๊ฐ€ httpbin.com ์ธ request ์ผ ๊ฒฝ์šฐ์—๋งŒ ํ—ˆ์šฉํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

AuthorizationPolicy ๋Š” access control๋ฅผ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ AuthorizationPolicy : Access Control in L7 ์—์„œ ๋ณ„๋„๋กœ ๋‹ค๋ฃฌ๋‹ค.

apiVersion: security.istio.io/v1
kind: RequestAuthentication
metadata:
  name: httpbin
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin # app:httpbin label์„ ๊ฐ€์ง„ workload์— ์ ์šฉ. ์—†์„ ๊ฒฝ์šฐ namespace(foo)์˜ ๋ชจ๋“  workload์— ์ ์šฉ๋จ.
  jwtRules:
  - issuer: "issuer-foo" # IdP ์ง€์ •. JWT์˜ ISS์— ํ•ด๋‹น: https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.1
    jwksUri: https://issuer-foo.com/.well-known/jwks.json # IdP์˜ JWKS endpoint (JWT validation ์šฉ๋„)
---
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: httpbin
  namespace: foo
spec:
  selector:
    matchLabels:
      app: httpbin # app:httpbin label์„ ๊ฐ€์ง„ workload์— ์ ์šฉ. ์—†์„ ๊ฒฝ์šฐ namespace(foo)์˜ ๋ชจ๋“  workload์— ์ ์šฉ๋จ.
  rules:
  - from:
    - source:
        requestPrincipals: ["issuer-foo/*"] # JWT์˜ "<ISS>/<SUB>"์— ๋งค์นญ
    to:
    - operation:
        hosts: ["httpbin.com"] # HTTP request์˜ Host header value์— ๋งค์นญ
YAML

์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ via mTLS, SPIFFE

Istio์˜ ์„œ๋น„์Šค ๋ณด์•ˆ ๊ตฌ์กฐ

Istio์˜ ์„œ๋น„์Šค ๋ณด์•ˆ ๊ตฌ์กฐ

์„œ๋น„์Šค ๊ด€์  ๋ณด์•ˆ์—์„œ Istio์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ mTLS์™€ SPIFFE๋กœ์„œ, ์ด๋“ค ์„œ๋น„์Šค๋Š” ์ž๋™์œผ๋กœ ์—ฌํƒ€ Istio ์„œ๋น„์Šค์— ํ†ตํ•ฉ๋œ๋‹ค.

๋จผ์ €, mTLS๋Š” mutual TLS์˜ ์•ฝ์ž๋กœ TLS์— ์Œ๋ฐฉํ–ฅ ์ธ์ฆ ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” TLS์™€ ๋™์ž‘ ๋ฐฉ์‹์ด ๋™์ผํ•˜๋‹ค. SPIFFE(Secure Production Identity Framework for Everyone)๋Š” ์„œ๋น„์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ open-source ํ‘œ์ค€์œผ๋กœ mTLS ๊ธฐ๋ฐ˜ ์œ„์— ๋™์ž‘ํ•œ๋‹ค. ์ฐธ๊ณ ๋กœ, Istio ๋ฐ Kubernetes ๋ฟ ์•„๋‹ˆ๋ผ AWS, GCP, Azure ๋“ฑ ์ฃผ์š” CSP๊ฐ€ SPIFFE๋ฅผ ์ง€์› ์ค‘ ์ด๋‹ค(์ฐธ๊ณ ).

SPIFFE | SPIFFE ConceptsThis section looks at some basic concepts in SPIFFE that we refer to frequently throughout this overview.
https://spiffe.io/docs/latest/spiffe-about/spiffe-concepts/

๋‹ค์Œ์€ Istio ๊ธฐ๋ฐ˜์˜ mTLS, SPIFFE ํŠน์ง•์ด๋‹ค.

  • SPIFFE ID: workload ID based on k8s ServiceAccount

    • SPIFFE ID๋Š” workload ์‹๋ณ„์ž๋กœ์„œ k8s ServiceAccount ์— ๊ธฐ๋ฐ˜
    • e.g. spiffe://cluster.local/ns/cluster/sa/dockebi
  • SVID : SPIFFE ID in X.509 certificate

    • SVID ๋Š” SPIFFE Verifiable Identity Document์˜ ์•ฝ์ž๋กœ SPIFFE ID๊ฐ€ ๋‹ด๊ธด ๋ฌธ์„œ๋ฅผ ์˜๋ฏธ.
    • ๋ฌธ์„œ format์œผ๋กœ JWT๋„ ์‚ฌ์šฉ๋˜๋‚˜, Istio๋Š” X.509 certificate์„ ์‚ฌ์šฉํ•˜์—ฌ SAN(Subject Alternative Name)๋‚ด URI์— SPIFFE ID๊ฐ€ ์œ„์น˜.
  • istiod as a CA(Certificate Authority) / SPIFFE Workload API

    • istiod ๋Š” X.509 SVID ๋ฅผ ๊ฐ workload์— ๋ฐœ๊ธ‰ํ•จ์œผ๋กœ SVID ๋ฐœ๊ธ‰ ์ฃผ์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” SPIFFE Workload API ์—ญํ• ์„ ์ˆ˜ํ–‰
  • Istio proxy as SPIFFE Endpoint

    • Istio Proxy ๊ฐ„ ํ†ต์‹ ์€ SVID ๊ธฐ๋ฐ˜์œผ๋กœ mTLS ์ƒ์— ์ด๋ฃจ์–ด์ง์œผ๋กœ SPIFFE Workload Endpoint ์—ญํ• ์„ ์ˆ˜ํ–‰
  • ์™ธ๋ถ€ SPIRE ์„œ๋ฒ„ ์—ฐ๋™ ์ง€์›

    • istiod ๋Œ€์‹  ์™ธ๋ถ€ SPIRE(SPIFFE Runtime Environment) ์„œ๋ฒ„๊ฐ€ ๋ฐœ๊ธ‰ํ•œ SVID ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ ๊ฐ€๋Šฅ. https://istio.io/latest/docs/ops/integrations/spire/ ์ฐธ๊ณ .

์ถ”๊ฐ€๋กœ Istio/Envoy๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด SPIFFE-ID๊ฐ€ ๋‹ด๊ธด X-Forwarded-Client-Cert header๋ฅผ HTTP request๋กœ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค.

# URI(client): dockebi-tock
# By(current proxy): dockebi-storage
# Hash: SHA 256 digest of the client certificate
"X-Forwarded-Client-Cert": 'By=spiffe://cluster.local/ns/cluster/sa/dockebi-storage;Hash=252bad1a52c5523d594fbd1bb75a586b413ce501993946a27c8161b552062eaf;Subject="";URI=spiffe://cluster.local/ns/cluster/sa/dockebi-tock',
YAML

์ฐธ๊ณ ๋กœ ์‚ฌ์šฉ์ž ์ธ์ฆ(RequestAuthentication)์— ๋Œ€๋น„๋˜๋Š” PeerAuthentication ๋ž€ Istio resource๋„ ์žˆ๋Š”๋ฐ, namespace, worload, port ๋‹จ์œ„๋กœ mTLS ์ ์šฉ ์ˆ˜์ค€(DISABLE, STRICT, PERMISSIVE)์„ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋Šฅ ์ด์™ธ์—๋Š” ์—†์œผ๋ฉฐ Ambient mode์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ๋ณ„๋„ ์ง€์ •์ด ์—†์œผ๋ฉด PERMISSIVE (mTLS ์ด์™ธ์˜ ํ†ต์‹ ๋„ ๊ฐ€๋Šฅ)๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ, ๊ณต์‹ ๋ฌธ์„œ๋Š” ๋ณด์•ˆ mTLS์—๋งŒ ํ—ˆ์šฉ๋œ resource์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ ‘๊ทผ ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์ธํ•ด STRICT๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

์„œ๋น„์Šค ๊ฐ„ ๋ณด์•ˆ์— ์‚ฌ์šฉ๋˜๋Š” ์ธ๊ฐ€(AuthorizationPolicy)์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ž˜์—์„œ ์„ค๋ช…ํ•œ๋‹ค.

AuthorizationPolicy : Access Control in L7

Authorization PolicyConfiguration for access control on workloads.
https://istio.io/latest/docs/reference/config/security/authorization-policy/

์•ž์„œ ๋…ผํ–ˆ๋“ฏ Istio๋Š” ์‚ฌ์šฉ์ž, ์„œ๋น„์Šค ๋ชจ๋‘์— ๋Œ€ํ•œ access control์„ ์œ„ํ•ด AuthorizationPolicy ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. Kubernetes NetworkPolicy์— ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, Kubernetes NetworkPolicy๊ฐ€ L4๊นŒ์ง€์˜ ๋Œ€์‘์ด๋ผ๋ฉด AuthorizationPolicy ๋Š” L7๊นŒ์ง€์˜ ๋Œ€์‘์ด๋‹ค.

์ฃผ์š” ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • selectorย : ํ•ด๋‹น AuthorizationPolicy๊ฐ€ ์ ์šฉ๋  target workload ์ง€์ •. ์ƒ๋žต๋  ๊ฒฝ์šฐ ํ•ด๋‹น namespace์˜ ๋ชจ๋“  workload์— ์ ์šฉ๋จ.

  • actionย : request๋ฅผ ์ˆ˜์šฉ( ALLOW ; default)ํ• ์ง€, ๊ฑฐ๋ถ€(DENY)ํ• ์ง€ ๋“ฑ์˜ ์ •์ฑ…์„ ์ง€์ •. AUDIT ์€ log์— ๊ธฐ๋ก๋งŒ ํ•˜๊ณ , CUSTOM ์€ ์™ธ๋ถ€์˜ policy, ์˜ˆ์ปจ๋ฐ OPA(Open Policy Agent)์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

  • rulesย action ์ด ์ˆ˜ํ–‰๋  ์กฐ๊ฑด์„ ์ง€์ •

    • fromย : request์˜ source๋ฅผ ์ง€์ •
    • toย : ํ•ด๋‹น ์ •์ฑ…์ด ์ ์šฉ๋  ๊ตฌ์ฒด์  ๋Œ€์ƒ์„ ์ง€์ •
    • whenย : ๊ธฐํƒ€ ์ƒ์„ธ ์กฐ๊ฑด์„ ์ง€์ •

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์„œ๋น„์Šค ๊ฐ„ ๋ณด์•ˆ ์ƒ์—์„œ์˜ AuthorizationPolicy ์˜ˆ๋กœ, ์•„๋ž˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‹ค.

  • target workload: app:httpbin-backend label์„ ๊ฐ€์ง„ workload ๋ฐ
  • target operations: GET /info*, POST /data endpoints์— ์ •์ฑ…์ด ์ ์šฉ๋˜์–ด,
  • when: https://issuer-foo.com ์—์„œ ๋ฐœ๊ธ‰ํ•œ JWT๊ฐ€ request์— ์žˆ๊ณ ,
  • source: service account๊ฐ€ foo namespace์— name์ด httpbin ์ธ workload ๋˜๋Š” test namespace์ธ workload๋งŒ target ์ ‘๊ทผ(ALLOW) ๊ฐ€๋Šฅ
apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
  name: httpbin-backend
  namespace: foo
spec:
  action: ALLOW # default. rules์— ์ง€์ •๋œ ๊ทœ์น™์— ์ผ์น˜ํ•˜๋Š” request๋งŒ access ํ—ˆ์šฉ. DENY์˜ ๊ฒฝ์šฐ access ๊ฑฐ๋ถ€๋ฅผ ์˜๋ฏธ.
  selector:
    matchLabels:
      app: httpbin-backend # app:httpbin-backend label์„ ๊ฐ€์ง„ workload์— ์ ์šฉ. ์—†์„ ๊ฒฝ์šฐ namespace(foo)์˜ ๋ชจ๋“  workload์— ์ ์šฉ๋จ.  
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/foo/sa/httpbin"]
    - source:
        namespaces: ["test"]
    to:
    - operation:
        methods: ["GET"]
        paths: ["/info*"]
    - operation:
        methods: ["POST"]
        paths: ["/data"]
    when:
    - key: request.auth.claims[iss]
      values: ["https://issuer-foo.com"]
YAML

์ฐธ๊ณ ๋กœ, ๋™์ผ worload์— ๋Œ€ํ•ด ๋‹ค์ˆ˜์˜ AuthorizationPolicy ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ‰๊ฐ€ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์ถœ์ฒ˜: https://istio.io/latest/docs/concepts/security/#implicit-enablement

์ถœ์ฒ˜: https://istio.io/latest/docs/concepts/security/#implicit-enablement

Istio overview: Extensibility, Etc. ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

References

๋ณธ ๊ธ€ ์ž‘์„ฑ์— ์ฃผ๋กœ ์ฐธ์กฐํ•œ ๋ฌธ์„œ์ด๋‹ค.

DocumentationLearn how to deploy, use, and operate Istio.
https://istio.io/latest/docs/
Istio in ActionSolve service-to-service communication challenges with an Istio-based service mesh! This practical guide helps you reduce the operational complexity of your microservices.
https://www.manning.com/books/istio-in-action

Comments