Home [통합 인증/권한 서버 구현 프로젝트] 1. Keycloak
Post
Cancel

[통합 인증/권한 서버 구현 프로젝트] 1. Keycloak

시작하면서

이전 포스팅에서 말한 OAuth 2.0의 네가지 주체 중 Authorization Server이자 IAM 서버의 구현을 위해 사용한 오픈 소스인 Keycloak에 대해서 소개해보고자 합니다.

Keycloak 이란?

조금 더 자세한 Keycloak의 장점은 공식 홈페이지에서도 확인할 수 있습니다.

Keycloak은 IAM 서버가 가져야 할 수 많은 기능들을 제공할 수 있도록 지원해주는 JAVA 기반의 오픈소스입니다. 그렇기 때문에 OAuth 2.0 기반의 SSO, Social Login는 기본적으로 제공하고 있으며 이에 더해 다음과 같은 추가적인 장점들을 활용해 볼 수 있습니다.

Admin Console UI

Keycloak은 자체만으로 하나의 서비스로 동작하며 서버를 실행만 시킨다면 자체적으로 제공해주는 UI를 사용할 수 있습니다. UI를 통해 좀 더 편리하게 User에 대한 정보를 관리하거나 여러 설정들을 수정할 수 있다는 장점이 있습니다.

OAuth 2.0 기반의 서비스 제공

앞서 설명했던 OAuth 2.0 프로토콜을 지키는 인증/인가 서비스 구현하기 위해선 꽤 복잡하고 어려운 로직을 만들어내야 합니다. 하지만 Keycloak은 이미 OAuth 2.0는 물론 OIDC 기반의 인증, 인가 로직을 제공합니다. 이를 통해 좀 더 쉽고 간편하게 로그인 기능을 구현할 수 있습니다.

Authorization Service

Keycloak에선 인증 뿐만 아니라 세부적인 접근 권한을 설정해 각각의 User가 접근할 수 있는 서비스의 범위를 제어할 수 있습니다. 이를 지원하는 기능을 Authorization Service라고 하며 이 또한 Keycloak이 미리 구성한 방식을 토대로 간편하게 구현 및 적용해볼 수 있습니다.

다양한 Extension 지원

Keycloak에서 제공하는 기능을 통해서만 IAM 서버를 구성할 경우, 커스텀하게 추가 구현하고 싶은 부분이 있더라도 이를 반영하는 것은 어려울 것입니다. Keycloak은 이러한 사용자들의 니즈를 파악해 여러 Extension을 제공하고 있습니다. 구체적인 내용은 다음 링크를 통해 확인해볼 수 있습니다.

Keycloak을 선택한 이유

Keycloak 말고도 IAM 서버 구현을 위해선 다른 선택지들도 존재합니다. Spring Security를 통해 직접 구현을 할 수 있을 것이고 Okta와 같은 솔루션을 도입해볼 수도 있을 것입니다.

그러나 그러한 수 많은 방법들 중에서 저희가 Keycloak을 선택한 이유는 다음과 같습니다.

  • 무료로 사용할 수 있는 오픈소스이다.
  • UI를 제공해주기 때문에 사용하기에 편리하다.
  • 제공하는 기능들을 보았을 때, 우리가 요구하는 IAM 서버의 수준으로 활용하기에 충분하다.
  • 필요하다면 Extension을 통해 커스텀 구현이 대부분 가능하다. 확장성도 충분하다.
  • 이미 많은 개발자들이 IAM 서버 구현을 위해 했던 고민들에 대한 해답들이 녹아져 있는 오픈소스이다.
  • Keycloak 사용 방법을 익히는 것 또한 높은 허들을 가진다고 보일 수 있다. 그럼에도 불구하고 IAM의 모든 기능들 직접 구현하는 것보다 훨씬 허들이 낮고 빠른 방법이다.

정리하자면 복잡한 형태의 IAM 서버 구현을 위해서 비용적인 측면에서는 물론 구현 기간까지 단축시키기에 가장 적합하다고 판단했고 선택해 활용해보지 않을 이유가 없었습니다.

Keycloak을 활용 방법

그렇다면 저희가 구현하고자 했던 IAM 서버의 수준에서 Keycloak이 어떻게 활용되었는지 보겠습니다.

Custom Login Theme 적용

