Grafana LDAP认证配置失效,寻求合适搜索过滤器方案
解决Grafana LDAP嵌套AD组认证问题
我来帮你搞定这个嵌套AD组的Grafana LDAP认证问题,你的配置里有几个关键错误和未启用的核心配置,这就是导致认证失败的根源。下面一步步帮你修正:
1. 先修正基础语法错误
你的配置里有三处低级错误,先改掉:
- search_filter缺少闭合括号:原配置里的
"(&(objectCategory=Person)(sAMAccountName=%s)"漏掉了最后一个),正确写法是:search_filter = "(&(objectCategory=Person)(sAMAccountName=%s))" - member_of拼写错误:把
distinguisedName修正为正确的distinguishedName:member_of = "distinguishedName" - group_dn里的多余空格:
CN=Grafana- Admin里的空格要去掉,改成CN=Grafana-Admin,避免匹配不到目标组。
2. 启用嵌套组搜索配置
因为你的用户属于嵌套子组(比如sys22在Graylog组,而Graylog组是Grafana组的成员),必须用AD的LDAP_MATCHING_RULE_IN_CHAIN规则来递归查找嵌套关系。你之前注释掉的group搜索配置正是关键,现在要启用并正确配置:
# 取消注释并保留以下配置 group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)" group_search_filter_user_attribute = "distinguishedName" group_search_base_dns = ["OU=Group,OU=SE,OU=Unit,DC=corp,DC=domain,DC=com"]
这个过滤器的作用是:基于用户的distinguishedName,递归查找所有包含该用户(直接或间接通过子组)的AD组,完美适配你的嵌套组场景。
3. 完整修正后的配置
把所有修改整合后,你的LDAP配置应该是这样的:
verbose_logging = true [[servers]] host = "dc-01.corp.domain.com" port = 389 use_ssl = false ssl_skip_verify = true bind_dn = "CN=Grafana-Auth,OU=ApplicationAccount,OU=SE,OU=Admin,DC=corp,DC=domain,DC=com" bind_password = 'pass1' search_filter = "(&(objectCategory=Person)(sAMAccountName=%s))" search_base_dns = ["dc=corp,dc=domain,dc=com"] # 启用嵌套组搜索 group_search_filter = "(member:1.2.840.113556.1.4.1941:=%s)" group_search_filter_user_attribute = "distinguishedName" group_search_base_dns = ["OU=Group,OU=SE,OU=Unit,DC=corp,DC=domain,DC=com"] [servers.attributes] name = "givenName" surname = "sn" username = "sAMAccountName" member_of = "distinguishedName" email = "mail" [[servers.group_mappings]] group_dn = "CN=Grafana-Admin,OU=Access,OU=Group,OU=SE,OU=Unit,DC=corp,DC=domain,DC=com" org_role = "Admin" [[servers.group_mappings]] group_dn = "CN=Grafana-User,OU=Access,OU=Group,OU=SE,OU=Unit,DC=corp,DC=domain,DC=com" org_role = "Editor" [[servers.group_mappings]] group_dn = "*" org_role = "Viewer"
4. 调试建议
你已经开启了verbose_logging = true,可以查看Grafana的LDAP日志(通常在/var/log/grafana/grafana.log),确认:
- Grafana是否成功绑定到AD服务器
- 用户的
distinguishedName是否被正确检索到 - 嵌套组搜索是否返回了Grafana-Admin/Grafana-User组
如果还是有问题,可以用ldapsearch命令手动测试过滤器,比如先检索用户的DN:
ldapsearch -x -H ldap://dc-01.corp.domain.com:389 -D "CN=Grafana-Auth,OU=ApplicationAccount,OU=SE,OU=Admin,DC=corp,DC=domain,DC=com" -w 'pass1' -b "dc=corp,dc=domain,dc=com" "(&(objectCategory=Person)(sAMAccountName=sys22))" distinguishedName
再用返回的用户DN测试组搜索:
ldapsearch -x -H ldap://dc-01.corp.domain.com:389 -D "CN=Grafana-Auth,OU=ApplicationAccount,OU=SE,OU=Admin,DC=corp,DC=domain,DC=com" -w 'pass1' -b "OU=Group,OU=SE,OU=Unit,DC=corp,DC=domain,DC=com" "(member:1.2.840.113556.1.4.1941:=CN=sys22,OU=Users,DC=corp,DC=domain,DC=com)"
如果这个命令能返回Grafana-Admin/Grafana-User组,说明过滤器是正确的,问题就出在Grafana的配置应用上。
内容的提问来源于stack exchange,提问作者Branko
相关产品推荐
相关产品推荐

