# 도커 컴포즈와 엔진엑스를 활용한 키클록 SSO

> Clean Markdown view of GeekNews topic #13321. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=13321](https://news.hada.io/topic?id=13321)
- GeekNews Markdown: [https://news.hada.io/topic/13321.md](https://news.hada.io/topic/13321.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-02-12T10:31:54+09:00
- Updated: 2024-02-12T10:31:54+09:00
- Original source: [du.nkel.dev](https://du.nkel.dev/blog/2024-02-10_keycloak-docker-compose-nginx/)
- Points: 3
- Comments: 1

## Topic Body

### 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을 자신의 요구에 맞게 조정할 수 있는 유연성을 제공함.

## Comments



### Comment 23011

- Author: neo
- Created: 2024-02-12T10:31:54+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=39333360) 
- 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를 통해 처리해야 함.
  - 클러스터 구성이 쉽지 않으며, 렐름에 제한이 있음.
  - 보안 로그인 시스템을 직접 구축하는 것은 위험하거나 어려움이 있음.
