๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์ mTLS(Mutual TLS)๋ฅผ ํ์ฉํ์ฌ ์๋น์ค ๊ฐ ์ํธํ ํต์ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
mTLS๋ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ์ ์ํธํํ๊ณ , ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ์ ์ ๊ณตํ๋ ๋ณด์ ํ๋กํ ์ฝ์
๋๋ค.
Istio๋ ๊ธฐ๋ณธ์ ์ผ๋ก mTLS๋ฅผ ์ง์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ณดํธ ๋ฐ ์๋น์ค ์ธ์ฆ์ ๊ฐํํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ mTLS ๊ฐ๋ , Istio์์ mTLS ์ ์ฉ ๋ฐฉ๋ฒ, ์ค์ ์์ ๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐น 1. mTLS(Mutual TLS)๋?
โ 1.1 mTLS ๊ฐ๋
**mTLS(Mutual TLS, ์ํธ TLS)**๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก๋ฅผ ์ธ์ฆํ๋ TLS ํ๋กํ ์ฝ์
๋๋ค.
๊ธฐ๋ณธ์ ์ธ TLS(HTTPS)๋ ์๋ฒ๋ง ์ธ์ฆํ์ง๋ง, mTLS๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ก๋ฅผ ์ธ์ฆํ์ฌ ๋ณด์์ฑ์ ๋์
๋๋ค.
mTLS์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ๊ฐ ํธ๋ํฝ ์ํธํ → ๋ฐ์ดํฐ๊ฐ ๋คํธ์ํฌ์์ ์ ์ถ๋๋ ๊ฒ์ ๋ฐฉ์ง
- ์๋ก ์ธ์ฆํ์ฌ ์ ๋ขฐ์ฑ ํ๋ณด → ์๋น์ค ๊ฐ ํต์ ์ด ์์ ํ์ง ๊ฒ์ฆ ๊ฐ๋ฅ
- Zero Trust ๋ณด์ ๋ชจ๋ธ ์ง์ → ๋ด๋ถ ๋คํธ์ํฌ์์๋ ํธ๋ํฝ์ ๋ณดํธ
โ 1.2 Istio์์ mTLS๊ฐ ํ์ํ ์ด์
- ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ด ์ํธํ๋์ง ์์ผ๋ฉด ๋ณด์ ์ํ์ ๋ ธ์ถ๋จ
- mTLS๋ฅผ ์ฌ์ฉํ๋ฉด ์๋น์ค ๊ฐ ์ธ์ฆ ๋ฐ ํธ๋ํฝ ๋ณดํธ๊ฐ ์๋์ผ๋ก ์ด๋ฃจ์ด์ง
- Zero Trust ๋ณด์ ๋ชจ๋ธ์ ์ ์ฉํ ๋ ํ์์ ์ธ ์์
๐น 2. Istio์์ mTLS ํ์ฑํ ๋ฐฉ๋ฒ
โ 2.1 Istio์์ mTLS ๊ธฐ๋ณธ ์ ์ฑ ํ์ธ
Istio๊ฐ ์ค์น๋ ํด๋ฌ์คํฐ์์ ํ์ฌ mTLS ์ค์ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get peerauthentication -n istio-system
๊ธฐ๋ณธ์ ์ผ๋ก STRICT, PERMISSIVE, DISABLE ์ธ ๊ฐ์ง ๋ชจ๋๊ฐ ์์ต๋๋ค.
๋ชจ๋ ์ค๋ช
STRICT | ๋ชจ๋ ์๋น์ค ๊ฐ ํต์ ์ mTLS๋ก ์ํธํ |
PERMISSIVE | mTLS๋ฅผ ์ง์ํ์ง๋ง, ๋น์ํธํ ํธ๋ํฝ๋ ํ์ฉ |
DISABLE | mTLS๋ฅผ ์ฌ์ฉํ์ง ์์ |
๐ก PERMISSIVE ๋ชจ๋์์ STRICT๋ก ๋ณ๊ฒฝํ๋ฉด ๋ชจ๋ ํธ๋ํฝ์ด ์ํธํ๋ฉ๋๋ค.
โ 2.2 ํด๋ฌ์คํฐ ์ ์ฒด์ mTLS ์ ์ฉํ๊ธฐ
Istio์์ ๋ชจ๋ ์๋น์ค ๊ฐ mTLS๋ฅผ ๊ฐ์ ํ๋ ค๋ฉด PeerAuthentication ๋ฆฌ์์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: default
namespace: istio-system
spec:
mtls:
mode: STRICT # ๋ชจ๋ ์๋น์ค ๊ฐ mTLS ๊ฐ์ ์ ์ฉ
์ค๋ช :
- mtls.mode: STRICT → ๋ชจ๋ ์๋น์ค ๊ฐ ํต์ ์ ์ํธํ
- namespace: istio-system → Istio๊ฐ ๊ด๋ฆฌํ๋ ๋ค์์คํ์ด์ค์์ ์ ์ฉ
๐ก ์ ์ฉ ํ ๋ชจ๋ ์๋น์ค ๊ฐ ํธ๋ํฝ์ด ์ํธํ๋๋ฏ๋ก, ํด๋ผ์ด์ธํธ๊ฐ mTLS๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค.
โ 2.3 ํน์ ๋ค์์คํ์ด์ค์ mTLS ์ ์ฉํ๊ธฐ
๋ชจ๋ ์๋น์ค๊ฐ ์๋ ํน์ ๋ค์์คํ์ด์ค์์๋ง mTLS๋ฅผ ์ ์ฉํ๋ ค๋ฉด, ๋ค์์คํ์ด์ค ๋จ์๋ก PeerAuthentication์ ์ค์ ํ ์ ์์ต๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: ns-mtls
namespace: my-namespace # ํน์ ๋ค์์คํ์ด์ค์์๋ง ์ ์ฉ
spec:
mtls:
mode: STRICT
๐ก namespace: my-namespace๋ฅผ ๋ณ๊ฒฝํ๋ฉด ํน์ ๋ค์์คํ์ด์ค์์๋ง mTLS๊ฐ ์ ์ฉ๋ฉ๋๋ค.
๐น 3. ์๋น์ค ๊ฐ mTLS ์ ์ฉ ์์
โ 3.1 DestinationRule์ ํ์ฉํ mTLS ์ค์
mTLS๋ฅผ ๊ฐ์ ํ๋ฉด, ๊ธฐ์กด ์๋น์ค๊ฐ ์ ์์ ์ผ๋ก ํต์ ํ ์ ์๋๋ก DestinationRule์์ mTLS๋ฅผ ํ์ฑํํด์ผ ํฉ๋๋ค.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-service-mtls
spec:
host: my-service
trafficPolicy:
tls:
mode: ISTIO_MUTUAL # Istio์ ๊ธฐ๋ณธ mTLS ์ค์ ์ ์ฉ
์ค๋ช :
- tls.mode: ISTIO_MUTUAL → Istio์ mTLS ์ธ์ฆ์ ์ฌ์ฉํ์ฌ ํธ๋ํฝ ์ํธํ
๐ก mTLS๊ฐ ํ์ฑํ๋ ๊ฒฝ์ฐ, DestinationRule์์ ISTIO_MUTUAL์ ์ค์ ํด์ผ ์ ์์ ์ผ๋ก ํต์ ํ ์ ์์ต๋๋ค.
โ 3.2 ํน์ ์๋น์ค ๊ฐ mTLS ๋นํ์ฑํ (์์ธ ์ ์ฉ)
๋ชจ๋ ์๋น์ค๊ฐ mTLS๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ์ง๋ง,
ํน์ ์๋น์ค๋ง ๋น์ํธํ ํธ๋ํฝ์ ํ์ฉํ๋ ค๋ฉด PeerAuthentication์์ ์์ธ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: disable-mtls
namespace: my-namespace
spec:
selector:
matchLabels:
app: my-legacy-service # ํน์ ์๋น์ค์๋ง ์ ์ฉ
mtls:
mode: DISABLE # ํด๋น ์๋น์ค์ ๋ํด mTLS ๋นํ์ฑํ
์ค๋ช :
- selector.matchLabels.app: my-legacy-service → ์ด๋ฆ์ด my-legacy-service์ธ ์๋น์ค์๋ง ์ ์ฉ
- mtls.mode: DISABLE → mTLS ์ํธํ ํด์ (์์ธ ์ฒ๋ฆฌ)
๐ก ๊ธฐ์กด์ TLS๋ฅผ ์ง์ํ์ง ์๋ ์๋น์ค(์: ๋ ๊ฑฐ์ ์์คํ )์๋ mTLS๋ฅผ ๋นํ์ฑํํด์ผ ํ ์๋ ์์ต๋๋ค.
๐น 4. mTLS ์ ์ฉ ํ ํ์ธ ๋ฐฉ๋ฒ
โ 4.1 ์๋น์ค ๊ฐ ํธ๋ํฝ์ด ์ํธํ๋์๋์ง ํ์ธํ๊ธฐ
mTLS๊ฐ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
istioctl authn tls-check <์๋น์ค-์ด๋ฆ>.<๋ค์์คํ์ด์ค>.svc.cluster.local
์ถ๋ ฅ ์์ :
HOST STATUS SERVER CLIENT AUTHN POLICY DESTINATION RULE
my-service.default.svc.cluster.local OK mTLS mTLS default/strict default/istio-mutual
๐ก STATUS: OK๊ฐ ํ์๋๋ฉด, ์๋น์ค ๊ฐ ํธ๋ํฝ์ด ์ํธํ๋๊ณ ์์์ ์๋ฏธํฉ๋๋ค.
๐ ๊ฒฐ๋ก
- mTLS(Mutual TLS)๋ ์๋น์ค ๊ฐ ํต์ ์ ์ํธํํ๊ณ ์ ๋ขฐ์ฑ์ ๋ณด์ฅํ๋ ๋ณด์ ํ๋กํ ์ฝ์ ๋๋ค.
- Istio์ PeerAuthentication์ ํ์ฉํ์ฌ ํด๋ฌ์คํฐ ์ ์ฒด ๋๋ ํน์ ๋ค์์คํ์ด์ค์์ mTLS๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
- mTLS๋ฅผ ํ์ฑํํ๋ฉด, DestinationRule์์ ISTIO_MUTUAL์ ์ค์ ํด์ผ ์ ์์ ์ธ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ ๊ฑฐ์ ์๋น์ค ๋ฑ ์ผ๋ถ ์๋น์ค์ ๋ํด mTLS๋ฅผ ๋นํ์ฑํํ ์๋ ์์ต๋๋ค.
- mTLS๊ฐ ์ ์์ ์ผ๋ก ์ ์ฉ๋์๋์ง istioctl authn tls-check ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.