Keycloak이 제공하는 Extension 서비스를 통해 저희 서비스 만의 로그인 화면을 재구성할 수 있었고, 필요에 따라서는 고객에 따라 다른 테마를 적용할 수 있었습니다. 이를 직접 구현하기 위해선 BE, FE 모두 고려해야 할 사항이 많은데 Keycloak은 이를 적용시킬 수 있는 서비스를 이미 제공하고 있기에 좀 더 쉽고 빠르게 적용할 수 있었습니다.

다양한 로그인 인증 방식 제공

고객에 따라서 이메일을 통한 2차 인증을 할지, 핸드폰을 통한 2차 인증을 할 지 등 각기 다른 로그인 인증 절차를 제공해야 할 수 있어야 했습니다. 이를 위해 Keycloak은 커스텀한 인정 절차 로직을 구현하고 조건에 따라 조합할 수 있는 Extension 기능을 제공하고 있었고 이를 활용해 저희가 원하는 수준의 인증 방식을 구현할 수 있었습니다.

멀티 테넌시 적용

멀티 테넌시란 하나의 자원 내에서 여러 사용자들이 독립적으로 저장 및 관리되기 위해 구분시키는 것을 의미합니다. 멀티 테넌시는 데이터 보안적인 측면에서 매우 중요한 개념이기 때문에 이를 엄격하게 지켜야만 하는 요구사항이 있었는데 Keycloak이 이를 지원해주고 있었습니다.

Keycloak 내부적으로 realm이란 단위로 멀티 테넌시를 적용할 수 있었지만 realm 자체를 사용자 별로 제공해주기에는 비용이 매우 비효율적으로 사용될 것이라 판단해 Organization Extension을 통해 하나의 realm 안에서 organization이라는 이름으로 멀티 테넌시를 적용할 수 있도록 구성했습니다.

RBAC, PBAC 적용

실제 많은 서비스들은 모든 사용자에게 동일한 권한과 기능을 제공하지 않습니다. 사용자 계정별로 가지는 책임과 권한에 따라 접근할 수 있는 자원이나 API는 다를 수 있고 이를 구분하기 위한 장치가 분명 필요할 것입니다.

이러한 접근 권한 제어 체계를 구성하는데 적용되는 개념이 RBAC, ABAC, PBAC 등이 있습니다.

이 중에서 Keycloak은 Role을 기반으로 권한을 부여하는 RBAC와 Policy를 기반으로 권한을 부여하는 PBAC를 적용할 수 있는 Authorization Service를 제공해주고 있었습니다. 이를 활용해 단순히 인증을 통해 서비스에 접근 가능한 사용자에게 세분화된 제어 관리 체계를 구축할 수 있었습니다.

결론

이미 구현이 완료된 시점에서 정리를 위해 이 시리즈를 시작했고 직접 활용해보고 있는 입장에서 Keycloak이 에족하는 장점들은 더 많다고 생각합니다. 위에서 말한 것처럼 통합적으로 회원을 관리하고 가장 안전한 방식으로 동작하는 인증/인가 기능을 구현하기에는 충분하다고 생각합니다.

그러나 상황에 맞게 가장 적합한 방법을 선택하는 것이 베스트이기에 이 글을 통해 Keycloak을 반드시 도입해야 한다는 생각은 하지 않으셨으면 좋겠습니다.상황에 따라 좀 더 단순하고 간단한 형태의 IAM 서버를 구현하고자 하거나 커스텀한 형태의 구현 방식이 필요한다면 Spring security과 같은 라이브러리를 활용할 수도 있고, 빠른 도입을 원한다면 유료 솔루션을 사용하는 것이 적절한 방법일 것이 될 수 있습니다. 이 글은 Keycloak을 도입하고자 하는 분들이 하시는 고민에 대한 참고서 정도로 활용되기를 바랍니다.

다음 글은 Keycloak을 통해 구현한 IAM 서버와 통신하면서 Resource Owner 즉, 사용자를 대신해 인증 인가에 대한 권한을 얻는 Client는 어떻게 구현했는지 알아보겠습니다.

참고자료

  • https://www.keycloak.org/
  • https://www.keycloak.org/extensions.html
  • https://www.styra.com/blog/what-is-rbac-vs-abac-vs-pbac/
This post is licensed under CC BY 4.0 by the author.