์ด ํ์ด์ง์์๋ ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด(RBAC) ์ ์ฑ ์ ๊ณํํ๊ธฐ ์ํ ๊ถ์ฅ์ฌํญ์ ์ค๋ช ํฉ๋๋ค. Google Kubernetes Engine(GKE)์์ RBAC๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๋ ค๋ฉด ์ญํ ๊ธฐ๋ฐ ์ก์ธ์ค ์ ์ด ๊ตฌ์ฑ์ ์ฐธ์กฐํ์ธ์. RBAC๋ Kubernetes์ ํต์ฌ ๋ณด์ ๊ธฐ๋ฅ์ผ๋ก, ์ด๋ฅผ ํตํด ์ฌ์ฉ์์ ์ํฌ๋ก๋๊ฐ ํด๋ฌ์คํฐ์ ๋ฆฌ์์ค์ ์ํํ ์ ์๋ ์์ ์ ๊ด๋ฆฌํ๋ ์ธ๋ถํ๋ ๊ถํ์ ๋ง๋ค ์ ์์ต๋๋ค. RBAC ์ญํ ์ ๋ง๋ค๊ณ ์ด๋ฌํ ์ญํ ์ ์๋น์ค ๊ณ์ ๋๋ Google ๊ทธ๋ฃน์ค์ ๊ฐ์ ์ธ์ฆ๋ ์ฌ์ฉ์์ธ ์ฃผ์ฒด์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
์ด ํ์ด์ง๋ ์กฐ์ง์ RBAC ์ ์ฑ ์ ๊ณํํ๊ณ ๊ตฌํํ๋ ๋ณด์ ์ ๋ฌธ๊ฐ ๋ฐ ์ด์์๋ฅผ ๋์์ผ๋ก ํฉ๋๋ค. Google Cloud ์ฝํ ์ธ ์์ ์ฐธ์กฐํ๋ ์ผ๋ฐ์ ์ธ ์ญํ ๋ฐ ์์ ํ์คํฌ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ผ๋ฐ GKE Enterprise ์ฌ์ฉ์ ์ญํ ๋ฐ ํ์คํฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ด ํ์ด์ง๋ฅผ ์ฝ๊ธฐ ์ ๋ค์ ๋ด์ฉ์ ์์งํด์ผ ํฉ๋๋ค.
์ด ๊ฐ์ด๋์ ์ฒดํฌ๋ฆฌ์คํธ๋ ์ฒดํฌ๋ฆฌ์คํธ ์์ฝ์ ์ฐธ์กฐํ์ธ์.
RBAC ์๋ ๋ฐฉ์
RBAC๋ ๋ค์ ์ ํ์ ์ญํ ๋ฐ ๋ฐ์ธ๋ฉ์ ์ง์ํฉ๋๋ค.
- ClusterRole: ๋ชจ๋ ๋ค์์คํ์ด์ค ๋๋ ์ ์ฒด ํด๋ฌ์คํฐ์ ์ ์ฉํ ์ ์๋ ๊ถํ ์งํฉ์ ๋๋ค.
- ์ญํ : ๋จ์ผ ๋ค์์คํ์ด์ค๋ก ์ ํ๋๋ ๊ถํ ์งํฉ์ ๋๋ค.
- ClusterRoleBinding: ํด๋ฌ์คํฐ์์ ๋ชจ๋ ๋ค์์คํ์ด์ค์ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์
ClusterRole
์ ๋ฐ์ธ๋ฉํฉ๋๋ค. - RoleBinding: ํน์ ๋ค์์คํ์ด์ค ๋ด์์ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์
Role
๋๋ClusterRole
์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
Role
๋๋ ClusterRole
์์ ๊ถํ์ rules
๋ก ์ ์ํฉ๋๋ค. ์ญํ ์ ๊ฐ rules
ํ๋๋ API ๊ทธ๋ฃน, ์ด API ๊ทธ๋ฃน ๋ด์ ์๋ API ๋ฆฌ์์ค, ์ด๋ฌํ ๋ฆฌ์์ค์ ํ์ฉ๋๋ ๋์ฌ(์์
)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ ํ์ ์ผ๋ก resourceNames
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ API ๋ฆฌ์์ค์ ๋ช
๋ช
๋ ์ธ์คํด์ค๋ก ๋์ฌ์ ๋ฒ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํน์ ๋ฆฌ์์ค ์ธ์คํด์ค๋ก ์ก์ธ์ค ์ ํ์ ์ฐธ์กฐํ์ธ์.
์ญํ ์ ์ ์ํ ํ RoleBinding
๋๋ ClusterRoleBinding
์ ์ฌ์ฉํ์ฌ ์ญํ ์ ์ฃผ์ฒด์ ๋ฐ์ธ๋ฉํฉ๋๋ค. ๋จ์ผ ๋ค์์คํ์ด์ค ๋๋ ๋ค์ค ๋ค์์คํ์ด์ค์์ ๊ถํ์ ๋ถ์ฌํ ์ง์ ๋ฐ๋ผ ๋ฐ์ธ๋ฉ ์ ํ์ ์ ํํฉ๋๋ค.
RBAC ์ญํ ์ค๊ณ
์ต์ ๊ถํ์ ์์น ์ฌ์ฉ
RBAC ์ญํ ์ ๊ถํ์ ํ ๋นํ ๋ ์ต์ ๊ถํ์ ์์น์ ๋ฐ๋ผ ํ์คํฌ ์ํ์ ํ์ํ ์ต์ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค. ์ต์ ๊ถํ์ ์์น์ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ๊ฐ ์์๋์์ ๋ ๊ถํ ์์ค์ปฌ๋ ์ด์ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ค๊ณ ๊ณผ๋ํ ์ก์ธ์ค๋ก ์ธํด ๋ณด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค.
์ญํ ์ ์ค๊ณํ ๋๋ escalate
๋๋ bind
๋์ฌ, PersistentVolumes์ ๋ํ create
์ก์ธ์ค, ์ธ์ฆ์ ์๋ช
์์ฒญ์ ๋ํ create
์ก์ธ์ค์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๊ถํ ์์ค์ปฌ๋ ์ด์
์ํ์ ์ ์คํ๊ฒ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ํ ๋ชฉ๋ก์ Kubernetes RBAC - ๊ถํ ์์ค์ปฌ๋ ์ด์
์ํ์ ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ญํ ๋ฐ ๊ทธ๋ฃน ์ฌ์ฉ ์ํจ
Kubernetes๋ API ๊ฒ์์ ์ฌ์ฉํ๊ณ ๊ด๋ฆฌํ ๊ตฌ์ฑ์์ ๊ธฐ๋ฅ์ ์ฌ์ฉ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ClusterRole ๋ฐ ClusterRoleBinding ์งํฉ์ ๋ง๋ญ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ณธ ์ญํ ๋ก ๋ถ์ฌ๋๋ ๊ถํ์ ์ญํ ์ ๋ฐ๋ผ ๊ด๋ฒ์ํ ์ ์์ต๋๋ค. Kubernetes์๋ system:
ํ๋ฆฌํฝ์ค๋ก ์๋ณ๋๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋ฐ ์ฌ์ฉ์ ๊ทธ๋ฃน ์งํฉ๋ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก Kubernetes์ GKE๋ ์ด๋ฌํ ์ญํ ์ ๊ธฐ๋ณธ ๊ทธ๋ฃน ๋ฐ ๋ค์ํ ์ฃผ์ฒด์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉํฉ๋๋ค. Kubernetes์์ ์์ฑ๋๋ ๊ธฐ๋ณธ ์ญํ ๋ฐ ๋ฐ์ธ๋ฉ์ ๋ํ ์ ์ฒด ๋ชฉ๋ก์ ๊ธฐ๋ณธ ์ญํ ๋ฐ ์ญํ ๋ฐ์ธ๋ฉ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ํ์์๋ ์ผ๋ถ ๊ธฐ๋ณธ ์ญํ , ์ฌ์ฉ์, ๊ทธ๋ฃน์ ์ค๋ช ํฉ๋๋ค. ์ ์คํ๊ฒ ํ๊ฐํ์ง ์๋ ํ ์ด๋ฌํ ์ญํ , ์ฌ์ฉ์, ๊ทธ๋ฃน๊ณผ ์ํธ์์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฌํ ๋ฆฌ์์ค์ ์ํธ์์ฉํ๋ฉด ํด๋ฌ์คํฐ์ ๋ณด์ ์ํฉ์ ์๋์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด๋ฆ | ์ ํ | ์ค๋ช |
---|---|---|
cluster-admin |
ClusterRole | ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฆฌ์์ค์์ ๋ชจ๋ ์์ ์ ์ํํ ์ ์๋ ๊ถํ์ ์ฃผ์ฒด์๊ฒ ๋ถ์ฌํฉ๋๋ค. |
system:anonymous |
์ฌ์ฉ์ | Kubernetes๋ ์ ๊ณต๋ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ API ์๋ฒ ์์ฒญ์ ์ด ์ฌ์ฉ์๋ฅผ ํ ๋นํฉ๋๋ค. ์ด ์ฌ์ฉ์์๊ฒ ์ญํ ์ ๋ฐ์ธ๋ฉํ๋ฉด ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์๊ฒ ํด๋น ์ญํ ์์ ๋ถ์ฌํ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. |
system:unauthenticated |
๊ทธ๋ฃน | Kubernetes๋ ์ ๊ณต๋ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ API ์๋ฒ ์์ฒญ์ ์ด ๊ทธ๋ฃน์ ํ ๋นํฉ๋๋ค. ์ด ๊ทธ๋ฃน์ ์ญํ ์ ๋ฐ์ธ๋ฉํ๋ฉด ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์๊ฒ ํด๋น ์ญํ ์์ ๋ถ์ฌํ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. |
system:authenticated |
๊ทธ๋ฃน | GKE๋ ๋ชจ๋ Gmail ๊ณ์ ์ ํฌํจํ์ฌ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ ๋ชจ๋ ์ฌ์ฉ์์ API ์๋ฒ ์์ฒญ์ ์ด ๊ทธ๋ฃน์ ํ ๋นํฉ๋๋ค. ์ค์ ๋ก ๋๊ตฌ๋ Google ๊ณ์ ์ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๊ทธ๋ฃน์ ์ญํ ์ ๋ฐ์ธ๋ฉํ๋ฉด ๋ชจ๋ Gmail ๊ณ์ ์ ํฌํจํ์ฌ Google ๊ณ์ ์ด ์๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํด๋น ์ญํ ์์ ๋ถ์ฌํ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. |
system:masters |
๊ทธ๋ฃน | Kubernetes๋ ์์คํ
๊ธฐ๋ฅ์ ์ฌ์ฉ ์ค์ ํ๋๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ทธ๋ฃน์ ์ด ๊ทธ๋ฃน์ ์์ฒด ์ฃผ์ฒด๋ฅผ ์ถ๊ฐํ๋ฉด ํด๋น ์ฃผ์ฒด์๊ฒ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฆฌ์์ค์ ๋ํ ์์ ์ ์ํํ ์ ์๋ ์ก์ธ์ค ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. |
๊ฐ๋ฅํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ์ฌ์ฉ์, ์ญํ , ๊ทธ๋ฃน๊ณผ ๊ด๋ จ๋ ๋ฐ์ธ๋ฉ์ ๋ง๋ค์ง ๋ง์ธ์. ์ด๋ก ์ธํด ํด๋ฌ์คํฐ์ ๋ณด์ ์ํฉ์ ์๋์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ธฐ๋ณธ
cluster-admin
ClusterRole์system:unauthenticated
๊ทธ๋ฃน์ ๋ฐ์ธ๋ฉํ๋ฉด ์ธ์ฆ๋์ง ์์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ณด์ ๋น๋ฐ์ ํฌํจํ์ฌ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋ฆฌ์์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๊ถํ์ด ๋์ ์ด๋ฌํ ๋ฐ์ธ๋ฉ์ ๋๋ ๋ฉ์จ์ด ์บ ํ์ธ๊ณผ ๊ฐ์ ๊ณต๊ฒฉ์ ํ์ ์ด ๋ฉ๋๋ค. - ์ปค์คํ
์ญํ ์
system:unauthenticated
๊ทธ๋ฃน์ ๋ฐ์ธ๋ฉํ๋ฉด ์ธ์ฆ๋์ง ์์ ์ฌ์ฉ์์๊ฒ ํด๋น ์ญํ ์์ ๋ถ์ฌํ ๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค.
๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ค์ ๊ฐ์ด๋๋ผ์ธ์ ๋ฐ๋ฅด์ธ์.
system:masters
๊ทธ๋ฃน์ ์์ ์ ์ฃผ์ฒด๋ฅผ ์ถ๊ฐํ์ง ์์ต๋๋ค.system:unauthenticated
๊ทธ๋ฃน์ RBAC ์ญํ ์ ๋ฐ์ธ๋ฉํ์ง ์์ต๋๋ค.system:authenticated
๊ทธ๋ฃน์ RBAC ์ญํ ์ ๋ฐ์ธ๋ฉํ์ง ์์ต๋๋ค.system:anonymous
์ฌ์ฉ์๋ฅผ RBAC ์ญํ ์ ๋ฐ์ธ๋ฉํ์ง ์์ต๋๋ค.cluster-admin
ClusterRole์ ์์ ์ ์ฃผ์ฒด ๋๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ ๋ฐ์ธ๋ฉํ์ง ๋ง์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ถํ์ด ํ์ํ ๊ฒฝ์ฐ ํ์ํ ๊ถํ์ ์ ํํ๊ฒ ํ๋จํ๊ณ ํด๋น ๋ชฉ์ ์ ๋ง๋ ํน์ ์ญํ ์ ๋ง๋ญ๋๋ค.- ์ฃผ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ๊ธฐ ์ ๋ค๋ฅธ ๊ธฐ๋ณธ ์ญํ ๋ก ๋ถ์ฌ๋๋ ๊ถํ์ ํ๊ฐํฉ๋๋ค.
- ์ด๋ฌํ ๊ทธ๋ฃน์ ๊ตฌ์ฑ์์ ์์ ํ๊ธฐ ์ ๊ธฐ๋ณธ ๊ทธ๋ฃน์ ๋ฐ์ธ๋ฉ๋ ์ญํ ์ ํ๊ฐํฉ๋๋ค.
๊ธฐ๋ณธ ๊ทธ๋ฃน ์ฌ์ฉ ๋ฐฉ์ง
gcloud CLI๋ฅผ ์ฌ์ฉํ์ฌ system:unauthenticated
๋ฐ system:authenticated
๊ทธ๋ฃน์ด๋ system:anonymous
์ฌ์ฉ์๋ฅผ ์ฐธ์กฐํ๋ ํด๋ฌ์คํฐ์์ ๊ธฐ๋ณธ์ด ์๋ RBAC ๋ฐ์ธ๋ฉ์ ์ค์งํ ์ ์์ต๋๋ค. ์ GKE ํด๋ฌ์คํฐ๋ฅผ ๋ง๋ค๊ฑฐ๋ ๊ธฐ์กด ํด๋ฌ์คํฐ๋ฅผ ์
๋ฐ์ดํธํ ๋ ๋ค์ ํ๋๊ทธ ์ค ํ๋ ๋๋ ๋ ๋ค๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ด๋ฌํ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํด๋ ์ด๋ฌํ ๊ทธ๋ฃน์ ์ฐธ์กฐํ๋ ๊ธฐ๋ณธ Kubernetes ๋ฐ์ธ๋ฉ์ ์ค์ง๋์ง ์์ต๋๋ค. ์ด๋ฌํ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด GKE ๋ฒ์ 1.30.1-gke.1283000 ์ด์์ด ํ์ํฉ๋๋ค.
--no-enable-insecure-binding-system-authenticated
:system:authenticated
๋ฅผ ์ฐธ์กฐํ๋ ๊ธฐ๋ณธ์ด ์๋ ๋ฐ์ธ๋ฉ์ ์ค์งํฉ๋๋ค.--no-enable-insecure-binding-system-unauthenticated
:system:unauthenticated
๋ฐsystem:anonymous
๋ฅผ ์ฐธ์กฐํ๋ ๊ธฐ๋ณธ์ด ์๋ ๋ฐ์ธ๋ฉ์ ์ค์งํฉ๋๋ค.
๊ธฐ๋ณธ ์ญํ ๋ฐ ๊ทธ๋ฃน ์ฌ์ฉ ๊ฐ์ง ๋ฐ ์ญ์
ํด๋ฌ์คํฐ๊ฐ RBAC ๋ฐ์ธ๋ฉ์์ ์ด๋ฌํ ์ฌ์ฉ์์ ๊ทธ๋ฃน์ ์ฐธ์กฐํ๋์ง ํ์ธํ๋ ค๋ฉด GKE๊ฐ Google Cloud ์ฝ์์ ๋ณด์ ์ํฉ ๋์๋ณด๋์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์ ์๋๋ก ํด๋ฌ์คํฐ ๋๋ Fleet์ ํ์ค ๋ฑ๊ธ์ Kubernetes ๋ณด์ ์ํฉ ์ค์บ์ ์ฌ์ฉ ์ค์ ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ ์ํฌ๋ก๋ ๊ตฌ์ฑ ๊ฐ์ฌ ์ฌ์ฉ ์ค์ ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ์น์ ์์๋ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋ฐ ๊ทธ๋ฃน์ ์ฐธ์กฐํ๋ ํน์ RoleBinding ๋๋ ClusterRoleBindings๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ๊ณผ ์ด๋ฌํ ๋ฆฌ์์ค๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
ClusterRoleBindings
์์ ์๊ฐ
system:anonymous
,system:unauthenticated
๋๋system:authenticated
์ธ ClusterRoleBinding์ ์ด๋ฆ์ ๋์ดํฉ๋๋ค.kubectl get clusterrolebindings -o json \ | jq -r '["Name"], ["-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:anonymous" or .name == "system:unauthenticated" or .name == "system:authenticated")) | [.metadata.namespace, .metadata.name]) | @tsv'
์ถ๋ ฅ์๋ ๋ค์ ClusterRoleBinding๋ง ๋์ด๋ฉ๋๋ค.
Name ---- "system:basic-user" "system:discovery" "system:public-info-viewer"
์ถ๋ ฅ์ ๊ธฐ๋ณธ์ด ์๋ ์ถ๊ฐ ๋ฐ์ธ๋ฉ์ด ํฌํจ๋ ๊ฒฝ์ฐ ๊ฐ ์ถ๊ฐ ๋ฐ์ธ๋ฉ์ ๋ํด ๋ค์์ ์ํํฉ๋๋ค. ์ถ๋ ฅ์ ๊ธฐ๋ณธ์ด ์๋ ๋ฐ์ธ๋ฉ์ด ์์ผ๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค.
๋ฐ์ธ๋ฉ๊ณผ ์ฐ๊ฒฐ๋ ์ญํ ์ ๊ถํ์ ๋์ดํฉ๋๋ค.
kubectl get clusterrolebinding CLUSTER_ROLE_BINDING_NAME -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml'
CLUSTER_ROLE_BINDING_NAME
์ ๊ธฐ๋ณธ์ด ์๋ ClusterRoleBinding์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: ... rules: - apiGroups: - "" resources: - secrets verbs: - get - watch - list
์ถ๋ ฅ์ ๊ถํ์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์ ๋ถ์ฌํด๋ ์์ ํ๋ค๊ณ ํ๋จ๋๋ฉด ์ถ๊ฐ ์กฐ์น๋ฅผ ์ทจํ์ง ์์๋ ๋ฉ๋๋ค. ๋ฐ์ธ๋ฉ์ ์ํด ๋ถ์ฌ๋ ๊ถํ์ด ์์ ํ์ง ์๋ค๊ณ ํ๋จ๋๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์งํํฉ๋๋ค.
ํด๋ฌ์คํฐ์์ ์์ ํ์ง ์์ ๋ฐ์ธ๋ฉ์ ์ญ์ ํฉ๋๋ค.
kubectl delete clusterrolebinding CLUSTER_ROLE_BINDING_NAME
CLUSTER_ROLE_BINDING_NAME
์ ์ญ์ ํ ClusterRoleBinding์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.
RoleBindings
์์ ์๊ฐ
system:anonymous
,system:unauthenticated
๋๋system:authenticated
์ธ RoleBinding์ ๋ค์์คํ์ด์ค ๋ฐ ์ด๋ฆ์ ๋์ดํฉ๋๋ค.kubectl get rolebindings -A -o json \ | jq -r '["Namespace", "Name"], ["---------", "-----"], (.items[] | select((.subjects | length) > 0) | select(any(.subjects[]; .name == "system:anonymous" or .name == "system:unauthenticated" or .name == "system:authenticated")) | [.metadata.namespace, .metadata.name]) | @tsv'
ํด๋ฌ์คํฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์์ผ๋ฉด ์ถ๋ ฅ์ด ๋น ์ํ๋ก ๋ฐํ๋ฉ๋๋ค. ์ถ๋ ฅ์ ๊ธฐ๋ณธ์ด ์๋ ๋ฐ์ธ๋ฉ์ด ํฌํจ๋ ๊ฒฝ์ฐ ๊ฐ ์ถ๊ฐ ๋ฐ์ธ๋ฉ์ ๋ํด ๋ค์ ๋จ๊ณ๋ฅผ ์ํํฉ๋๋ค. ์ถ๋ ฅ์ด ๋น์ด ์์ผ๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค.
RoleBinding ์ด๋ฆ๋ง ์๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ค์์คํ์ด์ค์์ ์ผ์นํ๋ rolebinding์ ์ฐพ์ ์ ์์ต๋๋ค.
kubectl get rolebindings -A -o json \ | jq -r '["Namespace", "Name"], ["---------", "-----"], (.items[] | select((.subjects | length) > 0) | select(.metadata.name == "ROLE_BINDING_NAME") | [.metadata.namespace, .metadata.name]) | @tsv'
ROLE_BINDING_NAME
์ ๊ธฐ๋ณธ์ด ์๋ RoleBinding์ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ๋๋ค.๋ฐ์ธ๋ฉ๊ณผ ์ฐ๊ฒฐ๋ ์ญํ ์ ๊ถํ์ ๋์ดํฉ๋๋ค.
kubectl get rolebinding ROLE_BINDING_NAME --namespace ROLE_BINDING_NAMESPACE -o json \ | jq ' .roleRef.name +" " + .roleRef.kind' \ | sed -e 's/"//g' \ | xargs -l bash -c 'kubectl get $1 $0 -o yaml --namespace ROLE_BINDING_NAMESPACE'
๋ค์์ ๋ฐ๊ฟ๋๋ค.
ROLE_BINDING_NAME
: ๊ธฐ๋ณธ์ด ์๋ RoleBinding์ ์ด๋ฆ์ ๋๋ค.ROLE_BINDING_NAMESPACE
: ๊ธฐ๋ณธ์ด ์๋ RoleBinding์ ๋ค์์คํ์ด์ค์ ๋๋ค.
์ถ๋ ฅ์ ๋ค์๊ณผ ๋น์ทํฉ๋๋ค.
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: ... rules: - apiGroups: - "" resources: - secrets verbs: - get - watch - list
์ถ๋ ฅ์ ๊ถํ์ ๊ธฐ๋ณธ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์ ๋ถ์ฌํด๋ ์์ ํ๋ค๊ณ ํ๋จ๋๋ฉด ์ถ๊ฐ ์กฐ์น๋ฅผ ์ทจํ์ง ์์๋ ๋ฉ๋๋ค. ๋ฐ์ธ๋ฉ์ ์ํด ๋ถ์ฌ๋ ๊ถํ์ด ์์ ํ์ง ์๋ค๊ณ ํ๋จ๋๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ์งํํฉ๋๋ค.
ํด๋ฌ์คํฐ์์ ์์ ํ์ง ์์ ๋ฐ์ธ๋ฉ์ ์ญ์ ํฉ๋๋ค.
kubectl delete rolebinding ROLE_BINDING_NAME --namespace ROLE_BINDING_NAMESPACE
๋ค์์ ๋ฐ๊ฟ๋๋ค.
ROLE_BINDING_NAME
: ์ญ์ ํ RoleBinding์ ์ด๋ฆ์ ๋๋ค.ROLE_BINDING_NAMESPACE
: ์ญ์ ํ RoleBinding์ ๋ค์์คํ์ด์ค์ ๋๋ค.
๋ค์์คํ์ด์ค ์์ค์ผ๋ก ๊ถํ ๋ฒ์ ์ง์
์ํฌ๋ก๋ ๋๋ ์ฌ์ฉ์์ ์๊ตฌ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ์ธ๋ฉ ๋ฐ ์ญํ ์ ์ฌ์ฉํฉ๋๋ค.
- ํ๋์ ๋ค์์คํ์ด์ค์์ ๋ฆฌ์์ค์ ์ก์ธ์ค๋ฅผ ๋ถ์ฌํ๋ ค๋ฉด
RoleBinding
๊ณผ ํจ๊ปRole
์ ์ฌ์ฉํฉ๋๋ค. - ํ๋๋ฅผ ์ด๊ณผํ๋ ๋ค์์คํ์ด์ค์์ ๋ฆฌ์์ค์ ์ก์ธ์ค๋ฅผ ๋ถ์ฌํ๋ ค๋ฉด ๊ฐ ๋ค์์คํ์ด์ค์ ๋ํด
RoleBinding
๊ณผ ํจ๊ปClusterRole
์ ์ฌ์ฉํฉ๋๋ค. - ๋ชจ๋ ๋ค์์คํ์ด์ค์์ ๋ฆฌ์์ค์ ์ก์ธ์ค๋ฅผ ๋ถ์ฌํ๋ ค๋ฉด
ClusterRoleBinding
๊ณผ ํจ๊ปClusterRole
์ ์ฌ์ฉํฉ๋๋ค.
๊ฐ๋ฅํ ํ ์ ์ ์์ ๋ค์์คํ์ด์ค๋ก ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
์์ผ๋ ์นด๋ ์ฌ์ฉ ์ํจ
*
๋ฌธ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์ ์ฉ๋๋ ์์ผ๋ ์นด๋์
๋๋ค. ๊ท์น์ ์์ผ๋ ์นด๋๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์. RBAC ๊ท์น์์ API ๊ทธ๋ฃน, ๋ฆฌ์์ค, ๋์ฌ๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด verbs
ํ๋์ *
๋ฅผ ์ง์ ํ๋ฉด ๋ฆฌ์์ค์ get
, list
, watch
, patch
, update
, deletecollection
, delete
๊ถํ์ด ๋ถ์ฌ๋ฉ๋๋ค. ๋ค์ ํ์์๋ ๊ท์น์์ ์์ผ๋ ์นด๋๋ฅผ ์ถ๊ฐํ๋ ์์๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ถ์ฅ | ๊ถ์ฅํ์ง ์์ |
---|---|
- rules: apiGroups: ["apps","extensions"] resources: ["deployments"] verbs: ["get","list","watch"] ํนํ |
- rules: apiGroups: ["*"] resources: ["deployments"] verbs: ["get","list","watch"] ๋ชจ๋ API ๊ทธ๋ฃน์์ |
- rules: apiGroups: ["apps", "extensions"] resources: ["deployments"] verbs: ["get", "list", "watch"]
|
- rules: apiGroups: ["apps", "extensions"] resources: ["deployments"] verbs: ["*"]
|
๋ณ๋์ ๊ท์น์ ์ฌ์ฉํ์ฌ ํน์ ๋ฆฌ์์ค์ ๋ํด ์ต์ ๊ถํ์ ์ก์ธ์ค ๋ถ์ฌ
๊ท์น์ ๊ณํํ ๋ ๊ฐ ์ญํ ์์ ๋ณด๋ค ํจ์จ์ ์ธ ์ต์ ๊ถํ์ ๊ท์น ์ค๊ณ๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ์์ ๋จ๊ณ๋ฅผ ์ํํ์ธ์.
- ๊ฐ ๋ฆฌ์์ค์์ ์ฃผ์ฒด๊ฐ ์ก์ธ์คํด์ผ ํ๋ ๊ฐ ๋์ฌ์ ๋ํด ๋ณ๋์ RBAC ๊ท์น ์ด์์ ์์ฑํฉ๋๋ค.
- ๊ท์น ์ด์์ ์์ฑํ ํ์๋ ๊ท์น์ ๋ถ์ํ์ฌ ์ฌ๋ฌ ๊ท์น์ ๋์ผํ
verbs
๋ชฉ๋ก์ด ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค. ์ด๋ฌํ ๊ท์น์ ๋จ์ผ ๊ท์น์ผ๋ก ๊ฒฐํฉํฉ๋๋ค. - ๋จ์ ๊ท์น์ ์๋ก ๊ฐ๋ณ์ ์ผ๋ก ์ ์งํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ณด๋ค ์ฒด๊ณ์ ์ธ ๊ท์น ์ค๊ณ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ฌ๊ธฐ์์ ์ฌ๋ฌ ๋ฆฌ์์ค์ ๋์ผํ ๋์ฌ๋ฅผ ๋ถ์ฌํ๋ ๊ท์น์ ํ๋๋ก ๊ฒฐํฉ๋๊ณ ๋ฆฌ์์ค์ ์๋ก ๋ค๋ฅธ ๋์ฌ๋ฅผ ๋ถ์ฌํ๋ ๊ท์น์ ๊ฐ๋ณ์ ์ผ๋ก ์ ์ง๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ํฌ๋ก๋์ deployments
๋ฆฌ์์ค์ ๋ํด ๊ฐ์ ธ์ค๊ธฐ ๊ถํ์ด ํ์ํ์ง๋ง daemonsets
๋ฆฌ์์ค์ ๋ํด์๋ list
๋ฐ watch
๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ์ญํ ์ ๋ง๋ค ๋ ๊ฐ๋ณ ๊ท์น์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. RBAC ์ญํ ์ ์ํฌ๋ก๋์ ๋ฐ์ธ๋ฉํ ๋๋ deployments
์์ watch
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ์์๋ก, ์ํฌ๋ก๋์ pods
๋ฆฌ์์ค์ daemonsets
๋ฆฌ์์ค ๋ชจ๋ get
๋ฐ watch
๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ํฌ๋ก๋์์ ๋ ๋ฆฌ์์ค ๋ชจ๋ ๋์ผํ ๋์ฌ๊ฐ ํ์ํ๋ฏ๋ก ์ด๋ฅผ ๋จ์ผ ๊ท์น์ผ๋ก ๊ฒฐํฉํ ์ ์์ต๋๋ค.
๋ค์ ํ์์๋ ๋ ๊ท์น ์ค๊ณ๊ฐ ๋ชจ๋ ์๋ํ์ง๋ง ์๊ตฌ์ ๋ฐ๋ผ ๋ถํ ๊ท์น์ด ๋ฆฌ์์ค ์ก์ธ์ค๋ฅผ ๋ ์ธ๋ถ์ ์ผ๋ก ์ ํํฉ๋๋ค.
๊ถ์ฅ | ๊ถ์ฅํ์ง ์์ |
---|---|
- rules: apiGroups: ["apps"] resources: ["deployments"] verbs: ["get"] - rules: apiGroups: ["apps"] resources: ["daemonsets"] verbs: ["list", "watch"] Deployments์ ๋ํด |
- rules: apiGroups: ["apps"] resources: ["deployments", "daemonsets"] verbs: ["get","list","watch"] Deployments ๋ฐ DaemonSets ๋ชจ๋์ ๋์ฌ๋ฅผ ๋ถ์ฌํฉ๋๋ค. |
- rules: apiGroups: ["apps"] resources: ["daemonsets", "deployments"] verbs: ["list", "watch"]
|
- rules: apiGroups: ["apps"] resources: ["daemonsets"] verbs: ["list", "watch"] - rules: apiGroups: ["apps"] resources: ["deployments"] verbs: ["list", "watch"] ์ด๋ฌํ ๋ถํ ๊ท์น์ ๊ฒฐํฉ๋ ๊ท์น๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค์ง๋ง ์ญํ ๋งค๋ํ์คํธ์ ๋ถํ์ํ ํผ๋์ ์ด๋ํ ์ ์์ต๋๋ค. |
ํน์ ๋ฆฌ์์ค ์ธ์คํด์ค์ ๋ํ ์ก์ธ์ค ์ ํ
RBAC๋ฅผ ์ฌ์ฉํ๋ฉด ๊ท์น์์ resourceNames
ํ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค์ ํน์ ๋ช
๋ช
๋ ์ธ์คํด์ค๋ก ์ก์ธ์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด seccomp-high
ConfigMap์ update
ํ๊ณ ๋ค๋ฅธ ๊ฒ์ ์
๋ฐ์ดํธํ์ง ์๋ RBAC ์ญํ ์ ์์ฑํ ๊ฒฝ์ฐ resourceNames
๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ConfigMap๋ง ์ง์ ํ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ๊ฒฝ์ฐ resourceNames
๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ถ์ฅ | ๊ถ์ฅํ์ง ์์ |
---|---|
- rules: apiGroups: [""] resources: ["configmaps"] resourceNames: ["seccomp-high"] verbs: ["update"] ์ฃผ์ฒด๊ฐ |
- rules: apiGroups: [""] resources: ["configmaps"] verbs: ["update"] ์ฃผ์ฒด๊ฐ ๋ค์์คํ์ด์ค์์ |
- rules: apiGroups: [""] resources: ["configmaps"] verbs: ["list"] - rules: apiGroups: [""] resources: ["configmaps"] resourceNames: ["seccomp-high"] verbs: ["update"]
|
- rules: apiGroups: [""] resources: ["configmaps"] verbs: ["update", "list"]
|
์๋น์ค ๊ณ์ ์ด RBAC ๋ฆฌ์์ค๋ฅผ ์์ ํ๋๋ก ํ์ฉ ์ํจ
rbac.authorization.k8s.io
API ๊ทธ๋ฃน์ bind
, escalate
, create
, update
, patch
๊ถํ์ด ์๋ Role
๋๋ ClusterRole
๋ฆฌ์์ค๋ฅผ ๋ค์์คํ์ด์ค์ ์๋น์ค ๊ณ์ ์ ๋ฐ์ธ๋ฉํ์ง ์์ต๋๋ค. ํนํ escalate
๋ฐ bind
๋ ๊ณต๊ฒฉ์๊ฐ RBAC์ ๋ด์ฅ๋ ์์ค์ปฌ๋ ์ด์
๋ฐฉ์ง ๋ฉ์ปค๋์ฆ์ ์ฐํํ ์ ์๊ฒ ํด์ค๋๋ค.
Kubernetes ์๋น์ค ๊ณ์
๊ฐ ์ํฌ๋ก๋์ Kubernetes ์๋น์ค ๊ณ์ ๋ง๋ค๊ธฐ
๊ฐ ์ํฌ๋ก๋์ ๊ฐ๋ณ Kubernetes ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค. ํด๋น ์๋น์ค ๊ณ์ ์ ์ต์ ๊ถํ์ธ Role
๋๋ ClusterRole
์ ๋ฐ์ธ๋ฉํฉ๋๋ค.
๊ธฐ๋ณธ ์๋น์ค ๊ณ์ ์ฌ์ฉ ์ํจ
Kubernetes๋ ๋ชจ๋ ๋ค์์คํ์ด์ค์ default
๋ผ๋ ์๋น์ค ๊ณ์ ์ ๋ง๋ญ๋๋ค. default
์๋น์ค ๊ณ์ ์ ๋งค๋ํ์คํธ์์ ์๋น์ค ๊ณ์ ์ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง ์๋ ํฌ๋์ ์๋์ผ๋ก ํ ๋น๋ฉ๋๋ค. Role
๋๋ ClusterRole
์ default
์๋น์ค ๊ณ์ ์ ๋ฐ์ธ๋ฉํ์ง ์๋๋ก ํฉ๋๋ค. Kubernetes๋ ์ด๋ฌํ ์ญํ ์ ์ก์ธ์ค๊ฐ ๋ถ์ฌ๋ ํ์๊ฐ ์๋ ํฌ๋์ default
์๋น์ค ๊ณ์ ์ ํ ๋นํ ์ ์์ต๋๋ค.
์๋น์ค ๊ณ์ ํ ํฐ์ ์๋์ผ๋ก ๋ง์ดํธํ์ง ์์
ํฌ๋ ์ฌ์์ automountServiceAccountToken
ํ๋๋ Kubernetes๊ฐ Kubernetes ์๋น์ค ๊ณ์ ์ ๋ํ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด ํ ํฐ์ ํฌ๋์ ์ฝ์
ํ๋๋ก ์ง์ ํฉ๋๋ค. ํฌ๋๋ ์ด ํ ํฐ์ ์ฌ์ฉํ์ฌ Kubernetes API ์๋ฒ์ ๋ํด ์ธ์ฆ๋ ์์ฒญ์ ์ํํ ์ ์์ต๋๋ค. ์ด ํ๋์ ๊ธฐ๋ณธ๊ฐ์ true
์
๋๋ค.
๋ชจ๋ GKE ๋ฒ์ ์์ ํฌ๋๊ฐ API ์๋ฒ์ ํต์ ํ ํ์๊ฐ ์์ผ๋ฉด ํฌ๋ ์ฌ์์ automountServiceAccountToken=false
๋ฅผ ์ค์ ํฉ๋๋ค.
๋ณด์ ๋น๋ฐ ๊ธฐ๋ฐ ํ ํฐ๋ณด๋ค ์์ ํ ํฐ ์ ํธ
๊ธฐ๋ณธ์ ์ผ๋ก ๋
ธ๋์ kubelet ํ๋ก์ธ์ค๋ ๊ฐ ํฌ๋์ ๋ํด ๋จ๊ธฐ ์๋ ์ํ ์๋น์ค ๊ณ์ ํ ํฐ์ ๊ฒ์ํฉ๋๋ค. ํฌ๋ ์ฌ์์์ automountServiceAccountToken
ํ๋๋ฅผ false
๋ก ์ค์ ํ์ง ์๋ ํ kubelet์ ์ด ํ ํฐ์ ํฌ๋์ ์์ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธํฉ๋๋ค. ํฌ๋์์ Kubernetes API๋ฅผ ํธ์ถํ ๋ ์ด ํ ํฐ์ ์ฌ์ฉํ์ฌ API ์๋ฒ์ ์ธ์ฆํฉ๋๋ค.
์๋น์ค ๊ณ์ ํ ํฐ์ ์๋์ผ๋ก ๊ฒ์ํ๋ ๊ฒฝ์ฐ Kubernetes ๋ณด์ ๋น๋ฐ์ ์ฌ์ฉํ์ฌ ํ ํฐ์ ์ ์ฅํ์ง ์์์ผ ํฉ๋๋ค. ๋ณด์ ๋น๋ฐ ๊ธฐ๋ฐ ์๋น์ค ๊ณ์ ํ ํฐ์ ๋ง๋ฃ๋์ง ์๊ณ ์๋์ผ๋ก ์ํ๋์ง ์๋ ๋ ๊ฑฐ์ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด์
๋๋ค. ์๋น์ค ๊ณ์ ์ ๋ํด ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ํ์ํ๋ฉด TokenRequest
API๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ์ํ๋๋ ๋จ๊ธฐ ํ ํฐ์ ๊ฐ์ ธ์ต๋๋ค.
์ง์์ ์ผ๋ก RBAC ๊ถํ ๊ฒํ
RBAC ์ญํ ๋ฐ ์ก์ธ์ค๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ์ฌ ์ ์ฌ์ ์ธ ์์ค์ปฌ๋ ์ด์
๊ฒฝ๋ก ๋ฐ ์ค๋ณต ๊ท์น์ ์๋ณํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ญ์ ๋ ์ฌ์ฉ์์๊ฒ ํน๋ณํ ๊ถํ์ด ์๋ Role
์ ๋ฐ์ธ๋ฉํ๋ RoleBinding
์ ์ญ์ ํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๊ณต๊ฒฉ์๊ฐ ์ด ๋ค์์คํ์ด์ค์์ ์ญ์ ๋ ์ฌ์ฉ์์ ๋์ผํ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ๊ณ์ ์ ๋ง๋ค๋ฉด ํด๋น Role
์ ๋ฐ์ธ๋ฉ๋๊ณ ๋์ผํ ์ก์ธ์ค ๊ถํ์ ์์ํฉ๋๋ค. ์ ๊ธฐ์ ์ธ ๊ฒํ ๋ ์ด๋ฌํ ์ํ์ ์ต์ํํฉ๋๋ค.
์ฒดํฌ๋ฆฌ์คํธ ์์ฝ
๋ค์ ๋จ๊ณ
- GKE ๊ฐํ ์กฐ์ธ ์ฝ๊ธฐ
- Kubernetes RBAC ๊ถ์ฅ์ฌํญ ์ฝ๊ธฐ
- ๋ค๋ฅธ ๊ถ์ฅ์ฌํญ ์ดํด๋ณด๊ธฐ
- ์ผ๋ฐ์ ์ธ ํด๋ฌ์คํฐ ์ญํ ์ ์ํ ๋งค๋ํ์คํธ ๋ณด๊ธฐ