Search

[CKA] 47. RBAC

Date
2025/01/15
Category
Devops
Tag
Kubernetes
CKA
Security
๋ชฉ์ฐจ

ย Create Role

RBAC์—์„œ์˜ Role์€ Object๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜ ๊ฐ์ฒด๋“ค์ฒ˜๋Ÿผ ์ •์˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
Developer๋ผ๋Š” ์—ญํ• ์— Pod์— ๋Œ€ํ•œ ์กฐํšŒ, ์ƒ์„ฑ, ์‚ญ์ œ์™€ ConfigMap์— ๋Œ€ํ•œ ์ƒ์„ฑ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์—ญํ• ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
# developer-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: developer rules: - apiGroups: [""] resources: ["pods"] verbs: ["list", "get", "create", "update", "delete"] - apiGroups: [""] resources: ["ConfigMap"] verbs: ["create"]
YAML
๋ณต์‚ฌ
์—ญํ• ์˜ ๊ฐ ๊ทœ์น™์€ apiGroups, resources, verbs ์„ธ ๊ฐ€์ง€ ์„น์…˜์œผ๋กœ ๋‚˜๋‰œ๋‹ค. Core Group์ด๋ผ๋ฉด apiGroups ์„น์…˜์„ ๋น„์›Œ๋‘˜ ์ˆ˜ ์žˆ์ง€๋งŒ, ์•„๋‹ˆ๋ผ๋ฉด apiGroups ์„น์…˜์— ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ Pod์™€ ConfigMap์€ core group์ด๊ธฐ ๋•Œ๋ฌธ์— apiGroups๋ฅผ ๋น„์šธ ์ˆ˜ ์žˆ๋‹ค.

ย Link User to Role

์‚ฌ์šฉ์ž๋ฅผ ์—ญํ• ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” RoleBinding์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
# devuser-developer-binding.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: devuser-developer-binding subjects: - kind: User name: dev-user apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: developer apiGroup: rbac.authorization.k8s.io
YAML
๋ณต์‚ฌ
subjects๋Š” ์‚ฌ์šฉ์ž์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ณณ์ด๋ฉฐ, roleRef์—์„œ๋Š” ์—ญํ• ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ณณ์ด๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ subjects๋Š” ๋ฆฌ์ŠคํŠธ๋กœ์„œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž ๋ฐ ๊ทธ๋ฃน์„ ๊ฐ€์ง€์ง€๋งŒ roleRef๋Š” ๋‹จ์ผ ์—ญํ• ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

ย View RBAC

โ€ข
kubectl get roles
โ€ข
kubectl get rolebingings
โ€ข
kubectl describe role <role>
โ—ฆ
ํ•ด๋‹น role์— ๋Œ€ํ•œ ์ •์ฑ…๋“ค ํ™•์ธ ๊ฐ€๋Šฅ
โ–ช
Resources, Permissions of Resources
โ€ข
kubectl describe rolebinding <rolebinding>
โ—ฆ
์—ฐ๊ฒฐ๋œ ์—ญํ• ๊ณผ Subject ๋ชฉ๋ก ํ™•์ธ ๊ฐ€๋Šฅ

ย Check Access

์‚ฌ์šฉ์ž๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํŠน์ • ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. kubectl auth can-i ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ด๋‹น ๋ช…๋ น์„ ํ†ตํ•ด yes/no๋กœ ๊ถŒํ•œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
# kubectl auth can-i <verb> <resouce> kubectl auth can-i create deployments kubectl auth can-i delete nodes
Bash
๋ณต์‚ฌ
๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ์„ ๋ฐ›์•„ ์ ‘์†ํ•ด์•ผ ํ• ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์•„๋„ ๋œ๋‹ค. --as ์˜ต์…˜์„ ํ†ตํ•ด ํŠน์ • ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ํŠน์ • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ž‘๋™์ด ๊ฐ€๋Šฅํ•œ์ง€๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
# kubectl auth can-i <verb> <resouce> --as <user> kubectl auth can-i create deployments --as dev-user kubectl auth can-i create deployments --as dev-user --namespace test kubectl auth can-i delete nodes --as dev-user
Bash
๋ณต์‚ฌ

ย Restrict Access

Namespace

์ƒ์„ฑํ•œ Role๊ณผ RoleBinding์€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฃผ๋ชฉํ•ด์•ผ ํ•œ๋‹ค. Role์˜ metadata.namespace์— ์ง€์ •๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ฆฌ์†Œ์Šค์—๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๊ธฐ๋ณธ๊ฐ’์€ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋‹ค.
์˜ˆ์‹œ๋กœ ์œ„์—์„œ ์ƒ์„ฑํ•œ developer๋ผ๋Š” Role์€ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ Pod์™€ ConfigMap์— ๋Œ€ํ•œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์—ญํ• ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ •์˜ ํŒŒ์ผ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค.

Resource Name

๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋‚ด์˜ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋” ์ข์€ ์ œํ•œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. Role์—์„œ rules.resourceNames๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•œ๋ฐ, ์ด๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Namespace ๋‚ด์—์„œ ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ง€๋Š” ๋ฆฌ์†Œ์Šค์—๋งŒ ์ ‘๊ทผ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
# developer-role.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: developer rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "create", "update"] resourceNames: ["blue", "orange"]
YAML
๋ณต์‚ฌ
์œ„ ์—ญํ• ์€ default ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋‚ด์—์„œ blue, orange ์ด๋ฆ„์„ ๊ฐ€์ง„ Pod์— ๋Œ€ํ•˜์—ฌ ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.