๐น RBAC(Role-Based Access Control)๋?
RBAC(Role-Based Access Control)๋ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์๊ฒ ํน์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๋ณด์ ๋ชจ๋ธ์
๋๋ค.
Argo CD์์๋ RBAC์ ํ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
, ํ๋ก์ ํธ, ๋๊ธฐํ ๊ถํ ๋ฑ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
โ
RBAC์ ์ฃผ์ ๊ฐ๋
โ ์ฌ์ฉ์(User) → Argo CD์ ๋ก๊ทธ์ธํ๋ ์ฌ์ฉ์
โ ์ญํ (Role) → ํน์ ๊ถํ์ด ๋ถ์ฌ๋ ์ญํ (์: ์ฝ๊ธฐ ์ ์ฉ, ๋ฐฐํฌ ๊ด๋ฆฌ์)
โ ๊ถํ(Rule) → ํน์ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ํ์ฉ ์ฌ๋ถ (์: ๋๊ธฐํ ์คํ, ์ญ์ ๊ธ์ง)
โ ๊ทธ๋ฃน(Group) → ์ฌ๋ฌ ์ฌ์ฉ์๋ฅผ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด RBAC ์ ์ฉ ๊ฐ๋ฅ
โ
RBAC ์ค์ ์ด ํ์ํ ์ด์
โ ๋ณด์ ๊ฐํ๋ฅผ ์ํด ํน์ ์ฌ์ฉ์๋ง ์ ํ๋ฆฌ์ผ์ด์
์ ์์ ํ ์ ์๋๋ก ์ ํ
โ ์ด์(Production) ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ(Development) ํ๊ฒฝ์ ์ ๊ทผ ๊ถํ์ ๋ค๋ฅด๊ฒ ์ ์ฉ
โ GitOps ํ๊ฒฝ์์ ๋ถํ์ํ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ์ฌ ์์ ํ ๋ฐฐํฌ ์ด์ ๊ฐ๋ฅ
๐น Argo CD RBAC ์ค์ ๋ฐฉ๋ฒ
Argo CD์ RBAC ์ค์ ์ argocd-rbac-cm ConfigMap์ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋ฉ๋๋ค.
โ RBAC ๊ตฌ์ฑ ์์
๊ตฌ์ฑ ์์ | ์ค๋ช |
policy.csv | ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์ ๋ํ ๊ถํ์ ์ ์ |
scopes | ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ธ์ฆ์ ์ฌ์ฉํ ์์ฑ ์ค์ |
groups | ํน์ ์ฌ์ฉ์ ๊ทธ๋ฃน ์ง์ ๊ฐ๋ฅ |
roles | ์ฌ์ฉ์์๊ฒ ํ ๋นํ ์ญํ ์ค์ |
๐น Argo CD RBAC ๊ธฐ๋ณธ ์ค์
โ 1. Argo CD RBAC ์ค์ ํ์ธ
Argo CD ๊ธฐ๋ณธ RBAC ์ค์ ์ argocd-rbac-cm ConfigMap์ ์ ์ฅ๋์ด ์์ต๋๋ค.
๊ธฐ๋ณธ ์ค์ ์ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get configmap argocd-rbac-cm -n argocd -o yaml
โ ์ถ๋ ฅ ์์:
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.default: role:readonly # ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ์๋ ReadOnly ์ญํ
scopes: "[groups]" # ์ฌ์ฉ์ ๊ทธ๋ฃน์ RBAC ์ธ์ฆ์ ์ฌ์ฉ
โ ์ค๋ช :
- policy.default: role:readonly → ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ฌ์ฉ์๋ ์ฝ๊ธฐ ์ ์ฉ(ReadOnly)
- scopes: "[groups]" → ๊ทธ๋ฃน ๊ธฐ๋ฐ ์ธ์ฆ ํ์ฑํ
โ 2. ์ฌ์ฉ์ ์ญํ (Role) ์ ์ํ๊ธฐ
RBAC์ ํ์ฉํ์ฌ ํน์ ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน์๊ฒ ํ์ํ ๊ถํ๋ง ๋ถ์ฌํ ์ ์์ต๋๋ค.
โ ์์ : argocd-rbac-cm ConfigMap์ ๊ด๋ฆฌ์ ๋ฐ ๊ฐ๋ฐ์ ์ญํ ์ถ๊ฐ
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-rbac-cm
namespace: argocd
data:
policy.csv: |
g, admin-group, role:admin # admin-group์ ๊ด๋ฆฌ์ ์ญํ
g, dev-group, role:developer # dev-group์ ๊ฐ๋ฐ์ ์ญํ
p, role:admin, applications, *, */*, allow # ๊ด๋ฆฌ์(admin)๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ด ๊ฐ๋ฅ
p, role:developer, applications, sync, default/*, allow # ๊ฐ๋ฐ์๋ ๋๊ธฐํ(sync)๋ง ๊ฐ๋ฅ
p, role:developer, applications, delete, default/*, deny # ๊ฐ๋ฐ์๋ ์ญ์ ๋ถ๊ฐ๋ฅ
scopes: "[groups]"
policy.default: role:readonly
โ
์ค๋ช
:
โ g, admin-group, role:admin → admin-group ์ฌ์ฉ์๋ admin ์ญํ ์ ๊ฐ์ง
โ g, dev-group, role:developer → dev-group ์ฌ์ฉ์๋ developer ์ญํ ์ ๊ฐ์ง
โ p, role:admin, applications, *, */*, allow → admin ์ญํ ์ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ด๋ฆฌ ๊ฐ๋ฅ
โ p, role:developer, applications, sync, default/*, allow → developer ์ญํ ์ ๋๊ธฐํ ๊ฐ๋ฅ
โ p, role:developer, applications, delete, default/*, deny → developer ์ญํ ์ ์ญ์ ๋ถ๊ฐ๋ฅ
โ ConfigMap ์ ์ฉ:
kubectl apply -f argocd-rbac-cm.yaml
๐น Argo CD RBAC์ ํตํ ์ ๊ทผ ์ ์ด
โ 1. ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๊ถํ ๋ถ์ฌ
ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ ๊ทผ ๊ถํ์ ์ค์ ํ ์๋ ์์ต๋๋ค.
โ ์์ : ๊ฐ๋ฐ์๋ frontend-app ์ ํ๋ฆฌ์ผ์ด์ ๋ง ๋๊ธฐํ ๊ฐ๋ฅํ๋๋ก ์ค์
data:
policy.csv: |
p, role:developer, applications, sync, default/frontend-app, allow
โ
์ค๋ช
:
โ ๊ฐ๋ฐ์๋ frontend-app ์ ํ๋ฆฌ์ผ์ด์
๋ง ๋๊ธฐํ ๊ฐ๋ฅ
โ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์
์๋ ์ ๊ทผ ๋ถ๊ฐ
โ 2. ํ๋ก์ ํธ ๊ธฐ๋ฐ RBAC ์ค์
Argo CD๋ ํ๋ก์ ํธ ๋จ์๋ก RBAC์ ์ค์ ํ ์๋ ์์ต๋๋ค.
โ ์์ : staging ํ๋ก์ ํธ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง ๋๊ธฐํ ๊ฐ๋ฅํ๋๋ก ์ค์
data:
policy.csv: |
p, role:developer, projects, get, staging, allow
p, role:developer, applications, sync, staging/*, allow
โ
์ค๋ช
:
โ developer ์ญํ ์ staging ํ๋ก์ ํธ์ ์ ํ๋ฆฌ์ผ์ด์
๋ง ๋๊ธฐํ ๊ฐ๋ฅ
โ ๋ค๋ฅธ ํ๋ก์ ํธ์๋ ์ ๊ทผ ๋ถ๊ฐ
โ ํ๋ก์ ํธ ๋ชฉ๋ก ํ์ธ:
argocd proj list
โ 3. RBAC ์ ์ฑ ํ ์คํธ
RBAC ์ ์ฑ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ฉ๋์๋์ง ํ ์คํธํ ์ ์์ต๋๋ค.
โ ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ญํ ํ์ธ:
argocd account get-user-info
โ RBAC ์ ์ฑ ํ์ธ:
argocd account can-i sync applications default/frontend-app
โ ์ถ๋ ฅ ์์:
yes # ๋๊ธฐํ ๊ฐ๋ฅ
โ RBAC ์ ์ฑ ์ ์ฉ ํ Argo CD ์ฌ์์ (ํ์ ์)
kubectl rollout restart deployment argocd-server -n argocd
๐น Argo CD RBAC ๊ด๋ฆฌ CLI ๋ช ๋ น์ด ์ ๋ฆฌ
๋ช ๋ น์ด | ์ค๋ช |
argocd proj list | Argo CD ํ๋ก์ ํธ ๋ชฉ๋ก ํ์ธ |
argocd account get-user-info | ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ RBAC ์ญํ ํ์ธ |
argocd account can-i sync applications <APP> | ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ๋๊ธฐํ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ |
kubectl get configmap argocd-rbac-cm -n argocd -o yaml | ํ์ฌ RBAC ์ค์ ์กฐํ |
kubectl rollout restart deployment argocd-server -n argocd | Argo CD ์๋ฒ ์ฌ์์ (RBAC ๋ณ๊ฒฝ ์ ์ฉ) |
๐น ๊ฒฐ๋ก : ์ด๋ฒ ๊ธ์์ ๋ฐฐ์ด ํต์ฌ ๋ด์ฉ ์ ๋ฆฌ
๐ข Argo CD RBAC์ ํ์ฉํ๋ฉด ์ฌ์ฉ์ ๋๋ ๊ทธ๋ฃน๋ณ๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ฐ ํ๋ก์ ํธ ์ ๊ทผ์ ์ ์ด ๊ฐ๋ฅ
๐ข ConfigMap์ ํ์ฉํ์ฌ RBAC ์ ์ฑ
์ ์ฝ๊ฒ ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์์
๐ข RBAC์ ํตํด ์ด์ ํ๊ฒฝ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ํ ๊ถํ์ ๋ถ๋ฆฌํ์ฌ ๋ณด์์ฑ์ ๊ฐํํ ์ ์์
๐ข CLI ๋ช
๋ น์ด๋ฅผ ํ์ฉํ์ฌ ํ์ฌ ์ฌ์ฉ์ ๊ถํ์ ํ์ธํ๊ณ , ํ์ํ ์ ์ฑ
์ ํ
์คํธํ ์ ์์