ES LDAP 集成

测试环境:

OS: CentOS Linux release 7.6.1810 (Core)

ES version:7.9.2

前期准备

ES 安装

从官网下载linux源码包 https://www.elastic.co/downloads/elasticsearch

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.9.2-linux-x86_64.tar.gz
cd elasticsearch-7.9.2
./bin/elasticsearch

启用安全功能

使用ES自带工具来实现。Encrypting communications in Elasticsearch

# cd ES-HOME-DIR
bin/elasticsearch-certutil ca
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
mv elastic-certificates.p12 config
vi config/elasticsearch.yml

针对证书,在配置文件中做修改。

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode to certificate: certificate
xpack.security.http.ssl.keystore.path: elastic-certificates.p12

设置密码

通过设置访问密码,这是elastic用户和其他一些系统内置用户的密码

bin/elasticsearch-setup-passwords auto

把密码保存下来。

验证服务

$ curl https://127.0.0.1:9200/_cat/health -k -u elastic:KofFTZGdqZ8QggP3kLJw
1606371324 06:15:24 roy-es2 green 1 1 7 7 0 0 0 0 - 100.0%

申请临时证书

这是LDAP认证需要。

Starts a 30-day trial.

curl -X POST "https://localhost:9200/_license/start_trial?acknowledge=true" -k -u elastic:KofFTZGdqZ8QggP3kLJw

配置LDAP认证

修改配置文件

目前,X-Pack集成LDAP认证支持通过以下两种配置方式:

  • 用户搜索模式。
  • 带有用户DNs特定模板的模式。

其中,用户搜索模式是最常见的操作方式。在此模式中,具有搜索LDAP目录权限的特定用户,根据X-Pack提供的用户名和LDAP属性,搜索进行身份验证的用户的DN。一旦找到,X-Pack将使用找到的DN和提供的密码,尝试绑定到LDAP服务器来验证用户,详情请参见Configure an LDAP realm

以下为LDAP管理DN的映射方式,需要在Elasticsearch的YML文件中添加如下配置。

xpack:
  security:
    authc:
      realms:
        ldap:
          ldap1:
            order: 0
            url: "ldap://10.0.1.5"
            #url: "ldaps://10.0.1.5:636"
            bind_dn: "cn=Manager, dc=roywork, dc=com"  #管理员dn
            bind_password: 123456                      #管理员密码
            user_search:
              base_dn: "dc=roywork,dc=com"            #用户搜索范围
              filter: "(cn={0})"
            group_search:
              base_dn: "dc=roywork,dc=com"
            files:
              role_mapping: "/es/elasticsearch-7.9.2/config/role_mapping.yml" #角色绑定配置文件
            unmapped_groups_as_roles: false
参数 说明
type 设置域。此处必须设置为ldap
url 指定LDAP服务器URL及端口。ldap协议表示使用普通连接,端口为389;ldaps表示使用SSL安全连接,端口为636。
bind_dn 用于绑定到LDAP并执行搜索的用户的DN,仅适用于用户搜索模式。
bind_password 用于绑定到LDAP目录的用户的密码。
user_search.base_dn 用户搜索的容器DN。
group_search.base_dn 用于搜索用户具有成员资格的容器DN。当此参数不存在时,Elasticsearch将搜索user_group_attribute指定的属性,来确定成员身份。
unmapped_groups_as_roles 默认false。如果设置为true,则任何未映射的LDAP组的名称都将用作角色名称分配给用户。

LDAP 的组/用户 与 ES roles 映射

文件形式

role_mapping.yml,可配置可不配,就放这里参考下,一般通过api配置映射关系。因为通过文件的形式需要每个node都存放一份。

superuser:
  - "cn=Manager,dc=roywork,dc=com"

API方式

Map LDAP groups to roles.

The ldap realm enables you to map LDAP users to roles via their LDAP groups, or other metadata. This role mapping can be configured via the add role mapping API or by using a file stored on each node.

使用方式

maps the LDAP admins group to both the monitoring and user roles

PUT /_security/role_mapping/admins
{
  "roles" : [ "monitoring" , "user" ],
  "rules" : { "field" : {
    "groups" : "cn=admins,dc=example,dc=com" 
  } },
  "enabled": true
}

实际使用例子

$ curl -X POST "https://localhost:9200/_xpack/security/role_mapping/users" -k -u elastic:KofFTZGdqZ8QggP3kLJw -H 'Content-Type: application/json' -d'
{
  "roles": [ "superuser" ],
  "enabled": true,
  "rules": {
    "field" : { "dn" : "*,ou=People,dc=roywork,dc=com" }              
  }
}
'

验证

$ curl "https://127.0.0.1:9200/_xpack/security/role_mapping?pretty" -k -u elastic:KofFTZGdqZ8QggP3kLJw
{
  "users" : {
    "enabled" : true,
    "roles" : [
      "superuser"
    ],
    "rules" : {
      "field" : {
        "dn" : "*,ou=People,dc=roywork,dc=com"
      }
    },
    "metadata" : { }
  }
}

测试

用LDAP 中的用户去测试连接

$ curl https://127.0.0.1:9200/_cat?pretty -k -u ldapuser2:123456
=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
....

在ldap添加一个新用户,结果同上,说明LDAP集成已经成功了。

参考

ElasticSearch结合LDAP实现权限、用户管控

elasticsearch实现与ldap对接

LDAP user authentication (官网)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容