ArgoCD는 RBAC을 활용하여 사용자의 계정 및 권한을 설정한다.

 

공식 가이드 : https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/

 

RBAC Configuration - Argo CD - Declarative GitOps CD for Kubernetes

RBAC Configuration The RBAC feature enables restriction of access to Argo CD resources. Argo CD does not have its own user management system and has only one built-in user admin. The admin user is a superuser and it has unrestricted access to the system. R

argo-cd.readthedocs.io

 

Admin 권한을 가지는 admin 계정이 이미 존재하는 경우, 다른 권한을 가진 계정 생성 방법에 대해 알아보겠다.

 

현재 계정 목록 조회

먼저 현재 계정 목록을 조회 하기 위하여 아래와 같이 admin 계정으로 로그인한다.

$ argocd login <hostname> --username admin --grpc-web-root-path --password <admin-password>

계정 목록을 조회한다.

$ argocd account list

 

새로운 계정 추가

admin이 아닌 새로운 계정을 추가한다.

argocd 설치시 함께 설치되는 configmap 중 argocd-cm 에서 추가할 수 있다.

현재의 argocd-cm configmap 설정을 아래와 같이 yaml 형태로 저장한다.

$ kubectl get configmap argocd-cm -n argocd -o yaml > argocd-cm.yml

저장한 argocd-cm configmap 에 신규 계정을 추가한다.

data:
  accounts.<new-username>: apiKey, login

신규 계정 추가 후 변경된 configmap을 클러스터에 반영한다.

$ kubectl apply -f argocd-cm.yml

추가된 user의 비밀번호를 변경한다. 이때, current-password로 앞에서 로그인 하였던 admin password를 입력한다.

$ argocd account update-password --account <new-username> --current-password <admin-password> --new-password <new-password> --grpc-web

추가된 계정을 확인한다.

$ argocd account list

 

계정의 권한 변경

신규 추가되는 계정은 기본적으로 read-only 권한을 가지게 된다.

argocd에서는 제공하는 정책이 있는데, admin과 read-only 정책이다.

좀더 세부화된 권한을 설정해보겠다.

configmap중 argocd-rbac에서 권한 설정이 가능하다. 아래와 같이 argocd-rbac.yml 파일을 저장한다.

$ kubectl get configmap argocd-rbac-cm -n argocd -o yaml > argocd-rbac.yml

 

적용하려는 권한(role)과 정책(poilicy)을 추가한다.

data:
  policy.csv: |
    p, role:app-admin, applications, *, */*, allow
    p, role:app-admin, clusters, get, *, allow
    p, role:app-admin, repositories, get, *, allow
    g, <new-user>, role:app-admin
  policy.default: role:''
  • app-admin이라는 role에 application의 모든 권한을 모든 project에 대해 부여한다.
  • app-admin이라는 role에  cluster의 get 권한을 모든 클러스터에 대해 부여한다.
  • app-admin이라는 role에 repository의 get 권한을 모든 repository에 대해 부여한다.
  • g, <new-user>, role:app-admin → <new-user>에 app-admin 권한을 적용한다.
  • policy.default: role:' ' :  default 권한인 read-only 를 적용하지 않는다.

변경된 rbac을 적용한다.

$ kubectl apply -f argcd-rbac.yml

 

적용가능한 권한(builtin-policy)은 아래 링크에서 확인 가능하다.

https://github.com/argoproj/argo-cd/blob/master/assets/builtin-policy.csv

'cloudnative' 카테고리의 다른 글

Terraform 기본  (0) 2023.01.03