Kubernetes Tools/ArgoCD

[Ep.21] [Argo CD ๋ณด์•ˆ & ํ™•์žฅ #1] Argo CD์™€ RBAC(Role-Based Access Control) ์„ค์ •

ygtoken 2025. 3. 17. 13:09
728x90

๐Ÿ”น 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 ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ˜„์žฌ ์‚ฌ์šฉ์ž ๊ถŒํ•œ์„ ํ™•์ธํ•˜๊ณ , ํ•„์š”ํ•œ ์ •์ฑ…์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Œ

728x90