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

前提条件

您已完成以下操作:

使用限制

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

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

操作流程

  1. 步骤一:配置AD认证
  2. 步骤二:为域账号映射角色
  3. 步骤三:验证结果

步骤一:配置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版本,可参见配置YML参数,在目标Elasticsearch实例的YML文件中添加如下配置,设置对应用户的AD认证。如果为7.x版本,则需要通过提交工单,将相关配置提交给技术人员帮您配置。
xpack.security.authc.realms.active_directory.my_ad.order: 0
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: ccy1@ccy.com
xpack.security.authc.realms.active_directory.my_ad.secure_bind_password: your_password
参数 说明
order 进行身份验证时,检查已配置的AD域的顺序。
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控制台
    说明 本文以阿里云Elasticsearch 7.10.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 根据页面提示进入Kibana主页,单击右上角的Dev tools
  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主页,单击右上角的Dev tools
  3. Console页签,执行如下命令,验证ccy1用户是否有执行对应操作的权限。
    GET _cat/indices
    如果ccy1用户有权限,会返回如下结果,说明AD域下ccy1用户权限设置成功。AD域配置验证结果