์ฟ ๋ฒ๋คํฐ์ค ์์๋ ๋ค์ํ ์๋น์ค๋ค์ด ์กด์ฌํฉ๋๋ค. ์ด ์๋น์ค๋ค์ด ํ๋ํ๋ ์๊ฒจ๋๋ค ๋ณด๋ฉด ์ด๋ ์ ๋ช ๋ฐฑ๊ฐ, ๋ช ์ฒ๊ฐ์ ์๋น์ค๋ค์ด ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฐ ์๋น์ค๋ค์ ์ฝ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด์ ์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด์คํฐ์ค๋ ์๋น์ค ๋ฉ์ฌ ์๋น์ค ๋ผ๋ ํ์ดํ์ ๊ฑธ๋ง๊ฒ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ฃผ๋๋ฐ ์ด๋ฒ ๊ธ์์๋ ๊ทธ ์ค ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ธ mTLS (Mutual TLS) ์ ๋ํด ์์๋ณด๊ณ ์ ํฉ๋๋ค.
๋จผ์ mTLS ๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ธฐ ์ ์ ์ ํ์ํ์ง ๋ถํฐ ์์๋ณด์ฃ .
์ด์คํฐ์ค ์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ํธํ๋ฅผ ํ ํ ์ ์กํ๊ฒ ๋๋๋ฐ (HTTPS), ๋ฌธ์ ๋ ์ธ๊ทธ๋ ์ค ๊ฒ์ดํธ์จ์ด ๊น์ง๋ง ๋ฐ์ดํฐ๊ฐ ์ํธํ๊ฐ ๋๊ณ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ์์๋ HTTPS ๊ฐ ์๋ HTTP ๋ก ํต์ ๋๊ธฐ ๋๋ฌธ์ ํ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ฐจํผ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ๋ ํ๋ผ์ด๋นํ ์์ญ์ธ๋ฐ, ๊ตณ์ด ๋ด๋ถ์์์ ํต์ ๊น์ง HTTPS ๋ก ํ ํ์๊ฐ ์์๊น? ๋ผ๋ ์๋ฌธ์ ์ด ์์ต๋๋ค.
์ด ์ง๋ฌธ์์ ๋ํด์๋ ์ด์คํฐ์ค๋ ์ด๋ ๊ฒ ์ค๋ช ํฉ๋๋ค.
"๋ง์ฝ ์์ปค ๋ ธ๋๋ค์ด ์๋ก ๋ค๋ฅธ ๋ฆฌ์ ์ ์กด์ฌํ๊ฒ ๋๋ฉด ๋น์ฐํ ํต์ ์ ๋ฐ์ดํฐ ์ผํฐ ๊ฑด๋ฌผ ๋ฐ์ผ๋ก ๋๊ฐ๊ฒ ๋๊ณ , ์ ๋ง ๋์ ํด์ปค๊ฐ ์๋์ ์ผ๋ก ํ์ทจํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ถ๋ ์ ์๋ค"
ํ๋ฆฐ ๋ง์ ์๋๋ฐ ๊ทธ๋ ๋ค๊ณ ๋ ๋ง 100% ๋ง๋ ๋ง๋ ์๋ ๊ฑฐ ๊ฐ์ต๋๋ค. ๊ฑด๋ฌผ ๋ฐ์ผ๋ก ๋๊ฐ๋คํด๋ AWS ์ ๋ฌผ๋ฆฌ์ ์ธ ๋คํธ์ํฌ ์ ์ ํตํด ๋๊ฐํ ๋ฐ.. ์ด๊ฒ์ AWS ๊ฐ ๋ฐ๋ณด๋ ์๋๊ณ , ์ฝ๊ฒ ํ์ทจํด๊ฐ์ง ๋ชปํ๊ฒ ์ด๋ฏธ ์ค๊ณ ํด๋์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทผ๋ฐ ๋ญ ์ด๊ฑด ์ ์ถ์ธก์ด๊ณ , ์ํผ ํ์คํด์ ๋์ ๊ฑด ์์ฃ ?
๊ทธ๋ผ ์ด์ ์ ์ฟ ๋ฒ๋คํฐ์ค ๋ด๋ถ์์๋ HTTPS ํต์ ์ด ํ์ํ์ง ์์๋ณด์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ ํ๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค. ๋ง์ดํฌ๋ก ์๋น์ค๊ฐ 1000 ๊ฐ๋ผ๋ฉด 1000 ๊ฐ ๋ชจ๋ TLS ์ธ์ฆ์๋ฅผ ๋ง๋ค๊ณ , ๊ด๋ฆฌํด์ผํฉ๋๋ค. ์ ๋ง ๊ท์ฐฎ๊ณ , ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ง๋ง์น ์์ ๊ฒ๋๋ค.
๊ทธ๋์ ์ด๋ฌํ ๋ถ๋ถ์ ์ด์คํฐ์ค์ mTLS ๊ฐ ํด๊ฒฐํด ์ค๋๋ค.
์ด์คํฐ์ค ๊ณต์ ๋ฌธ์์์ mTLS ๊ณผ์ ์ ์ด๋ ๊ฒ ์ค๋ช ํด์ค๋๋ค.
- Istio๋ ํด๋ผ์ด์ธํธ์ ์์๋ฐ์ด๋ ํธ๋ํฝ์ ํด๋ผ์ด์ธํธ์ ๋ก์ปฌ ์ฌ์ด๋์นด Envoy๋ก ๋ค์ ๋ผ์ฐํ ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธก Envoy๋ ์๋ฒ ์ธก Envoy์ ์ํธ TLS ํธ๋์ ฐ์ดํฌ๋ฅผ ์์ํฉ๋๋ค. ํธ๋์ ฐ์ดํฌ ์ค์ ํด๋ผ์ด์ธํธ ์ธก Envoy๋ ์๋ฒ ์ธ์ฆ์์ ์ ๊ณต๋ ์๋น์ค ๊ณ์ ์ด ๋์ ์๋น์ค๋ฅผ ์คํํ ๊ถํ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ณด์ ์ด๋ฆ ์ง์ ๊ฒ์ฌ๋ ์ํํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ธก Envoy์ ์๋ฒ ์ธก Envoy๋ ์ํธ TLS ์ฐ๊ฒฐ์ ์ค์ ํ๊ณ Istio๋ ํด๋ผ์ด์ธํธ ์ธก Envoy์์ ์๋ฒ ์ธก Envoy๋ก ํธ๋ํฝ์ ์ ๋ฌํฉ๋๋ค.
- ์๋ฒ ์ธก Envoy๊ฐ ์์ฒญ์ ์น์ธํฉ๋๋ค. ๊ถํ์ด ์๋ ๊ฒฝ์ฐ ๋ก์ปฌ TCP ์ฐ๊ฒฐ์ ํตํด ํธ๋ํฝ์ ๋ฐฑ์๋ ์๋น์ค๋ก ์ ๋ฌํฉ๋๋ค.
์ฆ, Istio Proxy ๊ฐ ์ด๋ฅผ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ค ๋ ์ํธํ๋ฅผ ํด์ฃผ๊ณ , ๋ฐ์ ๋ ๋ค์ ๋ณตํธํ๋ฅผ ํด์ค๋ค๋ ๊ฒ๋๋ค. ์ฐ๋ฆฌ๋ ๊ตณ์ด TLS ์ธ์ฆ์์ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด์ฃ .
์ฐธ๊ณ ๋ก TLS ๋ฒ์ ์ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค๊ณ ํฉ๋๋ค.
- ECDHE-ECDSA-AES256-GCM-SHA384
- ECDHE-RSA-AES256-GCM-SHA384
- ECDHE-ECDSA-AES128-GCM-SHA256
- ECDHE-RSA-AES128-GCM-SHA256
- AES256-GCM-SHA384
- AES128-GCM-SHA256
๊ทธ๋ผ ์ค์ ๋ก ์ด๋ป๊ฒ ๋์ํ๋ ์ง ์์๋ณด์ฃ !
๋ ์ธ ๋๋์ฝ๋~!
mTLS ๋ฅผ ์ํ ํน๋ณํ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๊ทธ์ ๋ค์์คํ์ด์ค์ ์๋์ ๊ฐ์ด ์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ช ์๋ง ํ๋ฉด ๋ฐ๋ก ์ ์ฉ๋ฉ๋๋ค.
kubectl label namespace default istio-injection=enabled
์๋ ๊ทธ๋ฆผ์ Kiali ๋ฅผ ํตํด์ nginx ๋ค์ ๋์ํํ ๊ฒ์ ๋๋ค. ๋ณด๋ฉด nginx-01 -> nginx-02 ์๋ ์๋ฌผ์ ๊ฐ ์ฑ์์ ธ์์ง๋ง, nginx-01 -> nginx-03 ์ ์๋ฌผ์ ๊ฐ ์ฑ์์ง์ง ์์์ต๋๋ค. ์ด ์๋ฌผ์ ์์ด์ฝ์ด ๋ฐ๋ก mTLS ์ ์ ์ฉ ์ฌ๋ถ์ ๋๋ค.
๊ทธ๋์ default ๋ค์์คํ์ด์ค์ ์๋ ์๋น์ค๋ค์ ์๋ฌผ์ ๊ฐ ์ฑ์์ ธ ์๊ณ , not-istio ๋ค์์คํ์ด์ค๋ ์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ ์๋ฌผ์ ๊ฐ ์ฑ์์ง์ง ์์์ต๋๋ค.
๊ทธ๋ผ ์ด๋ฒ์๋ ์ด์คํฐ์ค mTLS ์ 3๊ฐ์ง ๋ชจ๋๋ฅผ ์์๋ณด์ฃ .
- PERMISSIVE : ์ํฌ๋ก๋๊ฐ ์ํธ TLS ๋ฐ ์ผ๋ฐ ํ ์คํธ ํธ๋ํฝ์ ๋ชจ๋ ํ์ฉํฉ๋๋ค. ์ด ๋ชจ๋๋ ์ฌ์ด๋์นด๊ฐ ์๋ ์ํฌ๋ก๋๊ฐ ์ํธ TLS๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ค์ ๊ฐ์ฅ ์ ์ฉํฉ๋๋ค. ์ฌ์ด๋์นด ์ฝ์ ์ผ๋ก ์ํฌ๋ก๋๊ฐ ๋ง์ด๊ทธ๋ ์ด์ ๋๋ฉด ๋ชจ๋๋ฅผ STRICT๋ก ์ ํํด์ผ ํฉ๋๋ค.
- STRICT : ์ํฌ๋ก๋๋ ์ํธ TLS ํธ๋ํฝ๋ง ํ์ฉํฉ๋๋ค.
- DISABLE : ์ํธ TLS๊ฐ ๋นํ์ฑํ๋ฉ๋๋ค. ๋ณด์ ๊ด์ ์์ ์์ฒด ๋ณด์ ์๋ฃจ์ ์ ์ ๊ณตํ์ง ์๋ ํ ์ด ๋ชจ๋๋ฅผ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค.
๊ธฐ๋ณธ ๊ฐ์ PERMISSIVE ์ด๊ธฐ ๋๋ฌธ์ ๊ตณ์ด mTLS ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๊ณ ํด๋ mTLS ๋ฅผ ์ฌ์ฉํ๋ ๋ง์ดํฌ๋ก ์๋น์ค์ ํต์ ์ด ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค.
์ค์ ๊ทธ๋ ๊ฒ ๋์ํ๋ ์ง ํ์ธํด๋ณด์ฃ .
์๋์ ๊ฐ์ด default ๋ค์์คํ์ด์ค์์ PERMISSIVE ๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ฉด,
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: "default-strict"
namespace: "default"
spec:
mtls:
mode: PERMISSIVE
์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ not-istio ๋ค์์คํ์ด์ค์ nginx-03 ์์ ์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ nginx-01 ๋ก๋ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋๋ฅผ ํ๋ฒ STRICT ๋ฐ๊ฟ๋ณด๊ฒ ์ต๋๋ค.
apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
name: "default-strict"
namespace: "default"
spec:
mtls:
mode: STRICT
์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ nginx-03 ์์ ์ด์คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ nginx-01 ์๋ ํต์ ์ด ๋ถ๊ฐ๋ฅํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ๋ณด์์ด ์ค์์ ๋๋ ์์ญ์์๋ mTLS ๋ฅผ ๊ฐ์ ํ ํ ์ ์์ฃ .
์ค๋์ ์ด์คํฐ์ค์ mTLS ๊ธฐ๋ฅ์ ๋ํด ์์๋ณด์์ต๋๋ค. mTLS ๋ฅผ ์ด์ฉํ๋ฉด ๋ด๋ถ์์์ ๋ชจ๋ ํต์ ์ ์ฝ๊ฒ HTTPS ๋ก ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ฃ .
๊ทธ๋ฐ๋ฐ ์ค์ ๋ก curl ๋ช ๋ น์ด๋ฅผ ๋ณด๋ฉด https ๋ก ๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ http ๋ก ๋ณด๋ด๋ ๊ฒ์ ํ์ธ ํ ์ ์๋๋ฐ ์ด๋ ์ด์ฐจํผ ํ๋๋ฅผ ๋น ์ ธ๋๊ฐ๋ ์ด์คํฐ์ค ํ๋ก์๊ฐ ์์์ ์๋์ผ๋ก ์ํธํ๋ฅผ ํด์ค์ ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ผ ์ ๋ ์ฌ๊ธฐ์ ์๋ฌธ์ด ํ๋๋ญ๋๋ค. ๊ทธ๋ผ ๋ด๋ถ๋ผ๋ฆฌ ํต์ ํ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ https ๋ก ํต์ ๋๊ฒ ํ ํ์๊ฐ ์๋ ๊ฑด๊ฐ? ์ฝ๋๋ฅผ ์์ฑํ ๋ https://xxx ๊ฐ ์๋ http://xxx ๋ก ํด๋ ๋ฌด๋ฐฉํ ๊ฒ์ธ๊ฐ?
์ด์คํฐ์ค mTLS ๊ธฐ๋ฅ์ ์ดํด๋ณด๋ฉด ๊ทธ๋๋ ๋๋ณด์ด์ง๋ง... ์ ๋ ์ด ๋ถ๋ถ์ ๋ํด์ ํ๋ต์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๋ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ฌํนํ ์๋ ์์ ๋ ธ๋ฆ์ด๊ตฌ์.
๊ทธ๋์ ํน์๋ ๋ต์ ์์๋ ๋ถ์ด ๊ณ์๋ค๋ฉด, ๋๊ธ์ ๋จ๊ฒจ์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :)
mTLS ๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ์ํธํ๊ฐ ๋์๋์ง ํ์ธํด๋ณด๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ ํด๋ฆญ!
๊ทธ๋ผ ์ค๋์ ์ฌ๊ธฐ๊น์ง!
'DevOps > Istio' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Istio] ์ฟ! ์ฐ๋ฆฌ๋ง์ ๋น๋ฐ์ด์ผ - mTLS (๊ฒ์ฆํธ) (9) | 2023.08.17 |
---|---|
[Istio] IngressGateway ์ TLS ๋ฅผ ์ ์ฉํด๋ณด์! (1) | 2023.05.18 |
[Istio] Istio Ingress ์ ALB ๋ฅผ ๋ถ์ฌ๋ณด์ ! (0) | 2023.02.12 |