Kubernetes Tools/ArgoCD

[Ep.14] [Argo CD 운영 #9] Argo CD ν”„λ‘œμ νŠΈ(Project)와 RBAC(Role-Based Access Control) μ„€μ •

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

πŸ”Ή Argo CDμ—μ„œ ν”„λ‘œμ νŠΈ(Project)λž€?

Argo CDμ—μ„œλŠ” μ—¬λŸ¬ 개의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ ν”„λ‘œμ νŠΈ(Project) λ‹¨μœ„λ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
ν”„λ‘œμ νŠΈλ₯Ό ν™œμš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 보닀 μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜κ³ ,
λ„€μž„μŠ€νŽ˜μ΄μŠ€ 및 ν΄λŸ¬μŠ€ν„°λ³„ 접근을 μ œν•œν•  수 μžˆλŠ” RBAC(Role-Based Access Control)κ³Ό μ—°λ™ν•˜μ—¬ λ³΄μ•ˆμ„±μ„ κ°•ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

βœ… Argo CD ν”„λ‘œμ νŠΈμ˜ μ£Όμš” κΈ°λŠ₯
βœ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ…Όλ¦¬μ μœΌλ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ 관리
βœ” νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ˜λŠ” ν΄λŸ¬μŠ€ν„°μ— λŒ€ν•œ 배포 μ œν•œ κ°€λŠ₯
βœ” RBAC(Role-Based Access Control)λ₯Ό μ μš©ν•˜μ—¬ κΆŒν•œ μ œμ–΄ κ°€λŠ₯
βœ” Git μ €μž₯μ†Œ 및 Helm 차트 μ ‘κ·Ό κΆŒν•œ μ„€μ • κ°€λŠ₯


πŸ”Ή Argo CD ν”„λ‘œμ νŠΈ 생성 및 관리

βœ… 1. ν”„λ‘œμ νŠΈ 생성 (YAML 방식)

λ‹€μŒ YAML을 μ‚¬μš©ν•˜μ—¬ ApplicationSet을 관리할 **μƒˆλ‘œμš΄ ν”„λ‘œμ νŠΈ(Project)**λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: example-project  # ν”„λ‘œμ νŠΈ 이름
  namespace: argocd  # Argo CD λ„€μž„μŠ€νŽ˜μ΄μŠ€
spec:
  description: "Example project for managing applications"  # ν”„λ‘œμ νŠΈ μ„€λͺ…

  sourceRepos:
    - https://github.com/example/repo.git  # ν—ˆμš©λœ Git μ €μž₯μ†Œ

  destinations:
    - namespace: example-namespace  # 배포할 수 μžˆλŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€
      server: https://kubernetes.default.svc  # 배포할 수 μžˆλŠ” ν΄λŸ¬μŠ€ν„°
  
  clusterResourceWhitelist:
    - group: "*"  # λͺ¨λ“  그룹의 λ¦¬μ†ŒμŠ€ ν—ˆμš©
      kind: "*"  # λͺ¨λ“  λ¦¬μ†ŒμŠ€ μœ ν˜• ν—ˆμš©
  
  namespaceResourceBlacklist:
    - group: "policy"
      kind: "PodSecurityPolicy"  # PodSecurityPolicy λ¦¬μ†ŒμŠ€ 생성 μ œν•œ

  roles:
    - name: developer
      description: "Developer role with limited access"
      policies:
        - p, proj:example-project:developer, applications, get, example-project/*, allow
      groups:
        - dev-team

 

βœ… μ„€λͺ…:

  • sourceRepos β†’ ν•΄λ‹Ή ν”„λ‘œμ νŠΈμ—μ„œ 배포 κ°€λŠ₯ν•œ Git μ €μž₯μ†Œ λͺ©λ‘ μ§€μ •
  • destinations β†’ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포될 수 μžˆλŠ” ν΄λŸ¬μŠ€ν„° 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€ μ œν•œ
  • clusterResourceWhitelist β†’ ν”„λ‘œμ νŠΈ λ‚΄μ—μ„œ 생성할 수 μžˆλŠ” Kubernetes λ¦¬μ†ŒμŠ€ λͺ©λ‘ μ§€μ •
  • namespaceResourceBlacklist β†’ νŠΉμ • λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ μ œν•œν•  λ¦¬μ†ŒμŠ€ μ’…λ₯˜ μ„€μ •
  • roles β†’ RBAC(Role-Based Access Control) κ·œμΉ™μ„ μ„€μ •ν•˜μ—¬ νŠΉμ • 그룹에 κΆŒν•œ λΆ€μ—¬ κ°€λŠ₯

βœ… 2. CLIλ₯Ό μ‚¬μš©ν•œ ν”„λ‘œμ νŠΈ 생성

YAML 파일 없이 CLIλ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈλ₯Ό 생성할 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

argocd proj create example-project \
  --description "Example project for managing applications"

 

βœ… Git μ €μž₯μ†Œ ν—ˆμš© μΆ”κ°€:

argocd proj add-source example-project https://github.com/example/repo.git

 

βœ… 배포 κ°€λŠ₯ν•œ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 및 ν΄λŸ¬μŠ€ν„° μ„€μ •:

argocd proj add-destination example-project https://kubernetes.default.svc example-namespace

 

βœ… RBAC μ—­ν•  μΆ”κ°€:

argocd proj role create example-project developer
argocd proj role add-policy example-project developer --action get --object example-project/* --permission allow

πŸ”Ή Argo CD RBAC (Role-Based Access Control) μ„€μ •

Argo CD의 RBAC(Role-Based Access Control)λŠ” μ‚¬μš©μž 및 그룹의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 ν”„λ‘œμ νŠΈ 접근을 μ œν•œν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
RBAC 섀정은 argocd-rbac-cm ConfigMap을 톡해 μ •μ˜λ©λ‹ˆλ‹€.


βœ… 1. Argo CD RBAC κΈ°λ³Έ μ„€μ • (ConfigMap 방식)

RBAC 섀정은 Argo CDκ°€ μ‹€ν–‰λ˜λŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€μ˜ ConfigMap을 μˆ˜μ •ν•˜μ—¬ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-rbac-cm
  namespace: argocd
data:
  policy.default: role:readonly  # κΈ°λ³Έ μ‚¬μš©μž μ—­ν•  μ„€μ •
  policy.csv: |
    p, role:admin, applications, *, */*, allow
    p, role:developer, applications, get, example-project/*, allow
    g, alice, role:admin  # alice μ‚¬μš©μžλŠ” admin μ—­ν•  λΆ€μ—¬
    g, bob, role:developer  # bob μ‚¬μš©μžλŠ” developer μ—­ν•  λΆ€μ—¬

 

βœ… μ„€λͺ…:

  • policy.default: role:readonly β†’ 기본적으둜 λͺ¨λ“  μ‚¬μš©μžλŠ” 읽기 μ „μš© μ—­ν•  λΆ€μ—¬
  • role:admin β†’ λͺ¨λ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ 전체 κΆŒν•œ λΆ€μ—¬
  • role:developer β†’ example-project λ‚΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— λŒ€ν•œ 읽기 κΆŒν•œλ§Œ ν—ˆμš©
  • g, alice, role:admin β†’ alice μ‚¬μš©μžλŠ” κ΄€λ¦¬μž μ—­ν•  λΆ€μ—¬
  • g, bob, role:developer β†’ bob μ‚¬μš©μžλŠ” 개발자 μ—­ν•  λΆ€μ—¬

βœ… 2. RBAC μ—­ν•  및 κΆŒν•œ 확인 (CLI λͺ…λ Ήμ–΄)

βœ… ν˜„μž¬ RBAC μ •μ±… 확인:

argocd proj role list example-project

 

βœ… νŠΉμ • μ‚¬μš©μž λ˜λŠ” 그룹의 κΆŒν•œ 확인:

argocd proj role get example-project developer

 

βœ… μƒˆλ‘œμš΄ μ—­ν• (Role) μΆ”κ°€:

argocd proj role create example-project qa-engineer
argocd proj role add-policy example-project qa-engineer --action get --object example-project/* --permission allow

 

βœ… νŠΉμ • μ—­ν• (Role)에 μ‚¬μš©μž μΆ”κ°€:

argocd proj role add-group example-project qa-engineer qa-team

 

βœ… RBAC μ •μ±… 적용 ν›„ Argo CD μ„œλ²„ μž¬μ‹œμž‘:

kubectl rollout restart deployment argocd-server -n argocd

πŸ”Ή Argo CD RBAC을 ν™œμš©ν•œ λ³΄μ•ˆ κ°•ν™” μ „λž΅

βœ… 1. ν”„λ‘œμ νŠΈ(Project) 기반으둜 μ ‘κ·Ό κΆŒν•œμ„ μ œν•œ

  • κ°œλ°œνŒ€, QAνŒ€, μš΄μ˜νŒ€ λ“± νŒ€λ³„ ν”„λ‘œμ νŠΈλ₯Ό μƒμ„±ν•˜κ³ , μ—­ν• (Role)을 뢄리

βœ… 2. νŠΉμ • ν΄λŸ¬μŠ€ν„° 및 λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— λŒ€ν•œ 배포 μ œν•œ

  • 운영 ν™˜κ²½(Production)κ³Ό 개발 ν™˜κ²½(Development)을 λΆ„λ¦¬ν•˜κ³  μ ‘κ·Ό κΆŒν•œμ„ μ œμ–΄

βœ… 3. Git μ €μž₯μ†Œ μ ‘κ·Ό μ œν•œμ„ μ μš©ν•˜μ—¬ λ³΄μ•ˆ κ°•ν™”

  • νŠΉμ • Git μ €μž₯μ†Œμ—μ„œλ§Œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포할 수 μžˆλ„λ‘ μ œν•œ

βœ… 4. RBAC 정책을 μ •κΈ°μ μœΌλ‘œ μ κ²€ν•˜κ³  ν•„μš” μ‹œ μ—…λ°μ΄νŠΈ

  • 운영 쀑 λΆˆν•„μš”ν•œ κΆŒν•œμ„ μ œκ±°ν•˜κ³ , μ΅œμ†Œ κΆŒν•œ 원칙(Principle of Least Privilege)을 μ€€μˆ˜

πŸ”Ή κ²°λ‘ : 이번 κΈ€μ—μ„œ 배운 핡심 λ‚΄μš© 정리

🟒 Argo CD ν”„λ‘œμ νŠΈ(Project)λ₯Ό ν™œμš©ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ…Όλ¦¬μ μœΌλ‘œ κ·Έλ£Ήν™”ν•˜κ³  관리 κ°€λŠ₯
🟒 RBAC(Role-Based Access Control)λ₯Ό ν™œμš©ν•˜λ©΄ μ‚¬μš©μžμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 및 ν΄λŸ¬μŠ€ν„° 접근을 μ œν•œ κ°€λŠ₯
🟒 CLI 및 YAML을 μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈ 생성 및 RBAC 정책을 μ μš©ν•  수 있으며, 이λ₯Ό 톡해 λ³΄μ•ˆμ„±μ„ κ°•ν™” κ°€λŠ₯
🟒 RBAC 섀정을 톡해 νŠΉμ • Git μ €μž₯μ†Œ, λ„€μž„μŠ€νŽ˜μ΄μŠ€, ν΄λŸ¬μŠ€ν„°μ— λŒ€ν•œ 배포 κΆŒν•œμ„ μ„Έλ°€ν•˜κ²Œ μ‘°μ • κ°€λŠ₯

728x90