项目背景
使用ElasticSearch实现数据宽表,处理热交互数据,需要实现权限管控等功能,权限粒度要求精确到列。
最初考虑使用Es的SearchGuard开源插件,发现SearchGuard的LDAP功能需要使用企业版,收费的,并且权限粒度仅支持到索引和type,并不支持列;
后来采用Es提供的xpack插件,想办法处理下,就不收费了。
Es需要安装xpack插件,配置默认用户,修改elastic用户的密码为elastic,后续使用简单点
注意,本文只记录ElasticSearch结合LDAP和内置角色,实现列级别的权限管控,不管SSL和TLS加密传输
ElasticSearch、Kibana配置
/conf/elasticsearch.yml中这么添加
xpack.security.enabled: true
xpack:
security:
authc:
realms:
ldap1:
type: ldap
order: 0
url: "ldap://192.168.13.12"
bind_dn: "cn=root,dc=intelli706,dc=com" #ldap管理账户dn
bind_password: 123456 #ldap管理账户密码
user_search:
base_dn: "dc=intelli706,dc=com" #在这个目录树里面检索用户信息
attribute: uid
group_search:
base_dn: "dc=intelli706,dc=com" # 在这个目录树里面检索组信息
files:
# 下面这个是通过文件方式配置的LDAP用户域和Es内置角色的映射关系
role_mapping: "D:\\elasticsearch\\es-xpack\\esnew\\elasticsearch-6.8.0\\config\\role_mapping.yml"
unmapped_groups_as_roles: false
role_mapping.yml,可配置可不配,就放这里参考下,一般通过api配置映射关系
# Role mapping configuration file which has elasticsearch roles as keys
# that map to one or more user or group distinguished names
#roleA: this is an elasticsearch role
# - groupA-DN this is a group distinguished name
# - groupB-DN
# - user1-DN this is the full user distinguished name
#power_user:
# - "cn=admins,dc=example,dc=com"
#user:
# - "cn=users,dc=example,dc=com"
# - "cn=admins,dc=example,dc=com"
# - "cn=John Doe,cn=other users,dc=example,dc=com"
superuser:
- "cn=admin,ou=person,dc=intelli706,dc=com"
- "cn=zhangyan,ou=person,dc=intelli706,dc=com"
/conf/kibana.yml配置,主要添加了es的用户名密码
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
再启动ES和kibana后,就需要输入用户名密码才能登陆和访问ES中数据了
LDAP
搭建过程省略;
创建dn时,使用的objectClass是inetOrgPerson
rdn设置为cn=admin, sn=admin, uid=admin, userPassword=admin
使用LDAP Admin windows客户端,连接LDAP服务器,添加组(ou),和模拟用户(cn=admin),生成的dn为 cn=admin,ou=person,dc=intelli,dc=com,简单说明