Elasticsearch学习笔记(12)

目录

配置一个文件域

您可以使用内置的file内部域管理和验证用户。关于file领域用户的所有数据存储在集群中每个节点上的两个文件中:usersusers_roles。这两个文件都位于ES_PATH_CONF中,并在启动时读取。

重要:usersusers_roles文件由节点本地管理,而不是由集群全局管理。这意味着对于一个典型的多节点集群,需要对集群中的每个节点应用完全相同的更改。

更安全的方法是将更改应用于其中一个节点,并将文件分发或复制到集群中的所有其他节点(手动或使用配置管理系统(如Puppet或Chef)。

默认情况下,file域被添加到域链中。您不需要显式地配置file域。

更多关于文件域的信息,参见 File-based user authentication

1、(可选)在elasticsearch.yml文件中在xpack.security.authc.realms命名空间下增加一个域配置其类型是file。在最低限度上,你必须设置域的type属性为file。如果要配置多个领域,还应该显式设置order属性。

例如, 下面的代码片段显示了一个文件领域配置,该配置将顺序设置为0,以便首先检查领域:

xpack:
 security:
  authc:
   realms:
    file1:
     type: file
     order: 0

2、重启Elasticsearch

3、将用户信息添加到集群中每个节点上的ES_PATH_CONF/users文件中。

users文件存储所有用户及其密码。文件中的每一行表示一个用户条目,该条目由用户名和散列和加盐的密码组成。

rdeniro:$2a$10$BBJ/ILiyJ1eBTYoRKxkqbuDEdYECplvxnqQ47uiowE7yGqvCEgj9W
alpacino:$2a$10$cNwHnElYiMYZ/T3K4PvzGeJ1KbpXZp2PfoQD.gfaVdImnHOwIuBKS
jacknich:{PBKDF2}50000$z1CLJt0MEFjkIK5iEfgvfnA6xq7lF25uasspsTKSo5Q=$XxCVLbaKDimOdyWgLCLJiyoiWpA/XDMe/xtVgn1r5Sg=

注意:为了限制凭证被盗的风险,减少凭证被盗的危害,文件域根据安全最佳实践存储密码和缓存用户凭据。默认情况下,散列版本的用户凭证存储在内存中,使用一个加盐的sha-256哈希算法和一个散列版本的密码存储在磁盘上,使用bcrypt哈希算法进行加盐和散列。使用不同的哈希算法,参见 User cache and password hash algorithmsedit.

虽然可以使用任何标准文本编辑器直接修改用户文件,我们强烈建议使用elasticsearch-users工具应用所需的更改。

重要:作为集群的管理员,您有责任确保在集群中的每个节点上定义相同的用户。Elasticsearch的安全特性没有提供任何机制来保证这一点。

4、将角色信息添加到集群中每个节点上的ES_PATH_CONF/users_roles文件中。users_roles文件存储与用户关联的角色。例如:

admin:rdeniro
power_user:alpacino,jacknich
user:jacknich

每一行将一个角色映射到与该角色关联的所有用户的逗号分隔列表。

您可以使用elasticsearch-users工具更新该文件。您必须确保对集群中的每个节点进行相同的更改。

5、(可选)修改users文件和users_roles文件的检查频次。
默认情况下,Elasticsearch每5秒检查这些文件的更改。您可以通过更改elasticsearch.yml文件中的resource.reload.interval.high设置来更改此默认行为(由于这是弹性搜索中的常见设置,更改其值可能会影响系统中的其他调度)。

配置一个LDAP域

您可以通过与轻量级目录访问协议(LDAP)服务器通信来配置Elasticsearch来验证用户。要与LDAP集成,需要配置ldap域并将LDAP组映射到用户角色。

更多关于LDAP域的信息,参见LDAP User Authentication

1、确定要使用哪种模式。ldap域支持两种操作方式,用户搜索模式和带有用户DNs特定模板的模式。

LDAP用户搜索是最常见的操作模式。在这个模式中,具有搜索LDAP目录权限的特定用户用于根据提供的用户名和LDAP属性搜索身份验证用户的DN。一旦找到,将通过使用找到的DN和提供的密码尝试绑定到LDAP服务器来验证用户。

如果LDAP环境为用户使用一些特定的标准命名条件,则可以使用用户DN模板来配置域。这种方法的优点是,不需要执行搜索就可以找到用户DN。但是,可能需要多个绑定操作来找到正确的用户DN。

2、使用用户搜索配置一个ldap域:
  a.在elasticsearch.yml文件中在xpack.security.authc.realms命名空间下增加一个类型为ldap的域配置。至少,你必须设置域的typeldap,指定LDAP服务的url,并且设置user_search.base_dn到用户搜索容器DN。如果你正在配置多个领域,您还应该显式地设置order属性,以控制在身份验证期间查询领域的顺序。有关可以为LDAP领域设置的所有选项,请参见LDAP领域设置

例如,下面的代码片段显示了配置了用户搜索的LDAP域:

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          order: 0
          url: "ldaps://ldap.example.com:636"
          bind_dn: "cn=ldapuser, ou=users, o=services, dc=example, dc=com"
          user_search:
            base_dn: "dc=example,dc=com"
            filter: "(cn={0})"
          group_search:
            base_dn: "dc=example,dc=com"
          files:
            role_mapping: "ES_PATH_CONF/role_mapping.yml"
          unmapped_groups_as_roles: false

bind_dn用户的密码应该通过向Elasticsearch密钥存储区添加适当的secure_bind_password设置来配置。例如,下面的命令为上面的示例域添加密码:

bin/elasticsearch-keystore add
xpack.security.authc.realms.ldap1.secure_bind_password

重要:当你在elasticsearch.yml文件中配置域时,只有您指定的领域用于身份验证。如果你也想使用nativefile域,你必须在域链里包含它们。

3、使用用户DN模板配置ldap域:
  a.在elasticsearch.yml文件中在xpack.security.authc.realms命名空间下增加一个类型为ldap的域配置。至少,你必须设置域的typeldap,并使用user_dn_templates选项指定至少一个模板。如果你正在配置多个领域,您还应该显式地设置order属性,以控制在身份验证期间查询领域的顺序。有关可以为LDAP领域设置的所有选项,请参见LDAP领域设置

例如,下面的代码片段显示了使用用户DN模板配置的LDAP域:

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          order: 0
          url: "ldaps://ldap.example.com:636"
          user_dn_templates:
            - "cn={0}, ou=users, o=marketing, dc=example, dc=com"
            - "cn={0}, ou=users, o=engineering, dc=example, dc=com"
          group_search:
            base_dn: "dc=example,dc=com"
          files:
            role_mapping: "/mnt/elasticsearch/group_to_role_mapping.yml"
          unmapped_groups_as_roles: false

重要:bind_dn设置在模板模式中不被使用。所有LDAP操作都作为身份验证用户运行。

4、(可选)配置安全特性如何与多个LDAP服务器交互。load_balance.type设置可以在领域级别使用。Elasticsearch安全特性支持故障转移和负载平衡操作模式。参见 LDAP realm settingsedit

5、(可选)为了保护密码,加密Elasticsearch和LDAP服务器之间的通信(encrypt communications between Elasticsearch and the LDAP server)

6、重启elasticsearch

7、将LDAP组映射到角色。

ldap域允许您通过ldap组或其他元数据将ldap用户映射到角色。可以通过添加角色映射API或使用存储在每个节点上的文件来配置此角色映射。当用户使用LDAP进行身份验证时,该用户的特权是由用户映射到的角色定义的所有特权的联合。

在映射定义中,可以使用组的专有名称指定组。例如,下面的映射配置将LDAPadmins组映射到monitoringusers角色,并将users组映射到user角色。

通过权限映射API配置:

curl -X PUT "localhost:9200/_xpack/security/role_mapping/admins" -H 'Content-Type: application/json' -d'
{
 "roles" : [ "monitoring" , "user" ],
 "rules" : { "field" : {
  "groups" : "cn=admins,dc=example,dc=com"   #1
 } },
 "enabled": true
}
'

#1admins组的LDAP专有名称(DN)

curl -X PUT "localhost:9200/_xpack/security/role_mapping/basic_users" -H 'Content-Type: application/json' -d'
{
 "roles" : [ "user" ],
 "rules" : { "field" : {
  "groups" : "cn=users,dc=example,dc=com"   #1
 } },
 "enabled": true
}
'

#1users组的LDAP专有名称(DN)

或者,也可以通过角色映射文件配置:

monitoring: #1
 - "cn=admins,dc=example,dc=com" #2
user:
 - "cn=users,dc=example,dc=com" #3
 - "cn=admins,dc=example,dc=com"

#1:映射角色的名称。
#2admins组的LDAP专有名称(DN)。
#3users组的LDAP专有名称(DN)。

更多信息,参见 Mapping LDAP Groups to RolesMapping Users and Groups to Roles

注意:LDAP领域支持授权领域作为角色映射的替代

8、(可选)在LDAP域中配置metadata设置,以便在用户的元数据中包含额外的字段。

默认情况下,ldap_dnldap_groups在用户的元数据中填充了。更多信息, 参见 User Metadata in LDAP Realms

下面的示例将用户的公共名称(cn)作为元数据中的附加字段。

xpack:
  security:
    authc:
      realms:
        ldap1:
          type: ldap
          metadata: cn

配置一个本地域

管理和验证用户的最简单方法是使用内部的native领域。

默认情况下,当没有配置其他领域时,本地领域是可用的。如果已经在elasticsearch.yml文件中配置了其他领域设置。您必须将本机领域添加到领域链。

你可以在elasticsearch.yml文件中在xpack.security.authc.realms命名空间下为native域配置其他选项。显式配置本地领域使您能够设置它在领域链中出现的顺序,暂时禁用该领域,并控制其缓存选项。

1、增加一个类型为native的域配置到elasticsearch.yml文件下的xpack.security.authc.realms命名空间下。至少,你必须设置域的typenative。如果你配置了多个域,你还应该显示地设置order属性。

参见 Native realm settings查看你可以为native域设置的所有选项。例如,例如,下面的代码片段显示了一个native领域配置,它将order设置为0,以便首先检查该领域:

xpack:
 security:
  authc:
   realms:
    native1:
     type: native
     order: 0

注意:为了限制凭证盗窃的暴露并减轻凭证的危害,本机领域根据安全最佳实践存储密码并缓存用户凭证。默认情况下,散列版本的用户凭证存储在内存中,使用一个加盐的sha-256哈希算法和一个哈希版本的密码存储在用bcrypt哈希算法加盐和散列的磁盘上。要使用不同的哈希算法,参见 User cache and password hash algorithms

2、重启elasticsearch

3、在Kibana中在Management/Security/Users页面管理你的用户。或者,使用User Management APIs

配置一个PKI域

你可以配置Elasticsearch使用公钥设置(PKI)证书来验证用户。这要求客户端提供X.509证书。

注意:不能再Kibana中使用PKI证书来认证用户。

要在ELasticsearch中使用PKI,你要配置一个PKI域,以使客户端在所需的网络层(运输层或者网络层)上身份验证,并将用户证书中的专有名称(DNs)映射到role-mapping API或角色映射文件中的角色。

您还可以使用PKI和用户名/密码身份验证的组合。例如,你可以在运输层启用SSL/TLS,并定义一个KPI域来要求运输客户端使用X.509证书认证,同时仍然使用用户名和密码凭证验证HTTP流量。你还可以设置xpack.security.transport.ssl.client_authenticationoptional来允许没有证书的客户端使用其他凭证进行身份验证。

重要:你必须启用SSL/TLS并且启用客户端认证以便使用PKI。

更多信息,参见 PKI User Authentication

1、在elasticsearch.yml文件的xpack.security.authc.realms命名空间下增加一个类型为pki的域设置。至少,你必须设置域的typepki。如果你正在配置多个域,你还应该显示地设置order属性。参见PKI realm settings查看所有你可以为一个pki域设置的所有选项。

例如, 下面的代码片段显示了最基本的pki领域配置:

xpack:
 security:
  authc:
   realms:
    pki1:
     type: pki

>使用此配置,SSL/TLS层信任的任何证书都可以接受身份验证。用户名是从证书的DN中提取的公共名称(CN)。

重要:当你在elasticsearch.yml文件中配置域时,只有你指定的域被用来认证。如果你还想使用nativefile域,你必须在域链中包含它们。

如果希望使用DN的CN以外的其他东西作为用户名,可以指定regex提取所需的用户名。例如,下面配置中的regex从DN提取电子邮件地址:

xpack:
 security:
  authc:
   realms:
    pki1:
     type: pki
     username_pattern: "EMAILADDRESS=(.*?)(?:,|$)"

2、重启Elasticsearch

3、启用SSL/TLS

4、在所需的网络层上启用客户机身份验证(传输或http)。

PKI领域依赖于节点网络接口的TLS设置。可以将领域配置为比底层网络连接更具限制性——这也就是说,可以对节点进行配置,使某些连接被网络接口接受,但随后无法通过PKI领域的身份验证。然而,反过来是不可能的。PKI域无法验证被网络接口拒绝的连接。

特别是这意味着:

  • 传输或http接口必须通过将client_authentication设置为optionalrequired来请求客户机证书。
  • 接口必须信任通过配置truststore或者certificate_authorities路径,或者通过设置verification_modenone的客户端提供的证书。参见xpack.ssl.verification_mode查看关于这个设置的解释。
  • 接口支持的协议必须与客户机使用的协议兼容。

必须将相关的网络接口(传输或http)配置为信任将在PKI领域内使用的任何证书。但是,可以配置PKI领域,只信任网络接口接受的证书的子集。当SSL/TLS层信任带有由一个不同CA签名而不是某个你自己的签名的客户机提供的证书时,这一点非常有用。

要使用自己的信任存储区配置PKI领域,请指定truststore.path选项。例如:

xpack:
security:
 authc:
  realms:
   pki1:
    type: pki
    truststore:
     path: "/path/to/pki_truststore.jks"
     password: "x-pack-test-password"

certificate_authorities选项用作为truststore.path设置的一种替代。

5、映射pki用户权限
你可以通过role mapping APIs或者使用一个存储在每个节点上的文件映射PKI用户的权限。当一个用户对PKI域进行身份验证时,该用户的特权是由用户映射到的角色定义的所有特权的联合。

您通过用户证书中的专有名称来标识用户。例如,下面的映射配置映射John Doesuser权限:
使用role-mappingAPI:

curl -X PUT "localhost:9200/_xpack/security/role_mapping/users" -H 'Content-Type: application/json' -d'
{
  "roles" : [ "user" ],
  "rules" : { "field" : {
    "dn" : "cn=John Doe,ou=example,o=com"   #1
  } },
  "enabled": true
}
'

#1:PKI用户的专有名称(DN)

或者,二选一地,在一个role-mapping文件中配置:

user: #1
 - "cn=John Doe,ou=example,o=com" #2

#1:权限的名称
#2:PKI用户的专有名称(DN)。

PKI用户的分离名称遵循X.500命名约定,其中将最特定的字段(如cn或uid)放在名称的开头,将最一般的字段(如o或dc)放在名称的末尾。一些工具,例如openssl,可能会以不同的格式打印出主题名。

确定证书正确DN的一种方法是使用authenticate API(使用相关的PKI证书作为身份验证的手段)并检查结果中的元数据字段。用户的专有名称将在pki_dn键下填充。您还可以使用authenticate API来验证角色映射。

更多信息,参见Mapping Users and Groups to Roles

注意:PKI领域支持授权领域作为角色映射的替代。

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

推荐阅读更多精彩内容

  • 目录 搭建Elasticsearch 本节包括关于如何设置Elasticsearch并使其运行的信息,包括: 下载...
    几回寒暑阅读 2,376评论 0 3
  • 今天第4次考试白天不忙的时候多看了看题晚上答题还可以有很多都答上来了
    京心达侯天祥阅读 65评论 0 0
  • 渐行渐远的景色, 遗忘着在记忆的边缘, 望着望着,突然回头一望,看见了满天的月星。 寥寥无几的安慰,就在这时,忽然...
    仙致星明阅读 314评论 1 4
  • 今天是2017年12月22日距离2018年考研还有整整一年~
    感覺不妨阅读 43评论 0 0