配置Active Directory身份认证

本文介绍如何基于阿里云Elasticsearch配置活动目录AD(Active Directory)身份认证,以实现AD域下相应角色的用户访问阿里云Elasticsearch。

前提条件

您已完成以下操作:

  • 创建阿里云Elasticsearch实例。本文以7.10版本实例为例

    具体操作,请参见创建阿里云Elasticsearch实例

  • 准备与阿里云Elasticsearch相同专有网络下的AD域环境和数据,本文以Windows Server 2012为例。

    具体操作,请参见使用Windows实例搭建AD域本文配置的用户名称为ccy1,根域为ccy.com,如下图所示AD配置

使用限制

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

  • 旧网络架构下,如果需要访问公网,可以直接使用SNAT功能或自建Nginx代理。

  • 新网络架构下,AD功能受到网络限制,您可以使用PrivateLink进行VPC网络打通,具体配置请参见配置实例私网连接。如果您需要访问公网,则需要配置Nginx代理进行请求转发。

  • 旧网络架构下,阿里云Elasticsearch仅支持单可用区的AD认证。

说明

关于网络架构,请参见【通知】网络架构调整

操作流程

  1. 步骤一:获取终端节点域名(可选)

  2. 步骤二:配置AD认证

  3. 步骤三:为域账号映射角色

  4. 步骤四:验证结果

步骤一:获取终端节点域名(可选)

如果您创建的阿里云Elasticsearch处于新网络架构下(2020年10月及之后创建的实例属于新网络架构),需要借助PrivateLink,打通用户VPC与阿里云服务账号VPC,获取终端域名,为后续配置做准备。具体操作如下:

  1. 创建与阿里云Elasticsearch实例处于同一VPC下,且支持PrivateLink功能的负载均衡实例。
  2. 配置负载均衡实例。

    配置时,需要指定LDAP所在的服务器为后端服务器,监听端口为389。

    具体操作,请参见配置实例私网连接

  3. 创建终端节点服务。

    具体操作,请参见步骤二:创建终端节点服务

  4. 配置阿里云Elasticsearch私网互通。
  5. 获取终端节点域名。

    具体操作,请参见配置实例私网连接

    说明 请先记录获取到的节点域名,该域名会在后续配置中使用。

步骤二:配置AD认证

您可以通过Elasticsearch的安全功能与AD域通信,实现用户身份认证。安全功能基于LDAP与AD域进行通信,因此active_directory域类似于ldap域。与LDAP目录一样,AD域分层存储用户和组。AD域通过发送LDAP绑定请求,验证用户的身份。验证后,AD域会通过搜索查找对应用户在Active Directory中的条目。一旦找到该用户,AD域就会从Active Directory中用户条目的tokenGroups属性中检索该用户的组成员身份。详细信息,请参见Configuring an Active Directory realm

  • 目标阿里云Elasticsearch为6.x、7.x、8.x版本。

    在目标Elasticsearch实例的YML文件中添加如下配置,设置对应用户的AD认证。具体操作,请参见配置YML参数

  • 目标阿里云Elasticsearch为其他版本

    先尝试在目标Elasticsearch实例的YML文件中添加如下配置。如果控制台操作失败,无法触发YML配置的变更重启,再通过提交工单,将相关配置提交给技术人员帮您配置。

xpack.security.authc.realms.active_directory.my_ad.order: 2
xpack.security.authc.realms.active_directory.my_ad.domain_name: ccy.com
xpack.security.authc.realms.active_directory.my_ad.url: ldap://ep-bp1i321219*********-cn-hangzhou-h.epsrv-bp15571d5ps*********.cn-hangzhou.privatelink.aliyuncs.com:389
xpack.security.authc.realms.active_directory.my_ad.bind_dn: cc**@ccy.com
xpack.security.authc.realms.active_directory.my_ad.bind_password: your_password

参数

说明

order

进行身份验证时,检查已配置的AD域的顺序。

说明

8.x版本要求order数值唯一性,建议使用2。

domain_name

根域的名称。

url

AD域与ECS实例进行私网连接的URL及端口号,详细信息请参见Configuring an Active Directory realm

重要

新网络架构下需要设置为ldap://<终端节点域名>:<端口>,本文以ldap://ep-bp1i321219*********-cn-hangzhou-h.epsrv-bp15571d5ps*********.cn-hangzhou.privatelink.aliyuncs.com:389为例。

bind_dn

执行所有AD搜索请求的用户。

secure_bind_password

验证AD域中身份信息的密码。

步骤三:为域账号映射角色

  1. 登录目标Elasticsearch实例的Kibana控制台。

    具体操作,请参见登录Kibana控制台

    说明

    不同版本操作可能略有差别,请以实际界面为准。

  2. 根据页面提示进入Kibana主页,单击开发工具

  3. Console页签,执行如下命令,将AD域下的ccy1用户设置为管理员角色。

    PUT /_security/role_mapping/basic_users
    {
      "roles": [ "superuser" ],
      "enabled": true,
      "rules": {
        "any": [
          {
            "field": {
              "groups": "cn=ali,dc=ccy,dc=com"
            }
          },
          {
            "field": {
              "dn": "cn=ccy1,cn=ali,dc=ccy,dc=com"
            }
          }
        ]
      }
    }

步骤四:验证结果

  1. 使用已授权的ccy1用户登录目标Elasticsearch的Kibana。

  2. 根据页面提示进入Kibana主页,单击开发工具

  3. Console页签,执行如下命令,验证ccy1用户是否有执行对应操作的权限。

    GET _cat/indices

    如果ccy1用户有权限,会返回如下结果,说明AD域下ccy1用户权限设置成功。AD域配置验证结果