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 서버를 확인하고 현재 구성을 테스트할 수 있습니다.
디버그 보기를 사용하려면:
- LDAP 서버에 있는 사용자의 사용자 이름을 입력하십시오.
- 그런 다음 "실행"을 누릅니다.
- 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 |