GitHub OAuth 인증 구성
GitHub OAuth 인증 구성 (Configure GitHub OAuth authentication)
Grafana는 사용자 ID를 검증하는 여러 인증 방법을 제공하며, 인증 구성은 어떤 사용자가 Grafana에 접근할 수 있고 어떤 로그인 방법을 쓸 수 있는지 결정해요. 또한 auth provider 통합이 반환한 정보에 기반해 Grafana 안에서 사용자 역할과 팀 멤버십을 자동 업데이트하도록 구성할 수 있어요. 이 주제는 GitHub OAuth 인증을 구성하는 방법을 설명해요.
출처: 문서
본문
Note GitHub와 다른 인증 공급자(예: Grafana.com)에서 같은 이메일 주소를 쓰면 사용자가 올바르게 매칭되도록 추가 구성이 필요해요.
시작하기 전에
GitHub OAuth 앱을 만드는 방법을 알아야 해요.
GitHub OAuth 앱 만들기
- GitHub 계정에 로그인해요. Profile > Settings > Developer settings에서 OAuth Apps 선택.
- New OAuth App 클릭.
- 필드를 채워요. Grafana 홈페이지 URL을 적절히 사용해요. Authorization callback URL에
https://<YOUR-GRAFANA-URL>/login/github입력. - 클라이언트 ID를 기록해요.
- 클라이언트 시크릿을 생성하고 기록해요.
Grafana UI로 클라이언트 구성
Grafana Admin으로 Administration > Authentication > GitHub 페이지에서 양식을 채워 구성할 수 있어요. 구성 파일에 현재 설정이 있으면 미리 채워지고, 없으면 기본값이 표시돼요. Save 후 성공하면 적용돼요. UI 변경은 Reset으로 기본값으로 되돌릴 수 있어요.
Terraform provider로 클라이언트 구성
resource "grafana_sso_settings" "github_sso_settings" {
provider_name = "github"
oauth2_settings {
name = "Github"
client_id = "YOUR_GITHUB_APP_CLIENT_ID"
client_secret = "YOUR_GITHUB_APP_CLIENT_SECRET"
allow_sign_up = true
auto_login = false
scopes = "user:email,read:org"
team_ids = "150,300"
allowed_organizations = "[\"My Organization\", \"Octocats\"]"
allowed_domains = "mycompany.com mycompany.org"
role_attribute_path = "[login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'"
}
}
Terraform Registry에서 grafana_sso_settings 리소스 전체 참조를 확인하세요.
Grafana 구성 파일로 클라이언트 구성
- GitHub에 OAuth 애플리케이션을 만들어요.
- GitHub OAuth 앱의 callback URL을
http://<my_grafana_server_name_or_ip>:<grafana_server_port>/login/github로 설정해요. callback URL은 브라우저로 Grafana에 접근하는 완전한 HTTP 주소에/login/github경로를 붙인 것이어야 해요. (프록시 뒤에서 서빙한다면[server]섹션의root_url을 설정해야 할 수 있어요.) [auth.github]섹션의 값을 업데이트해요:client_id,client_secret은 GitHub OAuth 앱과 일치해야 하고,enabled를true로 설정해요.- 역할 매핑을 구성해요.
- 선택적으로 팀 동기화를 구성해요.
- Grafana를 재시작해요. 로그인 페이지에 GitHub 로그인 버튼이 보일 거예요.
역할 매핑 구성
skip_org_role_sync가 활성화되지 않았다면 사용자 역할은 로그인 시 GitHub에서 가져온 역할로 설정돼요. 역할은 role_attribute_path 구성 옵션의 JMESPath 표현식으로 가져와요. 서버 관리자 역할 매핑은 allow_assign_grafana_admin을 사용해요. 유효한 역할이 없으면 auto_assign_org_role이 지정한 역할을 할당해요. role_attribute_strict = true로 이 기본 할당을 비활성화할 수 있어요. org_mapping으로 GitHub 팀 멤버십에 따라 조직과 역할을 지정할 수 있어요. org_mapping과 role_attribute_path 둘 다 지정하면 더 높은 역할이 적용돼요. JMESPath 표현식을 테스트하려면 JMESPath를 참고하세요.
Org roles 매핑 예제 — 사용자가 GitHub 팀 @my-github-organization/my-github-team-1(org_foo에서 Viewer), @my-github-organization/my-github-team-2(org_bar와 org_baz에서 Editor)에 속한 경우:
org_mapping = @my-github-organization/my-github-team-1:org_foo:Viewer @my-github-organization/my-github-team-2:org_bar:Editor *:org_baz:Editor
GitHub 사용자 정보로 역할 매핑 — login이 octocat인 사용자는 Admin, 나머지는 Viewer:
role_attribute_path = [login=='octocat'][0] && 'Admin' || 'Viewer'
GitHub 팀으로 역할 매핑 — 팀 my-github-team 멤버는 Editor, 나머지는 Viewer:
role_attribute_path = contains(groups[*], '@my-github-organization/my-github-team') && 'Editor' || 'Viewer'
여러 GitHub 팀으로 역할 매핑:
role_attribute_path = contains(groups[*], '@my-github-organization/admins') && 'Admin' || contains(groups[*], '@my-github-organization/devops') && 'Admin' || contains(groups[*], '@my-github-organization/engineers') && 'Editor' || contains(groups[*], '@my-github-organization/managers') && 'Editor' || contains(groups[*], '@my-github-organization/qa') && 'Viewer' || 'None'
서버 관리자 역할 매핑:
role_attribute_path = [login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'
모든 사용자에게 한 역할 매핑:
role_attribute_path = "'Viewer'"
skip_org_role_sync = false
Grafana에서 GitHub 구성 예제
[auth.github]
enabled = true
client_id = YOUR_GITHUB_APP_CLIENT_ID
client_secret = YOUR_GITHUB_APP_CLIENT_SECRET
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
allow_sign_up = true
auto_login = false
team_ids = 150,300
allowed_organizations = ["My Organization", "Octocats"]
allowed_domains = mycompany.com mycompany.org
role_attribute_path = [login=='octocat'][0] && 'GrafanaAdmin' || 'Viewer'
팀 동기화 구성
Note Grafana Enterprise와 Grafana Cloud에서 사용 가능.
Team Sync로 GitHub 조직의 팀을 Grafana 팀에 매핑해 사용자를 적절한 팀에 자동 할당할 수 있어요. 각 사용자의 팀은 로그인 시 동기화돼요. GitHub 팀은 두 가지로 참조할 수 있어요: https://github.com/orgs/<org>/teams/<slug> 또는 @<org>/<slug>. 예: https://github.com/orgs/grafana/teams/developers 또는 @grafana/developers.
주요 구성 옵션
| 설정 | 필수 | 설명 | 기본값 |
|---|---|---|---|
enabled |
아니요 | GitHub OAuth 인증 허용 여부 | false |
client_id |
예 | GitHub OAuth 앱의 클라이언트 ID | |
client_secret |
예 | GitHub OAuth 앱의 클라이언트 시크릿 | |
auth_url |
예 | GitHub OAuth 공급자 인가 엔드포인트 | https://github.com/login/oauth/authorize |
token_url |
예 | GitHub OAuth 액세스 토큰을 얻는 엔드포인트 | https://github.com/login/oauth/access_token |
api_url |
예 | GitHub 사용자 정보를 얻는 엔드포인트 | https://api.github.com/user |
scopes |
아니요 | GitHub OAuth 스코프 목록 | user:email,read:org |
allow_sign_up |
아니요 | GitHub 로그인으로 새 Grafana 사용자 생성 허용. false면 기존 사용자만 로그인 | true |
auto_login |
아니요 | 로그인 화면 생략하고 자동 로그인 | false |
role_attribute_path |
아니요 | Grafana 역할 조회용 JMESPath 표현식 | |
role_attribute_strict |
아니요 | 역할을 추출할 수 없으면 로그인 거부 | false |
org_mapping |
아니요 | <ExternalGitHubTeamName>:<OrgIdOrName>:<Role> 매핑 목록 |
|
skip_org_role_sync |
아니요 | 사용자 역할 자동 동기화 중지 | false |
allow_assign_grafana_admin |
아니요 | Grafana 서버 관리자 역할 자동 동기화 활성화 | false |
allowed_organizations |
아니요 | 로그인에 최소 한 조직 멤버십 필요 | |
allowed_domains |
아니요 | 로그인에 최소 한 도메인 소속 필요 | |
team_ids |
아니요 | 팀 ID 정수 목록. 설정 시 주어진 팀 중 하나의 멤버여야 로그인 가능 |
Note 콜론을 포함한 JMESPath 표현식이 필요하면 전체 표현식을 따옴표로 감싸 파싱 오류를 막으세요. 예:
role_attribute_path: "role:view".