GN⁺: 도커 컴포즈와 엔진엑스를 활용한 키클록 SSO
(du.nkel.dev)Keycloak SSO 설정: Docker Compose와 Nginx 사용
- Keycloak은 오픈 소스이며 주요 SSO 프로토콜과 호환되는 신뢰할 수 있는 아이덴티티 및 액세스 관리 솔루션임.
- Docker Compose를 사용한 설정은 복잡하지 않으나 직관적이지는 않아, 설정 과정을 요약하여 제공함.
개념
- Nginx를 중앙 리버스 프록시로 사용하여 로컬호스트를 통해 개별 서비스로 트래픽을 전달하는 표준 설정을 사용함.
- 단일 호스트의 리소스를 공유하면서 환경을 최대한 격리하는 경제적인 설정으로 간주됨.
준비사항
- 기본 도구(SSH, 리눅스가 설치된 VM, 도메인 또는 서브도메인)가 필요함.
- Docker rootless 설정을 위해 비밀번호 없는 새로운 non-root 사용자 'keycloak'을 생성하고,
/etc/subuid
및/etc/subgid
범위를 업데이트하며, Docker rootless를 설치하고 자동 서비스 시작을 구성함.
Keycloak 설정
- 새로 생성된 keycloak 사용자로 로그인하고, 영구 데이터와 도커 파일을 위한 디렉토리를 생성함.
- 공식 문서를 참고하여
docker-compose.yml
을 작성하고,.env
파일에 민감하고 변동적인 정보를 입력함.
로컬에서 테스트
- Docker Compose 스택을 테스트하고, VM에 대한 리버스 SSH 터널을 생성한 후, 브라우저에서 Keycloak 환영 화면을 확인함.
Nginx 설정
- 시스템 리버스 프록시로 Nginx를 설정하고, Keycloak 서비스를 위한 새로운 Nginx
.conf
파일을 생성함. - 도메인 등록기에서 VM의 IP로 DNS 쿼리를 전달하도록 A 레코드를 추가함.
디버그
-
.tld.com
을 열어 admin 사용자로 Keycloak에 로그인하고, Docker Compose 로그와 Nginx 액세스 및 에러 로그를 확인함. - 필요한 경우 Keycloak 데이터베이스를 확인함.
Dockerfile을 사용한 사용자 정의 빌드
- quay.io의 사전 빌드 이미지를 사용하는 대신, Dockerfile을 사용하여 자체 이미지를 빌드함.
- Docker Compose를 다시 시작하여 이미지를 빌드하고 서비스를 시작함.
결론
- Rootless Docker 뒤에 시스템 Nginx 리버스 프록시를 사용하여 Keycloak 서비스를 실행 중임.
- Docker 컨테이너의 자동 업데이트, Keycloak 서비스 로그인 및 이메일 추가, 영역 추가, 테마 추가 등이 다음 단계임.
GN⁺의 의견:
- 보안 중요성: 웹의 현재 상태는 보안과 관련된 취약점을 따라잡기 어렵게 만들기 때문에, Keycloak과 같은 신뢰할 수 있는 솔루션을 사용하는 것이 중요함.
- 효율적인 아키텍처: 단일 호스트에서 리소스를 공유하면서도 환경을 격리하는 방식은 비용 효율적이며 관리가 용이함.
- 사용자 정의 가능성: Dockerfile을 사용한 사용자 정의 빌드는 Keycloak을 자신의 요구에 맞게 조정할 수 있는 유연성을 제공함.
Hacker News 의견
-
Authelia를 선택한 사용자의 의견:
- Keycloak은 기능이 많지만 설정이 복잡하고 추가 서비스가 필요함.
- Authelia는 사용자 인터페이스가 없고 LDAP 서버와 양방향 동기화가 안 되지만, 정적 파일과 환경 변수로 설정 가능하여 많은 경우에 적합함.
- 단순한 인증과 SSO가 필요하다면 Authelia 시작을 권장함.
-
JetBrains Hub와 Keycloak 사용 경험 및 Dex 선택한 사용자의 의견:
- JetBrains Hub는 설정이 매우 쉬움, Docker 이미지의 최신 태그 부재가 불편함.
- Keycloak은 개발 모드에서는 쉽지만, 실제 운영 환경에서 설정이 어려움.
- 결국 문서화가 부족하지만 설정이 간단한 Dex를 선택함.
- OAuth2 Proxy와 Nginx 템플릿을 결합하여 SSO 구성을 간소화함.
- 보안을 위해 Cloudflare Access와 WAF를 추가함.
-
OpenID Connect 서버 비교 표를 만든 사용자의 의견:
- Keycloak 코드베이스의 크기에 놀람.
-
Keycloak의 보안 문제에 대한 사용자의 의견:
- Keycloak의 CVE(공개 취약점)를 보면 보안 문제에 대한 우려가 있음.
-
AWS ECS에서 Keycloak을 구현한 경험을 공유한 사용자의 의견:
- Keycloak은 오랜 기간 동안 많은 변화를 겪음.
- 클러스터링에 어려움이 있었으며, 특히 DNS 발견과 UDP를 통한 클러스터 발견에 문제가 있었음.
- 상태 유지 로그인이 서버 간에 일치하지 않아 로드 밸런싱이 어려웠음.
-
Keycloakify에 대한 긍정적인 언급을 한 사용자의 의견:
- Keycloakify는 Keycloak에 대한 훌륭한 대안으로 보임.
-
Authelia와 Keycloak을 비교한 사용자의 의견:
- Authelia가 매력적으로 보이지만, Keycloak이 Angular 커넥터를 제공하여 시작하기 쉬움.
-
Keycloak을 사용한 경험을 공유한 사용자의 의견:
- Keycloak은 설정이 복잡하고 문서화가 부족하지만, Terraform을 사용하여 쉽게 배포하고 관리할 수 있음.
-
Zitadel을 사용해본 사용자의 의견:
- Keycloak은 초보자에게 혼란스러울 수 있으며, Zitadel이 사용하기 더 쉬움.
-
Keycloak 사용의 어려움을 토로한 사용자의 의견:
- Keycloak은 비밀번호 재설정 링크를 직접 제공하지 않고 API를 통해 처리해야 함.
- 클러스터 구성이 쉽지 않으며, 렐름에 제한이 있음.
- 보안 로그인 시스템을 직접 구축하는 것은 위험하거나 어려움이 있음.