일반 OAuth 인증
일반 OAuth2 기능을 사용하여 Grafana로 다양한 OAuth2 인증 서비스를 구성할 수 있습니다. 예:
- 일반 OAuth 인증
- Auth0으로 OAuth2 설정
- Bitbucket으로 OAuth2 설정
- Centrify로 OAuth2 설정
- OneLogin으로 OAuth2 설정
- JMESPath 예제
- 역할 매핑
- 그룹 매핑
이 콜백 URL은 브라우저에서 Grafana에 액세스하기 위해 사용하는 전체 HTTP 주소와 일치해야 하지만 접미사가 /login/generic_oauth.
콜백 URL이 정확하려면 의 root_url옵션 을 설정해야 할 수도 있습니다 . [server]예를 들어 프록시 뒤에서 Grafana를 제공하는 경우.
구성 예:
[auth.generic_oauth]
name = OAuth
icon = signin
enabled = true
client_id = YOUR_APP_CLIENT_ID
client_secret = YOUR_APP_CLIENT_SECRET
scopes =
empty_scopes = false
auth_url =
token_url =
api_url =
allowed_domains = mycompany.com mycompany.org
allow_sign_up = true
tls_skip_verify_insecure = false
tls_client_cert =
tls_client_key =
tls_client_ca =
use_pkce = true
OpenID UserInfo 호환 정보 api_url를 반환하는 리소스로 설정 합니다.
클라이언트에서 사용하는 SSL/TLS 구성을 지정할 수도 있습니다.
- tls_client_cert인증서의 경로로 설정 합니다.
- tls_client_key키가 포함된 경로로 설정 합니다.
- tls_client_ca신뢰할 수 있는 인증 기관 목록이 포함된 경로로 설정 합니다.
tls_skip_verify_insecure클라이언트가 서버의 인증서 체인과 호스트 이름을 확인하는지 여부를 제어합니다. true인 경우 SSL/TLS는 서버에서 제공하는 모든 인증서와 해당 인증서의 호스트 이름을 수락합니다. 이 모드는 SSL/TLS가 메시지 가로채기(man-in-the-middle) 공격에 취약하기 때문에 테스트용으로만 사용해야 합니다 .
empty_scopes인증 중에 빈 범위를 사용하려면 true로 설정하십시오 . 기본적으로 Grafana는 user:email범위로 사용합니다.
이메일 주소
Grafana는 이메일 주소를 찾을 때까지 OAuth 공급자를 쿼리하여 사용자의 이메일 주소를 확인합니다.
- emailOAuth id_token매개변수 에 인코딩된 필드 를 통해 이메일 주소가 있는지 확인하십시오 .
- 구성 옵션 을 통해 지정된 JMESPath 를 사용하여 전자 메일 주소가 있는지 확인합니다 . 경로 조회에 사용되는 JSON은 구성 옵션 email_attribute_path을 통해 지정된 UserInfo 끝점을 쿼리하여 얻은 HTTP 응답 입니다. 참고 : Grafana v6.4+에서만 사용할 수 있습니다.api_url
- OAuth 매개변수 attributes로 인코딩된 맵 에 이메일 주소가 있는지 확인하십시오 . id_token기본적으로 Grafana는 키를 사용하여 속성 맵에 대한 조회를 수행 하지만 이는 구성 가능하며 구성 옵션 email:primary을 사용하여 조정할 수 있습니다 .email_attribute_name
- /emailsOAuth 공급자 API( 로 구성됨)의 끝점을 쿼리한 api_url다음 기본 주소로 표시된 이메일 주소가 있는지 확인합니다.
- (1-4) 단계에서 이메일 주소가 없으면 사용자의 이메일 주소가 빈 문자열로 설정됩니다.
역할
Grafana는 구성 옵션 을 통해 지정된 JMESPath 를 사용하여 역할의 존재를 확인합니다 . role_attribute_pathJMESPath는 id_token첫 번째에 적용됩니다. 일치하는 항목이 없으면 api_url구성 옵션을 통해 지정된 UserInfo 끝점이 다음에 시도됩니다. JMESPath 표현식 평가 후 결과 role_attribute_path는 유효한 Grafana 역할이어야 합니다(예: Viewer또는 Editor) Admin.
자세한 내용은 JMESPath 예제 를 참조하십시오 .
그룹/팀
유사하게, 그룹 매핑은 구성 옵션 과 함께 JMESPath 를 사용하여 만들어집니다. 먼저 시도한 다음 의 UserInfo가 따라 groups_attribute_path옵니다 . JMESPath 표현식의 결과는 그룹의 문자열 배열이어야 합니다.id_tokenapi_url
또한 Grafana는 구성 옵션을 통해 지정된 JMESPathteam_ids 를 사용하여 구성 옵션을 통해 지정된 팀 중 하나 이상이 있는지 확인합니다 . 경로 조회에 사용되는 JSON은 구성 옵션( 대체 엔드포인트로 사용)을 통해 지정된 Teams 엔드포인트를 쿼리하여 얻은 HTTP 응답 입니다. 결과는 Grafana 팀 ID의 문자열 배열이어야 합니다. 이 설정을 사용하면 특정 팀만 OAuth 공급자를 사용하여 Grafana에 인증할 수 있습니다.team_ids_attribute_pathteams_url/teams
로그인
login_attribute_path구성 옵션 을 사용하여 사용자 로그인을 사용자 정의합니다 . 작업 순서는 다음과 같습니다.
- login_attribute_pathGrafana 는 ID 토큰에 대해 JMESPath 표현식을 평가합니다 .
- Grafana가 값을 찾지 못하면 Grafana는 UserInfo 끝점에서 얻은 JSON 데이터에 대해 표현식을 평가합니다. UserInfo 끝점 URL은 api_url구성 옵션에 지정됩니다.
옵션 을 사용하여 반환된 OAuth 토큰에서 ID 토큰을 추출하는 데 사용되는 속성 이름을 사용자 지정할 수 있습니다 id_token_attribute_name.
name_attribute_path구성 옵션 을 사용하여 JMESPath로 사용자의 표시 이름을 설정할 수 있습니다 . login_attribute_path옵션 과 동일하게 동작합니다 .
참고: name_attribute_path Grafana 7.4 이상에서 사용할 수 있습니다.
PKCE
Grafana v8.3 이상 버전에서 사용 가능합니다.
IETF의 RFC 7636 은 일부 형태의 인증 코드 가로채기 공격에 대한 추가 보호를 도입하는 "코드 교환을 위한 증명 키"(PKCE)를 도입합니다. PKCE는 OAuth 2.1 에서 필요합니다 .
섹션 에서 로 설정 use_pkce하여 Grafana에서 PKCE를 활성화할 수 있습니다 .true[auth.generic_oauth]
use_pkce = true
Grafana는 항상 SHA256 기반 S256챌린지 방법과 128바이트(base64url 인코딩) 코드 검증기를 사용합니다.
Auth0으로 OAuth2 설정
- Auth0에서 새 클라이언트 만들기
- 이름: 그라파나
- 유형: 일반 웹 애플리케이션
- 설정 탭으로 이동하여 다음을 설정합니다.
- 허용된 콜백 URL:https://<grafana domain>/login/generic_oauth
- 변경 사항 저장을 클릭한 다음 페이지 상단의 값을 사용하여 Grafana를 구성합니다.
-
[auth.generic_oauth] enabled = true allow_sign_up = true team_ids = allowed_organizations = name = Auth0 client_id = <client id> client_secret = <client secret> scopes = openid profile email auth_url = https://<domain>/authorize token_url = https://<domain>/oauth/token api_url = https://<domain>/userinfo use_pkce = true
세게 때리다
Bitbucket으로 OAuth2 설정
[auth.generic_oauth]
name = BitBucket
enabled = true
allow_sign_up = true
client_id = <client id>
client_secret = <client secret>
scopes = account email
auth_url = https://bitbucket.org/site/oauth2/authorize
token_url = https://bitbucket.org/site/oauth2/access_token
api_url = https://api.bitbucket.org/2.0/user
teams_url = https://api.bitbucket.org/2.0/user/permissions/workspaces
team_ids_attribute_path = values[*].workspace.slug
team_ids =
allowed_organizations =
Centrify로 OAuth2 설정
- Centrify 대시보드에서 새로운 Custom OpenID Connect 애플리케이션 구성을 생성합니다.
- 기억할 수 있는 고유 애플리케이션 ID(예: "grafana", "grafana_aws" 등)를 만듭니다.
- 기타 기본 구성(이름, 설명, 로고, 카테고리) 입력
- 신뢰 탭에서 긴 암호를 생성하여 OpenID Connect 클라이언트 암호 필드에 입력합니다.
- "Resource Application URL" 필드에 Grafana 인스턴스의 첫 페이지 URL을 입력합니다.
- https://your-grafana-server/login/generic_oauth와 같은 승인된 리디렉션 URI를 추가합니다.
- 다른 Centrify 앱과 마찬가지로 권한, 정책 등을 설정합니다.
- 다음과 같이 Grafana를 구성합니다.
-
[auth.generic_oauth] name = Centrify enabled = true allow_sign_up = true client_id = <OpenID Connect Client ID from Centrify> client_secret = <your generated OpenID Connect Client Secret" scopes = openid profile email auth_url = https://<your domain>.my.centrify.com/OAuth2/Authorize/<Application ID> token_url = https://<your domain>.my.centrify.com/OAuth2/Token/<Application ID> api_url = https://<your domain>.my.centrify.com/OAuth2/UserInfo/<Application ID>
세게 때리다
OneLogin으로 OAuth2 설정
- 다음 설정으로 새 사용자 지정 커넥터를 만듭니다.
- 이름: 그라파나
- 로그인 방법: OpenID Connect
- 리디렉션 URI:https://<grafana domain>/login/generic_oauth
- 서명 알고리즘: RS256
- 로그인 URL:https://<grafana domain>/login/generic_oauth
- Grafana 커넥터에 앱 추가:
- 표시 이름: 그라파나
- Grafana 앱 세부 정보 페이지의 SSO 탭에서 클라이언트 ID와 클라이언트 암호를 찾을 수 있습니다.다음과 같이 Grafana를 구성합니다.
-
[auth.generic_oauth] name = OneLogin enabled = true allow_sign_up = true client_id = <client id> client_secret = <client secret> scopes = openid email name auth_url = https://<onelogin domain>.onelogin.com/oidc/2/auth token_url = https://<onelogin domain>.onelogin.com/oidc/2/token api_url = https://<onelogin domain>.onelogin.com/oidc/2/me team_ids = allowed_organizations =
세게 때리다 - OneLogin 도메인은 OneLogin에 액세스하는 데 사용하는 URL과 일치합니다.
JMESPath 예제
적절한 JMESPath 표현식의 구성을 쉽게 하기 위해 http://jmespath.org/ 에서 사용자 정의 페이로드로 표현식을 테스트/평가할 수 있습니다 .
역할 매핑
role_attribute_path속성이 역할을 반환하지 않으면 기본적으로 사용자에게 역할이 할당 됩니다 Viewer. 를 설정하여 역할 할당을 비활성화할 수 있습니다 role_attribute_strict = true. 역할이 없거나 유효하지 않은 역할이 반환되면 사용자 액세스를 거부합니다.
기본 예:
다음 예에서 사용자는 Editor인증할 때 역할로 가져옵니다. role역할이 적절한 Grafana 역할(예 Viewer: Editor또는 )인 경우 속성 값은 결과 역할이 됩니다 Admin.
유효 탑재량:
{
...
"role": "Editor",
...
}
구성:
role_attribute_path = role
고급 예:
다음 예에서 사용자는 Admin역할이 있기 때문에 인증할 때 역할을 admin받습니다. 사용자에게 역할이 있으면 역할 로 editor가져 오고 Editor그렇지 않으면 Viewer.
유효 탑재량:
{
...
"info": {
...
"roles": [
"engineer",
"admin",
],
...
},
...
}
구성:
role_attribute_path = contains(info.roles[*], 'admin') && 'Admin' || contains(info.roles[*], 'editor') && 'Editor' || 'Viewer'
그룹 매핑
Grafana Enterprise v8.1 이상 버전에서 사용 가능합니다.
팀 동기화를 사용하면 일반 OAuth 그룹을 Grafana의 팀에 매핑하여 사용자가 올바른 팀에 자동으로 추가되도록 할 수 있습니다.
8bab1c86-8fba-33e5-2089-1d1c80ec267d일반 OAuth 그룹은 또는 와 같은 그룹 ID로 참조할 수 있습니다 myteam.
팀 동기화에 대해 자세히 알아보기
구성:
groups_attribute_path = info.groups
유효 탑재량:
{
...
"info": {
...
"groups": [
"engineers",
"analysts",
],
...
},
...
}
'그라파나' 카테고리의 다른 글
GitHub OAuth2 인증 (0) | 2022.07.14 |
---|---|
Azure AD OAuth2 인증 (0) | 2022.07.14 |
LDAP 인증 (0) | 2022.07.13 |
JWT 인증 (0) | 2022.07.13 |
인증 프록시 인증 (0) | 2022.07.13 |