Keycloak SSO 설정하기
Keycloak SSO(Single Sign-On)를 설정하는 방법에 대해 알아보겠습니다. 설정에 앞서 Keycloak 설치가 안되었다면 다음 글을 참고하여 설치해줍니다.
또한 실습에서는 Grafana를 연동할 서비스로 설정했는데 마찬가지로 설치가 안되었다면 다음 글을 참고하여 설치해줍니다.
1. Keycloak 설정
1.1. Realm 설정
Keycloak은 설치시 기본적으로 Master realm을 제공하지만 다음과 같이 다른 realm을 관리하기 위해 사용하기 때문에 새로운 realm을 생성하여 사용해야 합니다.
좌측 상단 realm 선택 메뉴에서 'Add realm' 버튼을 클릭해줍니다.
realm명을 입력하고 'Create' 버튼을 클릭하여 생성해줍니다.
1.2. Client 설정
realm이 생성되면 client를 추가해줍니다. 실습에서는 SSO를 설정할 서비스로 Grafana를 client에 추가했습니다.
좌측에서 onfigure > Clients 메뉴로 이동하면 해당 realm에 등록된 client 목록을 확인할 수 있습니다. 우측 상단의 'Create' 버튼을 클릭해줍니다.
Client ID를 입력하고 'Save' 버튼을 클릭하여 client를 생성해줍니다.
생성된 client를 다음과 같이 설정해줍니다.
OpenID SSO 사용을 위해 설정한 항목들에 대해 정리하면 다음과 같습니다. 번역을 통해 정리한 내용이라 맞지 않는 부분이 있을 수 있습니다. 정확한 내용은 각 항목들의 tooltip을 확인해주시면 됩니다.
- Standard Flow Enabled
인증 코드를 포함한 OIDC redirect 기반의 인증 허용 여부
OAuth 2.0 스펙에 따른 인증 코드 흐름을 지원 (Authrization Code Flow) - Implicit Flow Enabled
인증 코드를 제외한 OIDC redirect 기반의 인증 허용 여부
OAuth 2.0 스펙에 따른 암시적인 흐름을 지원 (Implicit Flow) - Direct Access Grants Enabled
클라이언트의 사용자 username/password 접근 허용 및 변경 가능 여부
OAuth 2.0 스펙에 따른 리소스 소유자 자격 증명 부여를 지원 (Resource Owner Password Credential Grant) - Service Account Enabled
클라이언트의 Keycloak에 인증 및 access token 검색 허용 여부
OAuth 2.0 스펙에 따른 자격 증명 부여를 지원 (Client Credential Grant) - Authorization Enabled
클라이언트별 권한 부여 여부 - Root URL
서비스의 root url - Valid Redirect URIs
로그인/로그아웃 이후에 브라우저가 redirect하는 uri - Admin URL
클라이언트의 기본 url - Web Origins
CORS origin을 허용할 uri - Backchannel Logout Session Required
backchannel logout 사용시 logout token에 대한 session id 포함 여부
1.3. Role 설정 (Client)
Client 설정이 완료되면 Client의 Role을 설정해줍니다. 해당 클라이언트의 Roles 탭에서 'Add Role' 버튼을 클릭해줍니다.
Role name을 입력하고 'Save' 버튼을 클릭해줍니다.
1.4. Group 설정
사용자에게 적용할 Group을 설정해줍니다. 좌측에서 Manage > Groups 메뉴로 이동하고 'New' 버튼을 클릭해줍니다.
Group name을 입력하고 'Save' 버튼을 클릭해줍니다.
Group 생성 후에 Role Mappings 탭으로 이동하여 Role을 맵핑해줍니다. Client Roles 항목에서 추가한 클라이언트를 선택하고 해당 클라이언트에 설정한 Role을 선택하여 'Add selected' 버튼을 클릭해줍니다.
1.5. User 설정
마지막으로 사용자를 추가해줍니다. 좌측에서 Manage > Users 메뉴로 이동하고 'Add user' 버튼을 클릭해줍니다.
계정의 아이디로 사용될 username을 입력하고 email을 입력해줍니다. Groups 항목에서는 사용자가 속할 그룹을 선택하고 'Save' 버튼을 클릭해줍니다.
Grafana의 경우엔 email을 요구하기 때문에 필수값이 아니더라도 입력해줘야 합니다. 마찬가지로 다른 서비스를 연동하는 경우에도 사용자에 대해 요구하는 필드가 있는지 확인해줘야 합니다.
사용자가 추가되면 해당 사용자의 상세 화면에서 Credentials 탭으로 이동합니다. 여기서는 사용자의 비밀번호를 설정해줍니다.
2. SSO 연동 서비스 설정
Keycloak 설정이 완료되면 SSO를 연동할 서비스를 설정해줘야 합니다. 앞서 Keycloak Client에 추가한 Grafana를 대상으로 설정한 내용입니다.
2.1. Grafan OAuth 설정
Grafana 설치에 사용할 values.yaml 파일을 열어서 다음과 같이 수정해줍니다.
vi values.yaml
...
## Grafana's primary configuration
## NOTE: values in map will be converted to ini format
## ref: http://docs.grafana.org/installation/configuration/
##
grafana.ini:
...
server:
domain: ${GRAFANA_URL}
root_url: http://${GRAFANA_URL}
auth.generic_oauth:
enabled: true
name: keycloakOAuth
allow_sign_up: true
client_id: grafana
client_secret: ${GRAFANA_SECRET}
scopes: openid profile email
auth_url: http://${KEYCLOAK_URL}/auth/realms/monitoring/protocol/openid-connect/auth
token_url: http://${KEYCLOAK_URL}/auth/realms/monitoring/protocol/openid-connect/token
api_url: http://${KEYCLOAK_URL}/auth/realms/monitoring/protocol/openid-connect/userinfo
auth:
disable_login_form: false
oauth_auto_login: false
security:
allow_embedding: true
cookie_secure: false
cookie_samesite: lax
users:
auto_assign_org: true
auto_assign_org_role: Admin
...
grafana.ini > auth.generic_oauth > client_secret 항목에 작성할 값은 Keycloak Console에서 확인할 수 있습니다. 다음과 같이 Keycloak에 등록한 클라이언트의 상세 화면에서 Credentials 탭으로 이동하면 Secret 값을 확인할 수 있는데 이 값을 작성해줍니다.
수정이 완료되면 저장하고 서비스에 적용해줍니다.
$ helm upgrade grafana grafana/grafana -f values.yaml --namespace monitoring
3. Keycloak SSO 확인
설정이 모두 완료되면 브라우저에서 Grafana Web UI를 접속해줍니다. 로그인 화면에서 다음과 같이 keycloakOAuth 로그인 버튼이 나타난 것을 확인할 수 있습니다.
Grafana의 OAuth 로그인을 실행해보면 Keycloak을 통해 OIDC 로그인이 정상적으로 이루어지는 것을 확인할 수 있습니다.
이상으로 Keycloak SSO를 설정하는 방법에 대해 알아봤습니다.
※ Reference
- www.jacobbaek.com, Grafana login using Keycloak Oauth, https://www.jacobbaek.com/1243
- league-cat.tistory.com, [sso / keycloak] keycloak 을 통한 google sso login, https://league-cat.tistory.com/396
- oingdaddy.tistory.com, KeyCloak으로 Springboot App연동해서 간단하게 SSO 구축하기, https://oingdaddy.tistory.com/196
- oingdaddy.tistory.com, KeyCloak OAuth2를 활용해서 SSO 로그인 하기 (google), https://oingdaddy.tistory.com/252