๋ง๋ถ๋ฆฌ ํ๊ฒฝ์์ Teleport์ Kubernetes RBAC์ ๊ฒฐํฉํ ๋ณด์ ์ ์ ๊ด๋ฆฌ ์ฒด๊ณ๋ฅผ ๊ตฌํํ์์ต๋๋ค.
Teleport ์คํ์์ค๋ฅผ ํ์ฉํ์ฌ ์ธ๋ถ ์ฌ์ฉ์๋ ๋ฐ๋์ Root Cluster Proxy๋ฅผ ํตํด์๋ง ๋ด๋ถ Kubernetes ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ด ๊ณผ์ ์์ RBAC๋ฅผ Teleport Role๊ณผ Kubernetes RoleBinding ๊ฐ ์ด์ค์ผ๋ก ์ฐ๋ํ์ฌ ์ต์ ๊ถํ ์์น์ ๋ณด์ฅํ์์ต๋๋ค.
๋ํ, Teleport Audit ๋ก๊ทธ๋ฅผ Logstash์ OpenSearch๋ก ์ฐ๊ณํด ๋ชจ๋ ์ ์ยท๋ช
๋ นยท์ธ์
์ด๋ ฅ์ ์ค์์์ ๋ถ์ยท์๊ฐํํจ์ผ๋ก์จ ๋น์ธ๊ฐ ์ ๊ทผ ํ์ง ๋ฐ ๋ณด์ ๊ฐ์์ฑ ํ๋ณด๋ฅผ ์คํํ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๋จ์ํ ๋คํธ์ํฌ ๋ถ๋ฆฌ๊ฐ ์๋, ์ ๊ทผ ํต์ ยทํ์ ๊ฐ์ฌยท์ค์๊ฐ ๋ชจ๋ํฐ๋ง์ด ๊ฒฐํฉ๋ ๋ง๋ถ๋ฆฌ ๋ณด์ ์ ์ ๊ด๋ฆฌ ๋ชจ๋ธ์ ์ ์ํ์์ต๋๋ค.
https://www.youtube.com/watch?v=7vggGxFatCA
์์คํ
์ ๊ตฌ์กฐ๋ Root Cluster(์ธ๋ถ๋ง, Bastion) ์ Leaf Cluster(๋ด๋ถ๋ง, Kubernetes)๋ฅผ ์ฐ๊ฒฐํ ์ด์ค ๊ตฌ์กฐ์
๋๋ค.
๋ชจ๋ ๊ด๋ฆฌ์๋ Root์ Teleport Proxy๋ฅผ ํตํด์๋ง ๋ด๋ถ Leaf์ ์ ๊ทผํ๋ฉฐ, RootโLeaf ๊ฐ ํต์ ์ mTLS ๊ธฐ๋ฐ ๋ฆฌ๋ฒ์ค ํฐ๋๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ ์ยท๋ช
๋ นยท์ธ์
๋ฑ ๋ชจ๋ ํ๋์ Root์์ ๊ฐ์ฌ ๋ก๊ทธ๋ก ์์ง๋์ด Logstash โ OpenSearch๋ก ์ด์ด์ง๋๋ค.
- ์ฌ์ฉ์๊ฐ Root์ Teleport Proxy๋ก ์ ์ํฉ๋๋ค.
- Teleport Proxy๊ฐ Teleport Auth์ ์ฐ๋ํด ์ฌ์ฉ์ยท์ญํ ์ ํ์ธํฉ๋๋ค.
- K8s ๊ด๋ จ ์์ฒญ์ Proxy์ 3026(K8s ํ๋ก์)์ ๊ฑฐ์ณ, ProxyโKube Agent ๊ฐ mTLS ํฐ๋๋ก Leaf์ ์ ๋ฌ๋ฉ๋๋ค.
- Leaf์ Kube Agent๊ฐ K8s API์ ์์ฒญ์ ๋ํํ๊ณ , ์๋ต์ ๋์ผ ํฐ๋๋ก ๋๋๋ ค์ค๋๋ค.
- ์ด ๊ณผ์ ์ ๋ชจ๋ ํ๋ ๋ก๊ทธ๊ฐ Root์์ ์ค์ ์์ง๋์ด logstash๋ฅผ ๊ฑฐ์ณ opensearch๋ก ๋ณด๋ด์ด์ง๋๋ค.
- ์ต๊ทผ ๋ณด์ ์ฌ๊ณ (ex. SKT)์์ ๋๋ฌ๋ ๊ธฐ์กด ๋ง๋ถ๋ฆฌ ์ฒด๊ณ์ ๊ตฌ์กฐ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํจ
- ๊ธ์ต์์ํยท๊ธ์ต๋ณด์์ ๋ฑ ๊ณต๊ณต๊ธฐ๊ด์ด ๊ฐ์กฐํ โํ์ ๊ธฐ๋กยท์ถ์ , ์ต์ ๊ถํ, ์ค์ ๊ฐ์ฌ ์ฒด๊ณโ ๊ฐ์ด๋๋ผ์ธ์ ์ถฉ์กฑํ๋ ์์คํ ์ค๊ณ ํ์
- ๋ด๋ถ์ ์ํ ๋ฐ ๊ถํ ๋จ์ฉ ์ฐจ๋จ ์คํจ
- ๊ด๋ฆฌ๋งโ์ ๋ฌด๋ง ๊ฐ ์ ๊ทผ ๊ฒฝ๋ก ๋ถํฌ๋ช
- ๊ฐ์ฌ ๋ก๊ทธ ๋ถ์ฌ๋ก ์ธํ ํต์ ยท์ถ์ ํ๊ณ
- ์ค์ ์ง์คํ ๋ณด์ ์ ์ ๊ด๋ฆฌ ์ฒด๊ณ ๊ตฌํ
- RBAC ์ด์ค ํต์ (Teleport โ Kubernetes) ์ ์ฉ
- ์ค์๊ฐ ๊ฐ์ฌ ๋ฐ ์๊ฐํ(Logstash + OpenSearch)
- ๋ง๋ถ๋ฆฌ ํ๊ฒฝ์ ์ด์ ํจ์จ์ฑ๊ณผ ๋ณด์์ฑ ๋์ ํ๋ณด
- Teleport Root Cluster ์ค์น ๋ฐ Proxy/Auth ์๋น์ค ์คํ
- ์ธ๋ถ์์ ์ ์ผํ๊ฒ ๋
ธ์ถ๋๋ ์ง์
์ ์ผ๋ก
:443,:3024,:3025ํฌํธ ๊ฐ๋ฐฉ - ๋ณด์ ๊ทธ๋ฃน์์ HTTPS(443)๊ณผ Teleport ํฐ๋๋ง(3024, 3025, 3026) ํฌํธ๋ง ํ์ฉ
- ๋ฐฉํ๋ฒฝ์ผ๋ก ๋ถํ์ํ ์ธ๋ฐ์ด๋ ์ฐจ๋จ โ Bastion ์ญํ ์ํ
- Public IP ๋ฏธํ ๋น โ ์ธ๋ถ์์ ์ง์ ์ ๊ทผ ๋ถ๊ฐ
k3s v1.32.6๊ธฐ๋ฐ Kubernetes Cluster ์คํ- Teleport Kube Agent๋ฅผ Pod ํํ๋ก ๋ฐฐํฌ โ Root์ mTLS ๊ธฐ๋ฐ Reverse Tunnel๋ก ์ฐ๊ฒฐ
- ๋คํธ์ํฌ ๋ ๋ฒจ์์ Root Cluster Proxy์์ ์ธ์ ๋ง ํ์ฉ
- ๋ฐฉํ๋ฒฝ ์ ์ฑ
:
- K3s API Server(6443) โ ์ธ๋ถ ๋น๊ณต๊ฐ
- ๋ด๋ถ Pod/Service ํต์ ๋ง ํ์ฉ
- PoC ํ๊ฒฝ: ๋จ์ผ ๋ ธ๋๋ก ๋จ์ํํ์ฌ ์ด์ (ํ์ ์ ๋ค์ค ๋ ธ๋ ํ์ฅ ๊ฐ๋ฅ)
| ๊ตฌ๋ถ | ๊ตฌ์ฑ/๋ฒ์ | ์ญํ /๊ธฐ๋ฅ |
|---|---|---|
| Teleport | v17.5.6 (Open Source Edition) | Root Cluster โ ์ธ์ฆ/์ธ๊ฐ, ์ธ์
๋ก๊น
Leaf Cluster โ Kube Agent ๋ฐฐํฌ, ๋ด๋ถ k8s API ์ ๊ทผ ํ๋ก์ |
| Helm | v3.18.3 / teleport-kube-agent chart v17.5.6 | Teleport ๊ณต์ Helm Chart ์ ์ฅ์ ์ฌ์ฉ |
| CLI ๋๊ตฌ | tsh, tctl, kubectl | ํด๋ฌ์คํฐ ์ธ์ฆ, ๊ด๋ฆฌ, K8s ๋ฆฌ์์ค ์ ์ด |
| ๋ก๊น /๋ชจ๋ํฐ๋ง | OpenSearch, OpenSearch Dashboards | Teleport Audit Logs โ Logstash ์์ง โ OpenSearch ์ ์ฅ โ Dashboards ์๊ฐํ ์ ์ ์ด๋ ฅ, K8s ๋ฆฌ์์ค ์ ๊ทผ ๋ก๊ทธ, ์ฌ์ฉ์ ์ธ์ ๋ก๊ทธ ํตํฉ ๊ด๋ฆฌ |
- ์ธ๋ถ ์ฌ์ฉ์๋ ๋ฐ๋์ Root Cluster Proxy๋ฅผ ํตํด์๋ง Leaf Cluster ์ ๊ทผ ๊ฐ๋ฅ
- Teleport Proxy โ Kube Agent ๊ฐ mTLS ํฐ๋๋ง์ผ๋ก ์์ ํ K8s API ์ ๊ทผ ๋ณด์ฅ
- ๊ทธ๋ฆผ:
- Teleport Role โ Kubernetes RBAC ๋ฐ์ธ๋ฉ
- ๋ค์์คํ์ด์ค ๊ตฌ๋ถ:
app,db,mgmt,dmz - ์์:
- App ๊ฐ๋ฐ์๋
appNS๋ง ์ ๊ทผ ๊ฐ๋ฅ - DBA์
dbNS ํ์ - Auditor๋ ์กฐํ๋ง ๊ฐ๋ฅ (๋ณ๊ฒฝ ๋ถ๊ฐ)
- App ๊ฐ๋ฐ์๋
- ์ต์ ๊ถํ ์์น(Principle of Least Privilege) ์คํ
- ๊ทธ๋ฆผ:
- Teleport ์์ฒด ๋ก๊ทธ๋ก ๋ชจ๋ ํ์ ๊ธฐ๋ก
- ๋ก๊ทธ ์ฒ๋ฆฌ ๊ณผ์ :
- ๋ก์ปฌ ๋ก๊ทธ ํ์ผ ์ ์ฅ
- Logstash โ OpenSearch ์ ์ฌ
- ๊ทธ๋ฆผ:
- OpenSearch Dashboards๋ก ์ค์๊ฐ ๋ก๊ทธ ์๊ฐํ
- Error ์ด๋ฒคํธ ๋ฐ์ ์ ์๋ฆผ ๊ธฐ๋ฅ์ผ๋ก ๊ด๋ฆฌ์ ๋์ ์ง์
- ๊ทธ๋ฆผ:
- ๋ค์์คํ์ด์ค(
App/DB/Mgmt/DMZ) ๋ณ ๋ ผ๋ฆฌ์ ๊ฒฉ๋ฆฌ ํ๊ฒฝ ๊ตฌ์ฑ - Teleport RBAC + Kubernetes RBAC ์ด์ค ์ ์ด๋ก Zone ๊ฐ ๋ฌด๋จ ์ ๊ทผ ์ฐจ๋จ
| Root Cluster ReadMe | Root Cluster |
|---|---|
| Leaf Cluster ReadMe | Leaf Cluster |
| Log & Audit ReadMe | Log-audit |
-
Teleport ๊ฐ์ฌ ๋ก๊ทธ โ OpenSearch ์ฐ๊ณ
์ฝ 1,200๊ฑด์ ๋น์ธ๊ฐ ์ ๊ทผ ์๋๋ฆฌ์ค ๋ก๊ทธ ์ด๋ฒคํธ๋ฅผ ํ ์คํธํ ๊ฒฐ๊ณผ, 100% ํ์ง ๋ฐ ๊ฐ์ฌ ๊ธฐ๋ก ํ์ธ -
OpenSearch Dashboards ์๊ฐํ
์ฌ์ฉ์๋ณ / ๋ฆฌ์์ค๋ณ ์ ๊ทผ ์๋ ํํฉ์ ์ค์๊ฐ์ผ๋ก ํ์ธ ๊ฐ๋ฅ โ ์ด์ ํ์ ์ค์๊ฐ ํ์ง -
Teleport Proxy ๋จ์ผ ๋ ธ์ถ ๊ตฌ์กฐ ์ ์ฉ
์ธ๋ถ์์ ์ง์ API Server ์ ๊ทผ ์ฐจ๋จ
โ ๋ถํ์ํ ํฌํธ ๋ ธ์ถ 0๊ฑด -
๊ฐ์ฌ ๋ก๊ทธ ์ด์ค ์ ์ฅ
๋ก์ปฌ ํ์ผ + OpenSearch์ ์ ์ฅ โ ๋ก๊ทธ ์ ์ค 0๊ฑด ๋ฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ -
์ฃผ์ ๋ณด์ ์๋๋ฆฌ์ค ํ์ง ๊ฒ์ฆ
๋ด๋ถ์ ์ํ, ๋ฌด์ฐจ๋ณ ๋ก๊ทธ์ธ ์๋, ๊ถํ ์ค๋จ์ฉ ๋ฑ ํ์ง ์ปค๋ฒ๋ฆฌ์ง 100% ํ์ธ
- RBAC ๊ธฐ๋ฐ ์ต์ ๊ถํ ์ ๊ทผ ์ ์ด๋ก ๊ด๋ฆฌ ํธ์์ฑ ํฅ์
- Teleport Web UI๋ฅผ ํตํ ๋จ์ผ ์ ์ / ์ธ์ ๊ด๋ฆฌ
- RootโLeaf ๊ตฌ์กฐ๋ก ์ ์ ๊ฒฝ๋ก ๋จ์ํ
- Pod/๋ค์์คํ์ด์ค ๋จ์๊น์ง ๋ด๋ ค๊ฐ๋ ์ธ๋ฐํ ๊ถํ ํต์
- ์ธ์ ๋ก๊น & ๋ช ๋ น ๊ฐ์ฌ(Audit)๋ก ์ฌ์ฉ์ ํ์ ์ถ์ ๊ฐ๋ฅ
- ๋ด๋ถ์ ์ํ ๋ฐ ๊ถํ ๋จ์ฉ์ ์ค์๊ฐ ํ์ง
- ๋ค์์ Leaf Cluster๋ฅผ Root์ ์ฐ๋ํ์ฌ ๋ฉํฐ ํด๋ฌ์คํฐ ์ง์
- ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋โ์จํ๋ ๋ฏธ์ค ํผํฉ ํ๊ฒฝ ๋ฑ ํ์ด๋ธ๋ฆฌ๋ ์ธํ๋ผ ๋์
- Helm/IaC ๊ธฐ๋ฐ์ผ๋ก ํ๊ฒฝ ํ์ฅ ๋ฐ ์๋ํ ์ฉ์ด
- Teleport์ Kubernetes RBAC ๊ฐ ๊ถํ ๋งคํ ๋ฐ ์ด์ค ํต์ ์ฒด๊ณ ์ค๊ณ
โ ์ค๋ณตยท์ถฉ๋ ์๋ ๊ถํ ๊ด๋ฆฌ ์ฒด๊ณ ํ๋ฆฝ - ์ฌ์ฉ์ยท์ญํ ๊ธฐ๋ฐ ์ ๊ทผ์ ์ด๋ฅผ ํ์ค ํ
ํ๋ฆฟํ
โ ๊ธฐ๊ดยท์กฐ์ง ๊ฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ RBAC ์ด์ ์ง์นจ ๋ง๋ จ
- Teleport ๋ฐ Kubernetes ์ด๋ฒคํธ ๋ก๊ทธ๋ฅผ OpenSearch๋ก ํตํฉ ์์งยท์ ์ฅ
โ ์ฅ๊ธฐ ๋ณด๊ด ๋ฐ ๊ท์ ์ค์ ์๊ฑด ์ถฉ์กฑ - ๊ฒ์ยท๋์๋ณด๋ยท์๋ฆผ ์ฒด๊ณ ๊ณ ๋ํ
โ ์ด์ ํ์(๋น์ ์ ์ ์, ๊ถํ ์์น, ์ ์ฑ ์๋ฐ ๋ฑ) ์๋ ํ์ง - ์ฅ๊ธฐ ๋ก๊ทธ ๊ด๋ฆฌ ์ ์ฑ
์๋ฆฝ
โ ๋ณด์ ๊ฐ์ฌ ๋ฐ ํฌ๋ ์ ๋์ ๋น์ฉยท์๊ฐ ์ ๊ฐ
- Terraform ๋ฑ IaC ๋๊ตฌ ํ์ฉ
โ ํด๋ฌ์คํฐ ๋ฐฐํฌยท์ ๋ฐ์ดํธยท์ ์ฑ ์ ์ฉ ์๋ํ ๊ตฌํ - HA ์ํคํ
์ฒ ์ ์ฉ
โ Teleport Auth/Proxy ์๋ฒ ๋ฐ Kubernetes Control Plane ๋ฌด์ค๋จ ์ด์ ๊ฒ์ฆ - ๋ฉํฐํด๋ฌ์คํฐ ํ๊ฒฝ์์ ์ด์๋งยท๊ฐ๋ฐ๋งยทํ
์คํธ๋ง ๋ถ๋ฆฌ
โ ์ค์ ๊ด๋ฆฌ ์ฒด๊ณ ํ๋ฆฝ














