그라파나

LDAP 인증

구일칠구 2022. 7. 13. 13:38

LDAP 인증

Grafana의 LDAP 통합을 통해 Grafana 사용자는 LDAP 자격 증명으로 로그인할 수 있습니다. LDAP 그룹 구성원과 Grafana 조직 사용자 역할 간의 매핑을 지정할 수도 있습니다.

향상된 LDAP 인증 Grafana Cloud Advanced Grafana Enterprise 에서 사용할 수 있습니다 .

세분화된 권한으로 액세스 를 제어하는 ​​방법을 이해하려면 Grafana Enterprise 의 세분화된 액세스 제어 를 참조하십시오 .

지원되는 LDAP 서버

Grafana는 기본 LDAP v3 기능을 지원하는 내부적 으로 타사 LDAP 라이브러리 를 사용합니다. 이는 호환되는 LDAPv3 서버(예: OpenLDAP 또는 Active Directory ) 를 사용하여 LDAP 통합을 구성할 수 있어야 함을 의미 합니다 .

LDAP 활성화

LDAP 통합을 사용하려면 먼저 기본 구성 파일 에서 LDAP를 활성화 하고 LDAP 특정 구성 파일(기본값: /etc/grafana/ldap.toml)의 경로를 지정해야 합니다.

[auth.ldap]
  # Set to `true` to enable LDAP integration (default: `false`)
  enabled = true
  
  # Path to the LDAP specific configuration file (default: `/etc/grafana/ldap.toml`)
  config_file = /etc/grafana/ldap.toml
  
  # Allow sign up should almost always be true (default) to allow new Grafana users to be created (if LDAP authentication is ok). If set to
  # false only pre-existing Grafana users will be able to login (if LDAP authentication is ok).
  allow_sign_up = true
  
세게 때리다

Grafana LDAP 구성

사용 중인 LDAP 서버와 구성 방법에 따라 Grafana LDAP 구성이 다를 수 있습니다. 자세한 내용은 구성 예 를 참조하십시오.

LDAP 특정 구성 파일(ldap.toml) 예:

[[servers]]
  # Ldap server host (specify multiple hosts space separated)
  host = "127.0.0.1"
  # Default port is 389 or 636 if use_ssl = true
  port = 389
  # Set to true if LDAP server should use an encrypted TLS connection (either with STARTTLS or LDAPS)
  use_ssl = false
  # If set to true, use LDAP with STARTTLS instead of LDAPS
  start_tls = false
  # set to true if you want to skip SSL cert validation
  ssl_skip_verify = false
  # set to the path to your root CA certificate or leave unset to use system defaults
  # root_ca_cert = "/path/to/certificate.crt"
  # Authentication against LDAP servers requiring client certificates
  # client_cert = "/path/to/client.crt"
  # client_key = "/path/to/client.key"
  
  # Search user bind dn
  bind_dn = "cn=admin,dc=grafana,dc=org"
  # Search user bind password
  # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
  bind_password = "grafana"
  
  # User search filter, for example "(cn=%s)" or "(sAMAccountName=%s)" or "(uid=%s)"
  # Allow login from email or username, example "(|(sAMAccountName=%s)(userPrincipalName=%s))"
  search_filter = "(cn=%s)"
  
  # An array of base dns to search through
  search_base_dns = ["dc=grafana,dc=org"]
  
  # group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
  # group_search_filter_user_attribute = "distinguishedName"
  # group_search_base_dns = ["ou=groups,dc=grafana,dc=org"]
  
  # Specify names of the LDAP attributes your LDAP uses
  [servers.attributes]
  member_of = "memberOf"
  email =  "email"
  
세게 때리다

환경 변수 사용

환경 변수에서 TOML 구성의 변수를 보간할 수 있습니다. 예를 들어 다음과 같이 외부화할 수 있습니다 bind_password.

bind_password = "${LDAP_ADMIN_PASSWORD}"
  
세게 때리다

LDAP 디버그 보기

Grafana v6.4+에서만 사용 가능

Grafana에는 LDAP 디버그 보기가 내장되어 있어 Grafana 내에서 직접 LDAP 구성을 테스트할 수 있습니다. 글을 쓰는 현재로서는 Grafana 관리자만 LDAP 디버그 보기를 사용할 수 있습니다.

이 보기에서 현재 연결할 수 있는 LDAP 서버를 확인하고 현재 구성을 테스트할 수 있습니다.

디버그 보기를 사용하려면:

  1. LDAP 서버에 있는 사용자의 사용자 이름을 입력하십시오.
  2. 그런 다음 "실행"을 누릅니다.
  3. LDAP 인스턴스 내에서 사용자가 발견되면 매핑 정보가 표시됩니다.

묶다

바인드 및 바인드 비밀번호

