GitHub OAuth 인증 구성

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

Grafana는 사용자 ID를 검증하는 여러 인증 방법을 제공하며, 인증 구성은 어떤 사용자가 Grafana에 접근할 수 있고 어떤 로그인 방법을 쓸 수 있는지 결정해요. 또한 auth provider 통합이 반환한 정보에 기반해 Grafana 안에서 사용자 역할과 팀 멤버십을 자동 업데이트하도록 구성할 수 있어요. 이 주제는 GitHub OAuth 인증을 구성하는 방법을 설명해요.

출처: 문서

본문

Note GitHub와 다른 인증 공급자(예: Grafana.com)에서 같은 이메일 주소를 쓰면 사용자가 올바르게 매칭되도록 추가 구성이 필요해요.

시작하기 전에

GitHub OAuth 앱을 만드는 방법을 알아야 해요.

GitHub OAuth 앱 만들기

  1. GitHub 계정에 로그인해요. Profile > Settings > Developer settings에서 OAuth Apps 선택.
  2. New OAuth App 클릭.
  3. 필드를 채워요. Grafana 홈페이지 URL을 적절히 사용해요. Authorization callback URL에 https://<YOUR-GRAFANA-URL>/login/github 입력.
  4. 클라이언트 ID를 기록해요.
  5. 클라이언트 시크릿을 생성하고 기록해요.

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 구성 파일로 클라이언트 구성

  1. GitHub에 OAuth 애플리케이션을 만들어요.
  2. 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을 설정해야 할 수 있어요.)
  3. [auth.github] 섹션의 값을 업데이트해요: client_id, client_secret은 GitHub OAuth 앱과 일치해야 하고, enabledtrue로 설정해요.
  4. 역할 매핑을 구성해요.
  5. 선택적으로 팀 동기화를 구성해요.
  6. 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_mappingrole_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".

더 알아보기 (Learn more)