πΉ 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 μ μ₯μ, λ€μμ€νμ΄μ€, ν΄λ¬μ€ν°μ λν λ°°ν¬ κΆνμ μΈλ°νκ² μ‘°μ κ°λ₯