그라파나

일반 OAuth 인증

구일칠구 2022. 7. 13. 17:19

일반 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 공급자를 쿼리하여 사용자의 이메일 주소를 확인합니다.

  1. emailOAuth id_token매개변수 에 인코딩된 필드 를 통해 이메일 주소가 있는지 확인하십시오 .
  2. 구성 옵션 을 통해 지정된 JMESPath 를 사용하여 전자 메일 주소가 있는지 확인합니다 . 경로 조회에 사용되는 JSON은 구성 옵션 email_attribute_path을 통해 지정된 UserInfo 끝점을 쿼리하여 얻은 HTTP 응답 입니다. 참고 : Grafana v6.4+에서만 사용할 수 있습니다.api_url
  3. OAuth 매개변수 attributes로 인코딩된 맵 에 이메일 주소가 있는지 확인하십시오 . id_token기본적으로 Grafana는 키를 사용하여 속성 맵에 대한 조회를 수행 하지만 이는 구성 가능하며 구성 옵션 email:primary을 사용하여 조정할 수 있습니다 .email_attribute_name
  4. /emailsOAuth 공급자 API( 로 구성됨)의 끝점을 쿼리한 api_url다음 기본 주소로 표시된 이메일 주소가 있는지 확인합니다.
  5. (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구성 옵션 을 사용하여 사용자 로그인을 사용자 정의합니다 . 작업 순서는 다음과 같습니다.

  1. login_attribute_pathGrafana 는 ID 토큰에 대해 JMESPath 표현식을 평가합니다 .
  2. 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 설정

  1. Auth0에서 새 클라이언트 만들기
    • 이름: 그라파나
    • 유형: 일반 웹 애플리케이션
  2. 설정 탭으로 이동하여 다음을 설정합니다.
    • 허용된 콜백 URL:https://<grafana domain>/login/generic_oauth
  3. 변경 사항 저장을 클릭한 다음 페이지 상단의 값을 사용하여 Grafana를 구성합니다.
  4. [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 설정

  1. Centrify 대시보드에서 새로운 Custom OpenID Connect 애플리케이션 구성을 생성합니다.
  2. 기억할 수 있는 고유 애플리케이션 ID(예: "grafana", "grafana_aws" 등)를 만듭니다.
  3. 기타 기본 구성(이름, 설명, 로고, 카테고리) 입력
  4. 신뢰 탭에서 긴 암호를 생성하여 OpenID Connect 클라이언트 암호 필드에 입력합니다.
  5. "Resource Application URL" 필드에 Grafana 인스턴스의 첫 페이지 URL을 입력합니다.
  6. https://your-grafana-server/login/generic_oauth와 같은 승인된 리디렉션 URI를 추가합니다.
  7. 다른 Centrify 앱과 마찬가지로 권한, 정책 등을 설정합니다.
  8. 다음과 같이 Grafana를 구성합니다.
  9. [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 설정

  1. 다음 설정으로 새 사용자 지정 커넥터를 만듭니다.
    • 이름: 그라파나
    • 로그인 방법: OpenID Connect
    • 리디렉션 URI:https://<grafana domain>/login/generic_oauth
    • 서명 알고리즘: RS256
    • 로그인 URL:https://<grafana domain>/login/generic_oauth
    그 다음에:
  2. Grafana 커넥터에 앱 추가:
    • 표시 이름: 그라파나
    그 다음에:
  3. Grafana 앱 세부 정보 페이지의 SSO 탭에서 클라이언트 ID와 클라이언트 암호를 찾을 수 있습니다.다음과 같이 Grafana를 구성합니다.
  4. [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 =
        
    세게 때리다
  5. OneLogin 도메인은 OneLogin에 액세스하는 데 사용하는 URL과 일치합니다.

JMESPath 예제

적절한 JMESPath 표현식의 구성을 쉽게 하기 위해 http://jmespath.org/ 에서 사용자 정의 페이로드로 표현식을 테스트/평가할 수 있습니다 .

역할 매핑

role_attribute_path속성이 역할을 반환하지 않으면 기본적으로 사용자에게 역할이 할당 됩니다 Viewer. 를 설정하여 역할 할당을 비활성화할 수 있습니다 role_attribute_strict = true. 역할이 없거나 유효하지 않은 역할이 반환되면 사용자 액세스를 거부합니다.

기본 예:

다음 예에서 사용자는 Editor인증할 때 역할로 가져옵니다. role역할이 적절한 Grafana 역할(예 Viewer: Editor또는 )인 경우 속성 값은 결과 역할이 됩니다 Admin.

유효 탑재량:

{
  ...
  "role": "Editor",
  ...
  }
  
JSON

구성:

role_attribute_path = role
  
세게 때리다

고급 예:

다음 예에서 사용자는 Admin역할이 있기 때문에 인증할 때 역할을 admin받습니다. 사용자에게 역할이 있으면 역할 로 editor가져 오고 Editor그렇지 않으면 Viewer.

유효 탑재량:

{
  ...
  "info": {
  ...
  "roles": [
  "engineer",
  "admin",
  ],
  ...
  },
  ...
  }
  
JSON

구성:

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