๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ RBAC(Role-Based Access Control) ๋ฐ AuthorizationPolicy๋ฅผ ํ์ฉํ ์๋น์ค ์ ๊ทผ ์ ์ด ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
RBAC๋ ์ฌ์ฉ์์ ์ญํ (Role)์ ๋ฐ๋ผ ๋ฆฌ์์ค ์ ๊ทผ์ ์ ์ดํ๋ ์ ์ฑ
์ด๋ฉฐ,
AuthorizationPolicy๋ Istio์์ ์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ ์ดํ๋ ๋ณด์ ๊ธฐ๋ฅ์
๋๋ค.
์ด ๊ธ์์๋ RBAC ๊ฐ๋
, AuthorizationPolicy ์ค์ ๋ฐฉ๋ฒ,
๊ทธ๋ฆฌ๊ณ ์ค์ YAML ์์ ๋ฅผ ํตํด ์๋น์ค ์ ๊ทผ ์ ์ด๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
๐น 1. Istio์์ RBAC๊ฐ ํ์ํ ์ด์
โ 1.1 RBAC(Role-Based Access Control) ๊ฐ๋
**RBAC(์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด)**๋ ์ฌ์ฉ์์ ์ญํ (Role)์ ๋ฐ๋ผ ํน์ ๋ฆฌ์์ค ์ ๊ทผ์ ํ์ฉ ๋๋ ์ฐจ๋จํ๋ ๋ณด์ ๋ชจ๋ธ์
๋๋ค.
Istio์์๋ RBAC ์ ์ฑ
์ ํ์ฉํ์ฌ ์๋น์ค ๊ฐ์ ์ ๊ทผ์ ์ ํํ ์ ์์ต๋๋ค.
RBAC์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ๊ฐ ๋ฌด๋จ ์ ๊ทผ ๋ฐฉ์ง
- ํน์ ์ฌ์ฉ์ ๋๋ ์๋น์ค์๋ง API ์ ๊ทผ ๊ถํ ๋ถ์ฌ ๊ฐ๋ฅ
- ์ ์ฑ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด๋ฅผ ํตํด ๋ณด์ ๊ฐํ
๐ก Kubernetes์ ๊ธฐ๋ณธ RBAC์ ๋ฌ๋ฆฌ, Istio๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ ์ดํ๋ RBAC ์ ์ฑ ์ ์ถ๊ฐ๋ก ์ ๊ณตํฉ๋๋ค.
โ 1.2 AuthorizationPolicy๋?
**AuthorizationPolicy(๊ถํ ์ ์ฑ
)**๋ ์๋น์ค ๊ฐ ํต์ ์ ์ ์ดํ๋ Istio์ ๋ณด์ ๋ฆฌ์์ค์
๋๋ค.
RBAC๋ฅผ ์ ์ฉํ์ฌ ํน์ ์๋น์ค๋ง ํน์ API์ ์ ๊ทผํ ์ ์๋๋ก ์ ํํ ์ ์์ต๋๋ค.
AuthorizationPolicy์ ์ฃผ์ ๊ธฐ๋ฅ
- ํน์ ์๋น์ค ๋๋ ์ฌ์ฉ์๊ฐ API๋ฅผ ํธ์ถํ ์ ์๋๋ก ์ ์ด
- IP, JWT ํ ํฐ, ๋ค์์คํ์ด์ค ๋ฑ์ ์กฐ๊ฑด์ ๊ธฐ๋ฐ์ผ๋ก ์ ๊ทผ ๊ถํ ๋ถ์ฌ ๊ฐ๋ฅ
- ๊ฑฐ๋ถ ์ ์ฑ (Deny Policy)์ ์ค์ ํ์ฌ ๋ถํ์ํ ์ ๊ทผ์ ์ฐจ๋จ
๐น 2. Istio RBAC ๋ฐ AuthorizationPolicy ์ค์
โ 2.1 ํน์ ์๋น์ค์๋ง ์ ๊ทผ ํ์ฉํ๊ธฐ
์๋ AuthorizationPolicy ์์ ์์๋ ์๋น์ค frontend๋ง backend ์๋น์ค์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํฉ๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-frontend
namespace: default
spec:
action: ALLOW # ์ ๊ทผ ํ์ฉ
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/frontend"] # frontend ์๋น์ค๋ง ํ์ฉ
to:
- operation:
methods: ["GET"] # GET ์์ฒญ๋ง ํ์ฉ
paths: ["/api/data"] # ํน์ API ๊ฒฝ๋ก๋ง ํ์ฉ
์ค๋ช :
- action: ALLOW → ์ง์ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ฒญ๋ง ํ์ฉ
- source.principals → frontend ์๋น์ค ๊ณ์ ๋ง ์ ๊ทผ ๊ฐ๋ฅ
- operation.methods: ["GET"] → GET ์์ฒญ๋ง ํ์ฉ
- operation.paths: ["/api/data"] → ํน์ API ์๋ํฌ์ธํธ๋ง ์ ๊ทผ ๊ฐ๋ฅ
๐ก ํ์ฉ ์ฌ๋ก:
- ์ธ๋ถ API์ ๋ํ ์ ๊ทผ์ ํน์ ์๋น์ค๋ง ๊ฐ๋ฅํ๋๋ก ์ ํํ ๋ ์ฌ์ฉ
- ๋ด๋ถ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ธ๋ฐํ๊ฒ ์ ์ด ๊ฐ๋ฅ
โ 2.2 ๋ชจ๋ ํธ๋ํฝ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ๋จํ๊ณ ์์ธ์ ์ผ๋ก ํ์ฉํ๊ธฐ
๊ธฐ๋ณธ์ ์ผ๋ก **๋ชจ๋ ํธ๋ํฝ์ ์ฐจ๋จํ๊ณ , ํน์ ์๋น์ค์๋ง ์ ๊ทผ์ ํ์ฉํ๋ ๋ณด์ ๋ชจ๋ธ(Whitelist ๋ฐฉ์)**์ ์ ์ฉํ ์ ์์ต๋๋ค.
โ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํธ๋ํฝ ์ฐจ๋จ
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: deny-all
namespace: default
spec:
action: DENY # ๋ชจ๋ ์์ฒญ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ๋จ
โก ํน์ ์๋น์ค(frontend)๋ง ํ์ฉ
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: allow-frontend
namespace: default
spec:
action: ALLOW # ํน์ ์๋น์ค์ ๋ํ ์์ฒญ๋ง ํ์ฉ
rules:
- from:
- source:
principals: ["cluster.local/ns/default/sa/frontend"] # frontend ์๋น์ค๋ง ํ์ฉ
๐ก ํ์ฉ ์ฌ๋ก:
- ๊ธฐ๋ณธ์ ์ผ๋ก ์๋น์ค ๊ฐ ํธ๋ํฝ์ ์ฐจ๋จํ๊ณ , ํ์ํ ์๋น์ค๋ง ์์ธ์ ์ผ๋ก ์ ๊ทผ ํ์ฉ
โ 2.3 JWT ๊ธฐ๋ฐ ์ธ์ฆ ์ ์ฉํ๊ธฐ
Istio์์๋ JWT(JSON Web Token)๋ฅผ ํ์ฉํ์ฌ API ์์ฒญ์ ์ธ์ฆํ ์ ์์ต๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: jwt-auth
namespace: default
spec:
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["https://issuer.example.com/*"] # JWT ๋ฐ๊ธ์ ๊ธฐ์ค์ผ๋ก ์ธ์ฆ
to:
- operation:
paths: ["/secure-api"] # "/secure-api" ๊ฒฝ๋ก๋ง ๋ณดํธ
์ค๋ช :
- source.requestPrincipals → JWT ํ ํฐ์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์ธ์ฆ
- operation.paths: ["/secure-api"] → ๋ณดํธํ API ๊ฒฝ๋ก ์ค์
๐ก ํ์ฉ ์ฌ๋ก:
- JWT ๊ธฐ๋ฐ OAuth 2.0 ์ธ์ฆ ์์คํ ๊ณผ ํตํฉํ์ฌ ๋ณด์ ๊ฐํ
๐น 3. AuthorizationPolicy ์ค์ ํ์ธ ๋ฐ ํ ์คํธ
โ 3.1 AuthorizationPolicy ์ ์ฉ ํ์ธ
ํ์ฌ ์ ์ฉ๋ AuthorizationPolicy๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get authorizationpolicy -n default
โ 3.2 ํน์ ์๋น์ค์ ์ ๊ทผ ๊ถํ ํ์ธ
istioctl x authz check pod/<pod-name> -n default
์ถ๋ ฅ ์์ :
ACTION: ALLOW
SOURCE: cluster.local/ns/default/sa/frontend
DESTINATION: cluster.local/ns/default/sa/backend
๐ก ALLOW๊ฐ ํ์๋๋ฉด ํด๋น ์๋น์ค์ ๋ํ ์ ๊ทผ์ด ํ์ฉ๋์์์ ์๋ฏธํฉ๋๋ค.
๐ ๊ฒฐ๋ก
- RBAC(Role-Based Access Control)๋ ์๋น์ค ๊ฐ ์ ๊ทผ์ ์ ์ดํ๋ ์ญํ ๊ธฐ๋ฐ ๋ณด์ ์ ์ฑ ์ ๋๋ค.
- AuthorizationPolicy๋ฅผ ํ์ฉํ๋ฉด ํน์ ์๋น์ค ๋๋ ์ฌ์ฉ์์ API ์ ๊ทผ์ ์ ํํ ์ ์์ต๋๋ค.
- Whitelist ๋ฐฉ์(๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํธ๋ํฝ ์ฐจ๋จ ํ ์์ธ์ ์ผ๋ก ํ์ฉ) ์ ์ฉ ๊ฐ๋ฅ
- JWT ๊ธฐ๋ฐ ์ธ์ฆ์ ํ์ฉํ์ฌ API ์์ฒญ์ ๋ณดํธํ ์ ์์
- ์๋น์ค ๊ฐ ๋ฌด๋จ ์ ๊ทผ์ ๋ฐฉ์งํ๊ณ , ๋ณด์์ฑ์ ๊ฐํํ๊ธฐ ์ํด Istio์ RBAC ๋ฐ AuthorizationPolicy๋ฅผ ์ ๊ทน ํ์ฉํด์ผ ํจ