Keycloak OAuth 인증 구성

Keycloak OAuth 인증 구성 (Configure Keycloak OAuth authentication)

Keycloak은 오픈 소스 ID·접근 관리 솔루션이에요. Keycloak OAuth를 Grafana의 인증 공급자로 구성하면, Keycloak으로 사용자 인증과 권한을 중앙 집중화할 수 있어요. 이 주제는 Grafana 구성에서 Keycloak OAuth2/OIDC 클라이언트를 설정하는 단계를 안내해요.

출처: 문서

본문

시작하기 전에

  • Keycloak 관리자 콘솔 접근 권한과, Grafana에 사용할 Keycloak 클라이언트를 만들어야 해요.

Keycloak 클라이언트 만들기

  1. Keycloak 관리자 콘솔에 로그인.
  2. 원하는 Realm을 선택하고 Clients로 이동.
  3. Create client 클릭.
  4. Client ID 입력(예: grafana). Client authentication을 켜고, Valid redirect URIs에 http://<YOUR-GRAFANA-URL>/login/grafana-cloud(또는 설정에 맞는 경로)를 추가.
  5. 사용할 OIDC/OAuth2 설정(grant types 등)을 완료.

Grafana 구성 파일로 클라이언트 구성

Keycloak OAuth 활성화

[auth.grafana_com]
# Keycloak을 OIDC로 사용하려면 grafana_com 대신 [auth.generic_oauth]를 쓰는 경우가 많아요.

Keycloak은 완전한 OIDC 공급자이므로 Grafana의 Generic OAuth 통합을 쓰는 것이 가장 일반적이에요:

[auth.generic_oauth]
enabled = true
name = Keycloak
allow_sign_up = true
client_id = YOUR_KEYCLOAK_CLIENT_ID
client_secret = YOUR_KEYCLOAK_CLIENT_SECRET
scopes = openid profile email
auth_url = https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/auth
token_url = https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/token
api_url = https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/userinfo

여기서 <KEYCLOAK_URL>은 Keycloak 서버 주소, <REALM>은 사용하는 realm 이름이에요. auth_url, token_url, api_url은 Keycloak realm의 OIDC 엔드포인트로, Keycloak Admin Console의 Realm settings > Endpoints에서 정확한 URL을 확인할 수 있어요.

PKCE

OAuth 2.1과 보안 모범 사례에 따라 use_pkce = true를 설정해 Proof Key for Code Exchange를 활성화하는 것이 좋아요.

클레임·역할 매핑

사용자 역할을 매핑하려면 role_attribute_path에 JMESPath 표현식을 설정해요. 예를 들어 Keycloak이 토큰에 realm_access.roles 배열을 주면:

role_attribute_path = contains(realm_access.roles[*], 'grafana-admin') && 'Admin' || contains(realm_access.roles[*], 'grafana-editor') && 'Editor' || 'Viewer'

그룹 기반 역할 매핑이라면 groups 배열을 사용할 수 있어요. 조직 간 역할·조직 매핑은 org_mapping으로 지정해요.

Grafana UI로 클라이언트 구성

Grafana Admin으로 Administration > Authentication > OAuth 페이지(또는 사용 중인 통합 페이지)에서 양식을 채워 구성할 수 있어요. 구성 파일에 현재 설정이 있으면 양식이 미리 채워져요. Save 후, Reset으로 되돌릴 수 있어요.

Terraform provider로 구성

grafana_sso_settings 리소스로 구성할 수 있어요:

resource "grafana_sso_settings" "keycloak_sso_settings" {
  provider_name = "generic_oauth"
  oauth2_settings {
    name      = "Keycloak"
    auth_url  = "https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/auth"
    token_url = "https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/token"
    api_url   = "https://<KEYCLOAK_URL>/realms/<REALM>/protocol/openid-connect/userinfo"
    client_id = "YOUR_KEYCLOAK_CLIENT_ID"
    client_secret = "YOUR_KEYCLOAK_CLIENT_SECRET"
    allow_sign_up = true
    scopes = "openid profile email"
    use_pkce = true
  }
}

Team Sync

Note Grafana Enterprise와 Grafana Cloud에서 사용 가능.

Team Sync로 Keycloak 그룹을 Grafana 팀에 매핑할 수 있어요. Grafana 팀의 External group sync 탭에서 외부 그룹 ID를 설정해요. Keycloak을 Generic OAuth로 쓸 때 그룹 클레임을 얻으려면 groups 스코프를 추가하고, Keycloak 쪽에서 토큰에 그룹 클레임이 포함되도록 mapper를 설정해야 해요.

더 알아보기 (Learn more)