argocd의 로컬 계정 비밀번호 고정하기 (admin 비번 고정 방법)

 

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로 끝나야하기 때문에 위의 명령어대로 수정하는 것이 좋다. 

https://github.com/argoproj/argo-cd/blob/master/docs/faq.md#i-forgot-the-admin-password-how-do-i-reset-it

 

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