Keycloak 관리자 비밀번호 초기화·복구 방법
Keycloak 관리자 비밀번호를 잊었다면 등록된 이메일로 재설정하거나 서버 콘솔에서 임시 관리자를 생성해 복구할 수 있다. 이메일 재설정에는 해당 Realm의 비밀번호 찾기 기능과 SMTP 설정, 계정의 이메일 주소가 필요하다. 이메일을 사용할 수 없다면 서버에서 Keycloak을 중지하고 기존 데이터베이스 접속 정보를 이용해 임시 관리자를 생성한다. 이후 기존 관리자 비밀번호를 변경하고 로그인 확인 후 임시 계정을 삭제한다.
Keycloak 관리자 비밀번호를 잊어먹었다!
본 필자는 평소 사용하는 서비스들의 비밀번호를 전부 다르게 설정해 둔다. 관리하는 시스템들도 용도와 권한에 따라 계정을 분리하고, 비밀번호 역시 각각 다르게 설정한다. 그러다 보니 가끔 계정 이름이나 비밀번호가 생각나지 않는 경우가 생긴다.
일반적인 웹 서비스라면 비밀번호 찾기 기능을 이용하면 되지만, 직접 구축한 서비스에서 복구 수단까지 준비해 두지 않았다면 이야기가 조금 달라진다. 바로 본 필자가 AI 기반 블로그 관리 도구를 구현하며 설치한 OAuth 인증 서버, Keycloak의 이야기다.
사용자 MCP 서버를 ChatGPT와 연동하는 과정을 다시 정리하던 중이었다. 스크린샷이 필요해 Keycloak에 접속했는데, 갑자기 관리자 로그인 비밀번호가 생각나지 않았다. 차라리 일반 계정이었으면 다른 관리자 계정으로 재설정하면 될 텐데, 정작 그 일을 해야 할 관리자 암호를 잊어버렸으니 환장할 노릇이었다.
삭제하고 다시 깔아야 하나?
그나마 필자의 개인 용도라 이런 생각도 할 수 있는 거지, 실제 상용 서비스에 사용되는 놈이었다면? 생각만 해도 끔찍하다. 하지만, 다행히도 서버를 삭제하거나 재설치할 필요는 없다. 크게 두 가지 방법으로 비밀번호를 초기화할 수 있다.
Keycloak의 비밀번호를 초기화하는 방법
이메일을 이용한 Keycloak 비밀번호 초기화 설정
Keycloak에는 계정에 등록된 이메일 주소를 이용해 비밀번호를 재설정하는 기능이 있다. 로그인 화면의 Forgot Password? 링크를 클릭하고 사용자 이름이나 등록된 이메일 주소를 입력하면, 비밀번호 재설정 링크가 담긴 메일을 받을 수 있다.
이 방법을 사용하려면 사전에 다음 세 가지 설정이 완료되어 있어야 한다.
-
해당 계정이 속한 Realm에서 비밀번호 찾기 기능을 활성화해야 한다.
관리자 화면에서 해당 Realm을 선택한 다음, Realm settings → Login → Forgot password를 활성화한다.
Forgot password 설정 -
같은 Realm에 이메일 발송을 위한 SMTP 서버 접속 정보를 설정해야 한다.
Realm settings → Email에서 발신자 주소와 SMTP 서버 주소, 포트, 암호화 및 인증 정보를 설정한다.
Keycloak의 메일서버 설정 화면 -
비밀번호를 재설정할 계정에 수신 가능한 이메일 주소가 등록되어 있어야 한다.
Users에서 해당 사용자를 선택하고 이메일 주소를 확인한다. 사용자는 이 메일함에 접근해 재설정 링크를 열 수 있어야 한다.
Keycloak 사용자 생성 화면
관리자 계정도 해당 계정이 속한 Realm에서 위 조건을 갖추면 이메일로 비밀번호를 재설정할 수 있다. 예를 들어 master Realm에 있는 관리자 계정이라면, 메일 발송과 비밀번호 찾기 설정도 master Realm에 적용해야 한다.
문제는 본 필자의 Keycloak은 애초부터 개인 서비스용으로 구성한 놈이라, 이런 설정을 단 하나도 해 놓지 않았다는 점이었다. 비밀번호 찾기 기능 활성화는커녕, 정작 관리자 계정에 이메일 주소조차 등록하지 않은 상태였다.
콘솔 환경 접근을 통한 Keycloak 비밀번호 초기화 방법
Keycloak의 이메일 관련 설정이 없다고 해서 복구 방법이 없는 것은 아니다. 서버의 콘솔에 접근해 Keycloak에 임시로 신규 관리자를 추가한 다음 해당 관리자로 로그인해 본래의 관리자 계정의 비밀번호를 변경하면 된다. 이를 위해서는 다음의 정보를 알고 있어야 한다.
- Keycloak을 실행할 수 있는 콘솔 관리자 권한 계정
- Keycloak이 사용하고 있는 데이터베이스 정보와 접근 권한
다행히도 본 필자는 저 두 가지에 대해서는 잊어버리지 않고 기억하고 있었다. 복구 절차는 다음과 같다.
- Keycloak 실행 권한으로 콘솔 접속 : Keycloak 서비스를 제어하고 복구 명령을 실행할 수 있는 계정으로 서버 콘솔에 접속한다.
-
Keycloak 서비스 중지
Keycloak 서비스를 중단한다. 여러 노드로 운영하는 환경이라면 모든 Keycloak 노드를 중지해야 한다.
sudo systemctl stop keycloak -
bootstrap-admin을 이용해 임시 관리자 생성Keycloak 실행 계정의 권한으로
bootstrap-admin user명령을 실행하고, 임시 관리자 이름과 비밀번호를 설정한다.sudo bash -c 'set -e export KC_DB_URL="jdbc:mariadb://데이터베이스접속주소:포트/데이터베이스이름" export KC_DB_USERNAME="데이터베이스 사용자 ID" export KCRAW_DB_PASSWORD="데이터베이스 사용자 암호" exec runuser -u 실행계정이름 -- \ /opt/keycloak/bin/kc.sh \ bootstrap-admin user \ --username temp-admin \ --optimized' Enter password: Enter password again:새로 생성할 임시 관리자 계정의 비밀번호를 두 번 입력하면 이런저런 메시지가 출력된다. 그중 아래와 같은 메시지가 출력되면 임시 사용자인
INFO [org.keycloak.services] (main) KC-SERVICESxxxx: Created temporary admin user with username temp-admintemp-admin계정이 정상적으로 생성된 것이다. - Keycloak 서비스 재실행 : sudo systemctl start keycloak
- 임시 관리자로 로그인 : 웹 UI에서 새로 생성한 임시 관리자 계정과 비밀번호를 입력해 로그인한다.
-
기존 관리자 비밀번호 변경
관리 화면에서 기존 관리자 계정이 속한 Realm을 선택한다. Users에서 해당 계정을 찾아 Credentials 탭에서 새 비밀번호를 설정한다.
- 임시 관리자 삭제 : 기존 관리자 계정으로 로그인해 임시 관리자 계정을 삭제한다.
최후의 방법은?
데이터베이스에 접근해 수정할 권한이 있다면, 저장된 비밀번호 자격 증명을 직접 교체하는 방법도 기술적으로 가능하다. Keycloak은 설정에 따라 Argon2나 PBKDF2–HMAC–SHA512 등의 알고리즘을 사용하며, 비밀번호와 솔트, 반복 횟수 등의 매개변수를 이용해 해시값을 계산한다.
다만, 이런 방법은 공식적인 복구 절차가 아니다. 설치 버전의 저장 구조와 지원되는 알고리즘을 확인하고, 새 비밀번호에 맞는 해시값과 솔트, 연산 매개변수를 올바른 형식으로 저장해야 한다. 기존 솔트를 반드시 재사용해야 하는 것은 아니며, 평문 비밀번호만 데이터베이스에 넣는다고 해결되는 것도 아니다.
사실 이 정도 작업이 필요하다면, 서버 관리자에게 빌어 콘솔 접근 권한을 복구하거나 다른 관리자 계정으로 비밀번호를 재설정하는 편이 낫다. 욕은 좀 먹겠지만 인증 데이터를 날려버리는 것보다 낫다.
이런 방법도 사용할 수 없다면? 이제는 답이 없다. 수동으로 Brute 공격을 해 보거나 삭제하고 재설치하는 방법뿐이다.
빠져나갈 구멍 하나는 만들어 놓자
만약 본 필자가 처음부터 Keycloak을 구성하면서 이메일 관련 설정을 해 두었다면 간단하게 마무리할 수 있는 일이었다. 하지만 혼자 사용하는 시스템이니 귀찮아서 그냥 지나친 결과, 이렇게 복잡한 절차를 거쳐야만 했다. (잊어먹지 않았으면 이럴 일도 없었겠지..)
서비스마다 비밀번호를 다르게 설정하는 것은 필요하다. 다만 전부 외울 자신이 없다면 안전하게 보관할 방법도 함께 마련해야 한다. 본 필자는 종이 노트에 기록해 잘 보관해 두는 게 최선이라 생각한다. 아니면 혼자만 알고 있는 고유의 비밀번호 생성 방식을 만들고 그에 따라 암호를 설정하는 것도 방법일 것이다.
어떤 방법을 선택하든 비상시를 대비해 빠져나갈 구멍 하나는 만들어 두어야 한다. 등록한 이메일로 비밀번호를 재설정할 수 있게 해 두거나, 별도의 관리자 계정과 복구 수단을 안전하게 관리하는 식이다. 비밀번호를 잊지 않는 것만큼, 잊었을 때 다시 접근할 수 있도록 준비하는 것도 관리자의 일이다. 귀찮다고 그냥 넘어가면 나중에 훨씬 더 귀찮은 일이 되어 돌아올 수 있다.
FAQ
- Keycloak 비밀번호를 재설정하는 방법은?
- 이메일 복구 설정이 준비되어 있다면 로그인 화면의 Forgot Password? 링크에서 재설정할 수 있다. 이메일을 사용할 수 없고 서버 관리 권한이 있다면, 콘솔에서 임시 관리자를 생성한 뒤 기존 관리자 계정의 비밀번호를 변경할 수 있다.
- Keycloak 로그인 화면에 Forgot Password?가 없는 이유는?
- 해당 계정이 속한 Realm에서 비밀번호 찾기 기능이 비활성화되어 있는지 확인한다. 관리자 화면의 Realm settings → Login에서 Forgot password를 활성화하면 된다. 사용자 정의 로그인 테마를 사용하는 경우에는 테마의 링크 표시 여부도 확인해야 한다.
- Keycloak에서 지원하는 메일 서버 타입은?
- Keycloak은 SMTP 서버를 이용해 이메일을 발송한다. Realm settings → Email에서 SMTP 서버 주소, 포트, 발신자 주소, 암호화 및 인증 정보를 설정한다. 외부 SMTP 서버를 사용할 수 있으므로 자체 메일 서버를 별도로 구축할 필요는 없다.
- Keycloak 임시 관리자 생성을 위해 알고 있어야 하는 것은?
- Keycloak 서비스를 중지하고 복구 명령을 실행할 수 있는 서버 접근 권한과, 기존 데이터베이스의 접속 설정이 필요하다. 설치 경로와 Keycloak 실행 계정도 확인해야 한다. 데이터베이스 인증 정보는 직접 알고 있거나 기존 서비스의 자격 증명 전달 방식을 통해 제공할 수 있어야 한다.
- Keycloak의 여러 계정이 동일한 이메일 주소를 사용해도 되는가?
- 가능하다. 다만 같은 Realm에서 여러 계정에 동일한 이메일 주소를 등록하려면 Realm settings → Login의 Duplicate emails를 활성화해야 한다. 이메일 주소를 사용자 이름으로 사용하거나 이메일로 로그인하는 설정과는 함께 사용할 수 없으므로, 계정 구분에는 고유한 사용자 이름을 사용해야 한다.
- 관리자 권한이 없는 일반 사용자도 비밀번호를 재설정할 수 있는가?
- 가능하다. 해당 Realm의 비밀번호 찾기 기능과 SMTP 발송 설정이 준비되어 있고, 계정에 등록된 메일함에 접근할 수 있다면 관리자 권한 없이 이메일로 자신의 비밀번호를 재설정할 수 있다. 이 조건을 갖추지 못했다면 관리자에게 재설정을 요청해야 한다.
- 이메일 주소만 등록하면 비밀번호 재설정 메일을 받을 수 있는가?
- 아니다. 계정의 이메일 주소 등록 외에도 해당 Realm의 Forgot password 기능과 SMTP 서버 설정이 필요하다. 다른 Realm에 메일 발송 설정이 되어 있더라도 현재 계정이 속한 Realm에 자동으로 적용되는 것은 아니다.
- 최초 설치용 관리자 환경변수를 변경하면 기존 관리자 비밀번호도 바뀌는가?
- 아니다. 최초 설치용 관리자 생성 설정은 기존 관리자 계정의 비밀번호를 변경하는 기능이 아니다. 이미 운영 중인 서버에서 관리자 접근 권한을 잃었다면, 해당 버전에서 제공하는 bootstrap-admin 복구 절차를 사용해야 한다.
- 임시 관리자를 생성할 때 데이터베이스 접속 오류가 발생하는 이유는?
- 복구 명령에 기존 서비스와 동일한 데이터베이스 접속 설정이 전달되었는지 확인한다. systemd 서비스가 사용하는 환경변수나 자격 증명은 콘솔에서 직접 실행한 명령에 자동으로 적용되지 않을 수 있다. 특히 using password: NO라는 오류는 해당 데이터베이스 접속 시도에 비밀번호가 전달되지 않았음을 나타낸다.
- 비밀번호 복구 후 임시 관리자 계정은 그대로 두어도 되는가?
- 복구를 마치면 삭제해야 한다. 먼저 기존 관리자 계정으로 로그인해 필요한 관리 기능을 사용할 수 있는지 확인한 다음, 복구에 사용한 임시 관리자 계정을 삭제한다. 이후 이메일 재설정 등 비상시 사용할 복구 수단도 준비해 두는 것이 좋다.