本文介绍如何基于阿里云Elasticsearch配置活动目录AD(Active Directory)身份认证,以实现AD域下相应角色的用户访问阿里云Elasticsearch。
前提条件
您已完成以下操作:
创建阿里云Elasticsearch实例。本文以7.10版本实例为例
具体操作,请参见创建阿里云Elasticsearch实例。
准备与阿里云Elasticsearch相同专有网络下的AD域环境和数据,本文以Windows Server 2012为例。
本文配置的用户名称为ccy1,根域为ccy.com。
使用限制
自2020年10月起,阿里云Elasticsearch对不同地域进行了网络架构的调整,对创建的实例有以下影响:
旧网络架构下,如果需要访问公网,可以直接使用SNAT功能或自建Nginx代理。
新网络架构下,AD功能受到网络限制,您可以使用PrivateLink进行VPC网络打通,具体配置请参见配置实例私网连接。如果您需要访问公网,则需要配置Nginx代理进行请求转发。
旧网络架构下,阿里云Elasticsearch仅支持单可用区的AD认证。
关于网络架构,请参见【通知】网络架构调整。
操作流程
步骤一:获取终端节点域名(可选)
如果您创建的阿里云Elasticsearch处于新网络架构下(2020年10月及之后创建的实例属于新网络架构),需要借助PrivateLink,打通用户VPC与阿里云服务账号VPC,获取终端域名,为后续配置做准备。具体操作如下:
- 创建与阿里云Elasticsearch实例处于同一VPC下,且支持PrivateLink功能的负载均衡实例。
具体操作,请参见步骤一:创建并配置负载均衡实例。
配置负载均衡实例。
配置时,需要指定LDAP所在的服务器为后端服务器,监听端口为389。
具体操作,请参见配置实例私网连接。
- 创建终端节点服务。
具体操作,请参见步骤二:创建终端节点服务。
- 配置阿里云Elasticsearch私网互通。
具体操作,请参见步骤三:配置阿里云ES私网连接。
- 获取终端节点域名。
具体操作,请参见配置实例私网连接。
说明 请先记录获取到的节点域名,该域名会在后续配置中使用。
步骤二:配置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。 重要 新网络架构下需要设置为 |
bind_dn | 执行所有AD搜索请求的用户。 |
secure_bind_password | 验证AD域中身份信息的密码。 |
步骤三:为域账号映射角色
登录目标Elasticsearch实例的Kibana控制台。
具体操作,请参见登录Kibana控制台。
说明不同版本操作可能略有差别,请以实际界面为准。
根据页面提示进入Kibana主页,单击开发工具。
在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" } } ] } }
步骤四:验证结果
使用已授权的ccy1用户登录目标Elasticsearch的Kibana。
根据页面提示进入Kibana主页,单击开发工具。
在Console页签,执行如下命令,验证ccy1用户是否有执行对应操作的权限。
GET _cat/indices
如果ccy1用户有权限,会返回如下结果,说明AD域下ccy1用户权限设置成功。