기본적으로 구성에서는 바인드 DN 및 바인드 암호를 지정해야 합니다. LDAP 검색을 수행할 수 있는 읽기 전용 사용자여야 합니다. 사용자 DN이 발견되면 사용자가 제공한 사용자 이름과 암호(일반 Grafana 로그인 형식)를 사용하여 두 번째 바인딩이 수행됩니다.

bind_dn = "cn=admin,dc=grafana,dc=org"
  bind_password = "grafana"
  
세게 때리다

단일 바인드 예

가능한 모든 사용자와 일치하는 단일 바인드 표현식을 제공할 수 있는 경우 두 번째 바인드를 건너뛰고 사용자 DN에 대해 직접 바인드할 수 있습니다. 이렇게 하면 구성 파일에 bind_password를 지정하지 않을 수 있습니다.

bind_dn = "cn=%s,o=users,dc=grafana,dc=org"
  
세게 때리다

이 경우 제공을 건너뛰고 bind_password대신 어딘가에 bind_dn값을 제공하십시오. %s이것은 Grafana 로그인 페이지에 입력된 사용자 이름으로 대체됩니다. 다른 LDAP 정보(예: LDAP 그룹 및 이메일)를 검색하기 위해 LDAP 검색을 수행하려면 검색 필터 및 검색 기반 설정이 여전히 필요합니다.

POSIX 스키마

LDAP 서버가 memberOf 속성을 지원하지 않는 경우 다음 옵션을 추가하십시오.

## Group search filter, to retrieve the groups of which the user is a member (only set if memberOf attribute is not available)
  group_search_filter = "(&(objectClass=posixGroup)(memberUid=%s))"
  ## An array of the base DNs to search through for groups. Typically uses ou=groups
  group_search_base_dns = ["ou=groups,dc=grafana,dc=org"]
  ## the %s in the search filter will be replaced with the attribute defined below
  group_search_filter_user_attribute = "uid"
  
세게 때리다

그룹 매핑

에서 [[servers.group_mappings]]LDAP 그룹을 Grafana 조직 및 역할에 매핑할 수 있습니다. 이는 사용자가 로그인할 때마다 동기화되며, LDAP는 신뢰할 수 있는 소스입니다. 따라서 Grafana 조직에서 사용자의 역할을 변경하면 사용자 페이지에서 이 변경 사항은 사용자가 다음에 로그인할 때 재설정됩니다. 사용자의 LDAP 그룹을 변경하면 다음에 사용자가 로그인할 때 변경 사항이 적용됩니다.

LDAP 사용자가 일치하는 첫 번째 그룹 매핑이 동기화에 사용됩니다. 여러 매핑에 맞는 LDAP 사용자가 있는 경우 TOML 구성의 최상위 매핑이 사용됩니다.

LDAP 특정 구성 파일(ldap.toml) 예:

[[servers]]
  # other settings omitted for clarity
  
  [[servers.group_mappings]]
  group_dn = "cn=superadmins,dc=grafana,dc=org"
  org_role = "Admin"
  grafana_admin = true # Available in Grafana v5.3 and above
  
  [[servers.group_mappings]]
  group_dn = "cn=admins,dc=grafana,dc=org"
  org_role = "Admin"
  
  [[servers.group_mappings]]
  group_dn = "cn=users,dc=grafana,dc=org"
  org_role = "Editor"
  
  [[servers.group_mappings]]
  group_dn = "*"
  org_role = "Viewer"
  
세게 때리다

환경필수의설명기본

group_dn LDAP 그룹의 LDAP 고유 이름(DN)입니다. "*"전체(또는 LDAP 그룹 없음)와 일치시키려면 와일드카드( ) 를 사용할 수 있습니다 .
org_role group_dn조직 역할 "Admin"의 사용자 할당 "Editor"또는"Viewer"
org_id 아니 Grafana 조직 데이터베이스 ID입니다. 이를 설정하면 여러 group_dn이 org_role다른 org_id경우 동일한 항목에 할당될 수 있습니다. 1(기본 조직 ID)
grafana_admin 아니 언제 Grafana 서버 true의 사용자를 관리자로 설정합니다. group_dnGrafana 서버 관리자는 모든 조직 및 사용자에 대한 관리자 액세스 권한을 가집니다. Grafana v5.3 이상에서 사용 가능 false

중첩/재귀 그룹 구성원

중첩/재귀 그룹 구성원이 있는 사용자는 제출된 사용자 이름이 구성원인 그룹을 반환하는 방식으로 지원 LDAP_MATCHING_RULE_IN_CHAIN 하고 구성 하는 LDAP 서버가 있어야 합니다 .group_search_filter

구성하려면 group_search_filter:

  • group_search_base_dns일치하는 그룹이 정의되는 위치를 지정하도록 설정할 수 있습니다 .
  • 를 사용하지 않으면 group_search_base_dns이전에 정의된 search_base_dns것이 사용됩니다.

Active Directory 예:

