Search

ArgoCD User

Argo CD 사용자는 local user와 SSO user로 분리됩니다. Argo CD 사용자의 목적은 사용자별로 Argo CD 권한을 제한할 수 있습니다. 관리자가 아닌 일반 사용자를 위한 계정을 생성하고 일부 권한만 제한시킬 수 있습니다.
공식문서에 소개된 것처럼, local user는 인증/인가를 제외한 다른 기능을 제공하지 않습니다. 그래서인지 Argo CD문서에서는 사용자의 기능을 강화하고 싶으면, SSO를 사용하는 것을 권장하고 있습니다.

Built-in user

Argo CD를 설치하면 관리자 권한을 갖는 admin 사용자가 있습니다. admin 사용자는 local user유형입니다.
admin 사용자의 권한은 builtin-policy.csv(https://github.com/argoproj/argo-cd/blob/master/assets/builtin-policy.csv)로 관리됩니다.
argocd account list
Shell
복사

Local User

local user는 쿠버네티스 configmap으로 관리됩니다. configmap이름은 argocd-cm입니다. 처음 설치하면 configmap에 아무런 데이터가 없습니다.
kubectl -n argocd get configmap argocd-cm
Shell
복사
User 생성
argocd-cm configmap에서 account.<계정이름>필드를 추가하면 local user이 추가됩니다. 그리고 생성한 user의 인증 방법을 설정해야 합니다. admin 사용자는 login방법만 설정되어 있습니다.
apiKey방법은 JWT토큰 인증을 허용합니다.
login방법은 WEB UI 인증을 허용합니다.
kubectl -n argocd get configmap argocd-cm -o yaml > argocd-cm.yaml
Shell
복사
apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm namespace: argocd labels: app.kubernetes.io/name: argocd-cm app.kubernetes.io/part-of: argocd data: accounts.test: apiKey, login # <----
YAML
복사
argocd account list
Shell
복사
비밀번호 생성
생성한 test사용자을 사용하려면 비밀번호를 생성해야 합니다. 사용자 생성하면 비밀번호가 없습니다. 비밀번호를 생성하려면 argocd login명령어로 로그인한 사용자 비밀번호가 필요합니다.
argocd account update-password \ --account test \ --current-password <login한 user의 비밀번호> \ --new-password "Skill53##"
Shell
복사

권한 관리

Argo CD 권한은 역할기반(RBAC)을 따릅니다.
Role은 Global Role과 Project Role로 분류됩니다. Global Role은 Argo CD 사용자 권한을 제한합니다. Project Role은 Project 권한을 제한합니다.
Global Role
Argo CD 사용자가 할 수 있는 행동을 제한합니다. 어떤 리소스의 행동(Action)을 허용할지 거부할지를 설정합니다.
관리 방법
Global Role은 csv파일로 관리됩니다. csv파일은 쿠버네티스 configmap으로 관리됩니다.
kubectl -n argocd get configmap argocd-rbac-cm
Shell
복사
p, role:<role이름>, <리소스 종류>, <action>, <리소스 이름>, allow/deny
Markdown
복사
Example (위에서 생성한 test사용자에게 생성한 Role을 연결)
test이름을 갖는 Argo CD사용자가 default 프로젝의 모든 Appliction에만 권한을 갖도록 설정
Application을 생성하려면 프로젝트를 조회할 권한과 클러스터 조회할 권한이 필요하여 projects, clusters 조회 권한을 허용했습니다. 그리고 default의 모든 appliction의 모든 권한을 허용했습니다.
apiVersion: v1 kind: ConfigMap metadata: name: argocd-rbac-cm namespace: argocd data: # test-role은 모든 project의 모든 application 제어 권한만 갖는다. # 그리고 test사용자에 test-role을 연결시킨다. 이 설정은 global-role로 적용된다. policy.csv: | p, role:test-role, applications, *, default/*, deny p, role:test-role, projects, get, default, deny p, role:test-role, clusters, get, *, deny g, test, role:test-role
YAML
복사
모두 Deny로 설정해 값이 출력되지 않거나 에러가 발생하는 모습 확인가능
admin으로 로그인 후 시도시 정상적으로 모두 출력되는 모습 확인가능