Okta OIDC 인증 구성
Okta OIDC 인증 구성 (Configure Okta OIDC authentication)
Grafana는 사용자 ID를 검증하는 여러 인증 방법을 제공하며, 인증 구성은 어떤 사용자가 Grafana에 접근하고 어떤 로그인 방법을 쓸 수 있는지 결정해요. 이 주제는 Okta OIDC 인증을 구성하는 방법을 설명해요. Okta 작업 공간에 OIDC 앱을 만들 권한이 있어야 해요.
출처: 문서
본문
Okta 앱 만들기
- Okta Admin Console에서 Applications 메뉴의 Create App Integration 선택.
- Sign-in method로 OIDC - OpenID Connect 선택.
- Application type으로 Web Application 선택 후 Next 클릭.
- Web App Integration 구성: App integration name 입력, Grant type에서 Authorization Code와 Refresh Token 선택. Sign-in redirect URIs를 Grafana Cloud Okta 경로로
https://<YOUR_ORG>.grafana.net/login/okta(온프레미스는<grafana_server>/login/okta)로, Sign-out redirect URIs도 해당 경로로 설정. - 다음을 기록: ClientID, Client Secret, Auth URL(예:
https://<TENANT_ID>.okta.com/oauth2/v1/authorize), Token URL(.../oauth2/v1/token), API URL(.../oauth2/v1/userinfo).
Okta에서 Grafana 역할 매핑 구성
- Okta Admin Console에서 Directory > Profile Editor.
- 만든 Okta Application Profile 선택. Add Attribute로 Data Type: string, Variable Name(예:
grafana_role)의 속성 추가. Enum에서 Admin, Editor, Viewer 값을 정의.
Groups claim 구성
- Applications > Applications에서 만든 OpenID Connect 앱 선택.
- Sign On 탭 > OpenID Connect ID Token 섹션의 Edit 클릭.
- Group claim type에서 Filter 선택, Group claim filter에서
groups이름(기본)에 Matches regex를 선택하고.*추가. - Save 클릭.
- Scopes 필드에
groups스코프 포함. Terraform이나 구성 파일에서도scopes에groups포함.
Note groups 클레임을 다르게 구성한다면 groups 클레임이 문자열 배열인지 확인하세요.
(선택) User (default) Okta 프로필에 역할 속성 추가
전체 Okta 디렉토리의 모든 사용자에게 역할을 구성하려면 User (default) 프로필에 역할 속성을 추가할 수 있어요. Directory > Profile Editor > User (default) 프로필 > Add Attribute로 속성을 추가하고, Add Mapping으로 매핑(예: user.grafana_role -> grafana_role)한 뒤 사용자에 역할을 지정해요. 그런 다음 Okta 통합의 Role attribute path(role_attribute_path)를 <YOUR_ROLE_VARIABLE>(예: role_attribute_path = grafana_role)로 설정.
Grafana UI로 클라이언트 구성
Grafana Admin으로 Administration > Authentication > Okta 페이지에서 양식을 채워 구성할 수 있어요. Save 후 적용되고 Reset으로 되돌릴 수 있어요.
Terraform provider로 클라이언트 구성
resource "grafana_sso_settings" "okta_sso_settings" {
provider_name = "okta"
oauth2_settings {
name = "Okta"
auth_url = "https://<okta tenant id>.okta.com/oauth2/v1/authorize"
token_url = "https://<okta tenant id>.okta.com/oauth2/v1/token"
api_url = "https://<okta tenant id>.okta.com/oauth2/v1/userinfo"
client_id = "CLIENT_ID"
client_secret = "CLIENT_SECRET"
allow_sign_up = true
auto_login = false
scopes = "openid profile email offline_access"
role_attribute_path = "contains(groups[*], 'Example::DevOps') && 'Admin' || 'None'"
role_attribute_strict = true
allowed_groups = "Example::DevOps,Example::Dev,Example::QA"
}
}
Grafana 구성 파일로 클라이언트 구성
- Okta에서 OIDC 앱을 만들어요.
[auth.okta]섹션 구성:client_id,auth_url,token_url,api_url,enabled = true.- 다른 구성 옵션을 검토·완료. 선택: refresh token, 역할 매핑, 팀 동기화 구성.
- Grafana 재시작.
최소 동작 통합 예:
[auth.okta]
name = Okta
icon = okta
enabled = true
allow_sign_up = true
client_id = <client id>
scopes = openid profile email offline_access
auth_url = https://<okta tenant id>.okta.com/oauth2/v1/authorize
token_url = https://<okta tenant id>.okta.com/oauth2/v1/token
api_url = https://<okta tenant id>.okta.com/oauth2/v1/userinfo
role_attribute_path = grafana_role
role_attribute_strict = true
allowed_groups = "Example::DevOps" "Example::Dev" "Example::QA"
refresh token 구성
Okta 애플리케이션 설정으로 가서 General 탭의 Grant Type에서 Refresh Token 체크박스를 활성화하고, 구성 파일의 [auth.okta] 스코프에 offline_access를 추가하고 use_refresh_token을 true로 설정해요.
JWT ID 토큰 검증 구성
[auth.okta]에서validate_id_token을true로 설정.jwk_set_url을 Okta 테넌트의 JWKS 엔드포인트https://<tenant-id>.okta.com/oauth2/v1/keys로 설정.
[auth.okta]
enabled = true
validate_id_token = true
jwk_set_url = https://<tenant-id>.okta.com/oauth2/v1/keys
client_id = <client id>
client_secret = <client secret>
scopes = openid profile email groups
Caution
validate_id_token이true면jwk_set_url을 반드시 구성해야 해요.
역할 매핑 구성
skip_org_role_sync가 활성화되지 않았다면 사용자 역할은 auth provider에서 가져온 역할로 설정돼요. role_attribute_path의 JMESPath 표현식을 api_url(/userinfo OIDC 엔드포인트) 페이로드에 적용해 가져와요. 유효한 역할이 없으면 auto_assign_org_role이 지정한 역할을 할당하고, role_attribute_strict = true로 기본 할당을 비활성화. org_attribute_path와 org_mapping으로 조직과 역할을 지정할 수 있어요. Grafana 서버 관리자 역할은 allow_assign_grafana_admin으로 매핑. Okta에 만든 커스텀 속성으로 role_attribute_path = grafana_role처럼 매핑할 수 있고, 그룹 기반 매핑은 role_attribute_path = contains(groups[*], 'Example::DevOps') && 'Admin' || 'None'을 사용.
Org roles 매핑 예제 (셀프 매니지드 Grafana 전용):
org_attribute_path = groups
org_mapping = ["Group 1:org_foo:Viewer", "Group 2:org_bar:Editor", "*:3:Editor"]
팀 동기화 구성
Note Grafana Enterprise와 Grafana Cloud에서 사용 가능.
Team Sync로 Okta 그룹을 Grafana 팀에 연결할 수 있어요. Okta 그룹은 Admins나 Editors 같은 그룹 이름으로 참조해요.
주요 구성 옵션
| 설정 | 필수 | 설명 | 기본값 |
|---|---|---|---|
enabled |
아니요 | Okta OIDC 인증 활성화 | false |
client_id / client_secret |
예 | Okta OIDC 앱의 ID/시크릿 | |
auth_url |
예 | Okta OIDC 인가 엔드포인트 | |
token_url |
예 | 액세스 토큰 엔드포인트 | |
api_url |
예 | 사용자 정보 엔드포인트 | |
scopes |
아니요 | Okta OIDC 스코프 목록 | openid profile email groups |
allow_sign_up |
아니요 | Okta 로그인으로 사용자 생성 제어 | true |
auto_login |
아니요 | 자동 로그인 | false |
role_attribute_path |
아니요 | Grafana 역할 조회용 JMESPath 표현식 | |
role_attribute_strict |
아니요 | 역할 추출 실패 시 로그인 거부 | false |
org_attribute_path |
아니요 | 조직 역할 조회용 JMESPath | |
org_mapping |
아니요 | 조직·역할 매핑 목록 | |
skip_org_role_sync |
아니요 | 사용자 역할 자동 동기화 중지 | false |
allowed_groups |
아니요 | 허용 그룹 목록 | |
allowed_domains |
아니요 | 허용 도메인 목록 | |
use_pkce |
아니요 | PKCE 사용 | true |
use_refresh_token |
아니요 | refresh token 사용 | false |
validate_id_token |
아니요 | JWKS로 ID 토큰 서명 검증 | false |
jwk_set_url |
아니요 | JWT 서명 검증용 JWKS 엔드포인트 |