3P by neo 4달전 | favorite | 댓글 1개

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를 통해 처리해야 함.
    • 클러스터 구성이 쉽지 않으며, 렐름에 제한이 있음.
    • 보안 로그인 시스템을 직접 구축하는 것은 위험하거나 어려움이 있음.