argocd를 설치하면 원래 admin 계정은 argocd-initial-admin-secret 이라는 secret에 담겨져있다.
그래서 처음에 설치해서 이 데이터를 읽고 admin 계정의 비밀번호를 바꾸면 되는데
테스트를 하다보면 argocd를 새롭게 재설치할일이 있고 그때마다 이 데이터를 읽기가 귀찮아서 고정해서 사용하는 방법을 가이드해보려고 한다.
로컬 계정 정보 확인
argocd는 ldap이나 oidc를 이용해서 사용자를 관리할 수도 있지만 argocd자체에서 계정을 생성해서 관리할 수도 있다.
이 사용자 관리 정보는 argocd-cm configmap에 저장되어있다.
사용자 생성하기
직접 한번 새로운 사용자를 만들어보고자 한다. 처음에 argocd를 설치하고 나면 argocd-cm에는 아무런 데이터가 없는 상태이다.
이 상태에서 data에 alice를 추가해봅시다. 별도로 disable을 하지 않는 이상 이렇게 설정되면 alice라는 계정이 설정됩니다.
✰ 신규 계정 생성 명령어
kubectl patch configmap argocd-cm -n argocd --type='merge' -p='{"data": {"accounts.alice": "apiKey, login"}}'
추가후 argocd 명령어로 확인해보면 계정이 생성된 것을 확인할 수 있습니다.
✰ 신규 계정 비밀번호 설정하기
그렇다면 alice에 로그인 하기 위한 비밀번호는 어떻게 알 수 있을까?
공식 문서에서는 update-password라는 명령어를 이용해서 비밀번호 업데이트를 가이드 한다.
argocd account update-password --account alice --new-password abcdefghij
admin계정으로 로그인한 뒤 명령어를 치면 업데이트 할 수 있다.
argocd에는 redis외에는 저장소라고 할만한 곳이 없는데 비밀번호는 어디에 저장되는지 확인해보자
비밀번호는 일반적으로 secret에 저장되야 하니 secret을 살펴보면 4개의 시크릿을 확인할 수 있다.
이중에서 가장 있을 법한 argocd-secret을 읽어보면 password 정보가 들어있는 것을 확인할 수 있다. 게다가 admin에 관련한 password도 확인할 수 있다.
argocd 계정 비번 인증 방법
위의 사진의 argocd-secret들의 데이터를 보면 server.secretkey 데이터가 존재하는것을 볼 수 있다.
이 데이터는 읽어봐도 사람이 읽을 수 있는 형태의 값이 아닌 것을 확인할 수 있다.
공식 문서를 확인해보면
https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-secret-yaml/
세션 검증을 하기 위한 segnature key라는것을 알 수 있습니다. 이건 나중에 계정의 토큰을 고정시킬때 사용할 수 있는 값이다.
다시 계정 설정 쪽으로 돌아와서 보자
admin계정 세팅 쪽을 확인해보면 admin.password가 bcrypt hash값인 것을 확인할 수 있다.
bcrypt hash를 간단하게 설명하면, 이는 비밀번호를 안전하게 변환해서 저장하는 방식입니다. 쉽게 말해, 비밀번호를 알아볼 수 없는 복잡한 숫자와 문자 조합으로 바꾼다고 생각하면 됩니다. 이때 솔트(salt)라는 랜덤한 값을 추가해서, 같은 비밀번호라도 매번 다른 결과가 나오도록 만듭니다. 그래서 똑같은 비밀번호를 사용해도 해커가 쉽게 추측할 수 없게 하죠. 또한, bcrypt는 비밀번호를 알아내는 데 시간이 오래 걸리도록 설계되어 있어서, 공격자가 여러 비밀번호를 시도하는 무차별 대입 공격을 막는 데 효과적입니다.
그럼 이제 bcrypt hash를 이용해서 값을 만들어야하는데 argocd 명령어를 사용하면 쉽게 만들 수 있다.
bcrypt 비밀번호 만들기
argocd account bcrypt --password <비밀번호>
그래서 이제 이 비밀번호를 업데이트 하면 아무리 argocd를 새로 설치해도 비밀번호가 고정되게 된다
admin 계정 고정하기
argocd-secret 업데이트 하기
argocd admin 비번을 잃어버렸을 때 이렇게 업데이트 해도 변경 가능하다.
그러므로 처음에 argocd를 설치하고 argocd-initial-admin-secret secret을 삭제 해준 뒤 위의 명령어로 비밀번호를 업데이트 해주면 된다. gitops 방식으로 비밀번호를 고정하고 argocd를 설치하고자 한다면 kustomization을 통해 argocd-secret에 항상 admin.password가 고정되게 설정하면 argocd-initial-admin-secret은 생성되지 않는다.
kubectl patch secret argocd-secret -n argocd \
--type='merge' -p '{"stringData": {"admin.password": "'$( argocd account bcrypt --password <비밀번호입력> )'", "admin.passwordMtime": "'$(date -u +%FT%T'Z')'"}}'
기타 로컬 계정 비밀번호 고정하기
위의 방식으로 진행하되 업데이트하는 키가 accounts.<계정명>.password와 accounts.<계정 명>.passwordMtime을 업데이트하면 됩니다.
🚨 시크릿 변경 시 주의 점
공식 문서에서는 passwordMtime을 'date +%FT%T%Z' 으로 설정해서 입력하라고 한다. 하지만 이렇게 설정할 때 주의할 점이 서버 타임이 KST인 경우 2024-09-17T13:56:59KST 이런식으로 출력이 되는데 UTC 타임이어야 하며 마지막이 Z로 끝나야하기 때문에 위의 명령어대로 수정하는 것이 좋다.
argo-cd/docs/faq.md at master · argoproj/argo-cd
Declarative Continuous Deployment for Kubernetes. Contribute to argoproj/argo-cd development by creating an account on GitHub.
github.com
'K8S > argocd' 카테고리의 다른 글
ArgoCD에 EKS 클러스터를 등록하는 3가지 방법 (0) | 2024.09.10 |
---|---|
argocd 코드 수정을 위해 로컬에서 빌드하기 (feat OSSCA) (0) | 2024.08.17 |
argocd 플러그인(CMP) 추가로 istio 배포하기 (1) | 2024.02.11 |
argocd를 argocd로 배포하기 (gitops로 관리하기) (1) | 2024.02.10 |
argocd에 helm gitops로 배포하기 (0) | 2024.02.10 |