本文介绍如何基于阿里云Elasticsearch配置轻量目录访问协议LDAP(Lightweight Directory Access Protocol)认证,以实现相应角色的LDAP用户访问阿里云Elasticsearch。

注意事项

自2020年10月起,阿里云Elasticsearch对不同的地域进行了网络架构的调整,对创建的实例有以下影响:

  • 2020年10月之前创建的实例均在老网络架构下,即Elasticsearch实例处于用户VPC下,如果需要访问公网,可以直接采用SNAT代理服务或自建Nginx代理方式。
  • 2020年10月及之后创建的实例均为新网络架构下,LDAP功能受到网络限制,为解决此问题,您可以使用PrivateLink进行VPC网络打通,具体配置请参见配置实例私网连接。如果您需要访问公网,则需要配置Nginx代理进行请求转发。
  • 老网络架构下,阿里云Elasticsearch仅支持单可用区的LDAP认证,不支持多可用区,新网络架构不受此限制。

前提条件

您已完成以下操作:

配置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.ldap1.type: ldap
xpack.security.authc.realms.ldap1.order: 0
xpack.security.authc.realms.ldap1.url: "ldap://ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389"
xpack.security.authc.realms.ldap1.bind_dn: "cn=zhang lei,ou=support,dc=yaobili,dc=com"
xpack.security.authc.realms.ldap1.bind_password: 123456
xpack.security.authc.realms.ldap1.user_search.base_dn: "ou=support,dc=yaobili,dc=com"
xpack.security.authc.realms.ldap1.user_search.filter: "(cn={0})"
xpack.security.authc.realms.ldap1.group_search.base_dn: "ou=support,dc=yaobili,dc=com"
xpack.security.authc.realms.ldap1.unmapped_groups_as_roles: false
参数 说明
type 设置域。此处必须设置为ldap
url 指定LDAP服务器URL及端口。ldap协议表示使用普通连接,端口为389;ldaps表示使用SSL安全连接,端口为636。
说明 新网络架构下需要指定为终端节点域名:端口,本文以ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389为例。
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组的名称都将用作角色名称分配给用户。

配置完成后,需要单击确定重启实例。更多参数的详细信息,请参见Security settings in Elasticsearch

为域账号信息映射角色

执行如下命令,映射LDAP下的zhang*账户为管理员角色。
POST _xpack/security/role_mapping/ldap_super_user1?pretty
{
  "roles": [ "superuser" ],
  "enabled": true,
  "rules": {
    "any": [
      {
        "field": {
          "username": "zhang*"
        }
      }
    ]
  }
}

结果验证

使用已授权的zhang lei账户登录阿里云Elasticsearch的Kibana。登录Kibana
执行以下命令。
PUT _cluster/settings
{
  "persistent": {
    "action.auto_create_index": true
  }
}
返回如下结果,则测试成功。返回结果