Active Directory 그룹은 구성원의 DN(고유 이름)을 저장하므로 필터는 제출된 사용자 이름만을 기반으로 사용자의 DN을 알아야 합니다. 필터를 LDAP OR 연산자와 결합하여 여러 DN 템플릿을 검색할 수 있습니다. 두 가지 예:

group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)"
  group_search_base_dns = ["DC=mycorp,DC=mytld"]
  group_search_filter_user_attribute = "dn"
  
세게 때리다
group_search_filter = "(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])"
  group_search_filter = "(|(member:1.2.840.113556.1.4.1941:=CN=%s,[user container/OU])(member:1.2.840.113556.1.4.1941:=CN=%s,[another user container/OU]))"
  group_search_filter_user_attribute = "cn"
  
세게 때리다

AD 검색에 대한 자세한 내용은 Microsoft의 검색 필터 구문 설명서를 참조하십시오.

문제 해결 member_of을 위해 "dn"으로 변경하면 디버그가 활성화[servers.attributes] 될 때 더 정확한 그룹 구성원이 표시됩니다 .

구성 예

오픈LDAP

OpenLDAP 는 오픈 소스 디렉토리 서비스입니다.

LDAP 특정 구성 파일(ldap.toml):

[[servers]]
  host = "127.0.0.1"
  port = 389
  use_ssl = false
  start_tls = false
  ssl_skip_verify = false
  bind_dn = "cn=admin,dc=grafana,dc=org"
  bind_password = "grafana"
  search_filter = "(cn=%s)"
  search_base_dns = ["dc=grafana,dc=org"]
  
  [servers.attributes]
  member_of = "memberOf"
  email =  "email"
  
  # [[servers.group_mappings]] omitted for clarity
  
세게 때리다

여러 LDAP 서버

Grafana는 여러 LDAP 서버에서 정보 수신을 지원합니다.

LDAP 특정 구성 파일(ldap.toml):

# --- First LDAP Server ---
  
  [[servers]]
  host = "10.0.0.1"
  port = 389
  use_ssl = false
  start_tls = false
  ssl_skip_verify = false
  bind_dn = "cn=admin,dc=grafana,dc=org"
  bind_password = "grafana"
  search_filter = "(cn=%s)"
  search_base_dns = ["ou=users,dc=grafana,dc=org"]
  
  [servers.attributes]
  member_of = "memberOf"
  email =  "email"
  
  [[servers.group_mappings]]
  group_dn = "cn=admins,ou=groups,dc=grafana,dc=org"
  org_role = "Admin"
  grafana_admin = true
  
  # --- Second LDAP Server ---
  
  [[servers]]
  host = "10.0.0.2"
  port = 389
  use_ssl = false
  start_tls = false
  ssl_skip_verify = false
  
  bind_dn = "cn=admin,dc=grafana,dc=org"
  bind_password = "grafana"
  search_filter = "(cn=%s)"
  search_base_dns = ["ou=users,dc=grafana,dc=org"]
  
  [servers.attributes]
  member_of = "memberOf"
  email =  "email"
  
  [[servers.group_mappings]]
  group_dn = "cn=editors,ou=groups,dc=grafana,dc=org"
  org_role = "Editor"
  
  [[servers.group_mappings]]
  group_dn = "*"
  org_role = "Viewer"
  
세게 때리다

액티브 디렉토리

Active Directory 는 Windows 환경에서 일반적으로 사용되는 디렉터리 서비스입니다.

다음 Active Directory 서버 설정을 가정합니다.

  • IP 주소:10.0.0.1
  • 도메인:CORP
  • DNS 이름:corp.local

LDAP 특정 구성 파일(ldap.toml):

[[servers]]
  host = "10.0.0.1"
  port = 3269
  use_ssl = true
  start_tls = false
  ssl_skip_verify = true
  bind_dn = "CORP\\%s"
  search_filter = "(sAMAccountName=%s)"
  search_base_dns = ["dc=corp,dc=local"]
  
  [servers.attributes]
  member_of = "memberOf"
  email =  "mail"
  
  # [[servers.group_mappings]] omitted for clarity
  
세게 때리다

포트 요구 사항

위의 예에서 SSL이 활성화되고 암호화된 포트가 구성되었습니다. Active Directory가 SSL을 지원하지 않는 경우 enable_ssl = false및 를 변경하십시오 port = 389. Active Directory 구성 및 설명서를 검사하여 올바른 설정을 찾으십시오. Active Directory 및 포트 요구 사항에 대한 자세한 내용은 링크 를 참조하십시오 .

문제 해결

문제를 해결하고 추가 로그 정보를 얻으려면 기본 구성 파일 에서 LDAP 디버그 로깅을 활성화하십시오 .

[log]
  filters = ldap:debug

'그라파나' 카테고리의 다른 글

Azure AD OAuth2 인증  (0) 2022.07.14
일반 OAuth 인증  (0) 2022.07.13
JWT 인증  (0) 2022.07.13
인증 프록시 인증  (0) 2022.07.13
그라파나 인증  (0) 2022.07.13