通过LDAP接入Elasticsearch集群
LDAP(Light Directory Access Portocol)是基于X.500标准的轻量级目录访问协议。基于LDAP协议的LDAP服务可以提供用户身份验证的能力。CSS服务通过使用Opendistro的Security插件,在集群中加入Active Directory作为身份验证后端,使集群无缝接入到LDAP服务中。本文会讲解CSS集群接入LDAP认证的基本方式,并会讲解基本原理。
本文介绍如何在CSS服务的Elasticsearch集群中配置轻量目录访问协议LDAP认证,以实现相应角色的LDAP用户接入Elasticsearch集群。
约束限制
仅Elasticsearch 7.10.2版本的安全集群支持通过LDAP接入集群。
准备工作
- 已经在CSS服务上准备好一个Elasticsearch安全模式的集群,且集群处于可用状态。
- 已准备好和Elasticsearch集群在同VPC下的LDAP服务和用户数据。具体操作请参见OpenLDAP官方文档。
接入集群
- 在弹性云服务器ECS上安装LDAP服务,如果已提前准备好LDAP服务和用户数据,则可以跳过该步骤。
- 创建ECS。ECS需要选择Windows系统,且和CSS服务的安全集群在同一个虚拟私有云和安全组中。ECS的Windows Server自带支持LDAP协议的Active Directory服务。
具体操作请参见快速购买和使用Windows ECS。
- 登录ECS开启Active Directory服务,新建域、管理员、用户和用户组。
图1 Active Directory服务目录1
图2 Active Directory服务目录2
- “test.ldap.com”:新建域的示例名称。
- “adminAD”:管理员用户
- “ITDepartment”: LDAP用户目录
- “groups”: 每一个用户对应一个权限组。
- 创建ECS。ECS需要选择Windows系统,且和CSS服务的安全集群在同一个虚拟私有云和安全组中。ECS的Windows Server自带支持LDAP协议的Active Directory服务。
- 在CSS服务上修改Elasticsearch安全集群的参数配置,在“elasticsearch.yml”中配置静态参数后才可以连接LDAP服务。
- 登录云搜索服务管理控制台。
- 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
- 在集群列表,单击需要修改参数配置的集群名称,进入集群基本信息页面。
- 在左侧导航栏选择“参数配置”,单击“编辑”,在“自定义”模块添加如下参数配置。
- 参数名称:opendistro_security.unsupported.restapi.allow_securityconfig_modification
- 参数值:true
- 添加完成后,单击上方的“提交”弹出“提交配置”窗口,确认参数无误后勾选“参数修改后需要手动重启才能生效”,单击“确定”。
当下方的参数修改列表显示“作业状态”为“成功”时,表示修改保存成功。系统最多显示20条修改记录。
- 返回集群列表,单击集群操作列的“更多 > 重启”重启集群,使修改的配置生效。
- 如果修改了参数配置,未重启集群,则在“集群管理”页面的“任务状态”栏显示为“配置未更新”。
- 如果修改后重启集群,“任务状态”显示“配置错误”,则表示修改参数配置文件失败。
- 在CSS服务上配置集群的自定义路由,确保集群可以正常访问LDAP服务。
集群的自定义路由功能是白名单功能,如果有需求,请先提工单申请权限。
- 登录云搜索服务管理控制台。
- 在左侧导航栏选择“集群管理”,进入对应类型的集群列表。
- 在集群列表,单击需要修改参数配置的集群名称,进入集群基本信息页面。
- 在基本信息页面找到“集群路由”,单击“修改”配置路由信息。
- “IP地址”:填写LDAP服务器的子网。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网。“子网掩码”:填写LDAP服务器的子网掩码。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网掩码。
- “更改类型”:选择“添加”。
- 单击“确定”完成配置。
- 在Elasticsearch安全集群中配置LDAP认证。
- 登录云搜索服务管理控制台。
- 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
- 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,登录Kibana页面。
- 选择左侧导航栏的“Dev Tools”,进入操作页面。
- 执行如下命令配置LDAP认证。
- X.500目录协议(包含LDAP)的相关定义:
- CN = Common Name
- OU = Organizational Unit
- DC = Domain Component
- DN = Distinguished Name
其中,CN、OU、DC必须按顺序一一对应,否则无法认证。
- 配置文件主要分为两个部分“authc”和“authz”。
- authc(authentication,认证):主要作用是验证用户是否是其宣称的人(验证密码)。
- authz(uthorization,授权):主要作用是判断当前用户是否具有相应权限。
PUT _opendistro/_security/api/securityconfig/config { "dynamic": { "authc": { "basic_internal_auth_domain": { "description": "Authenticate via HTTP Basic against internal users database", "http_enabled": true, "transport_enabled": true, "order": 1, "http_authenticator": { "type": "basic", "challenge": true }, "authentication_backend": { "type": "intern" } }, "ldap": { "description": "Authenticate via LDAP or Active Directory", "http_enabled": true, "transport_enabled": true, "order": 2, "http_authenticator": { "type": "basic", "challenge": false }, "authentication_backend": { "type": "ldap", "config": { "enable_ssl": false, "enable_start_tls": false, "enable_ssl_client_auth": false, "verify_hostnames": true, "hosts": ["10.0.XXX.XXX:389"], "bind_dn": "CN=adminAD,DC=test,DC=ldap,DC=com", "password": "<password>", "userbase": "OU=ITDepartment,DC=test,DC=ldap,DC=com", "usersearch": "(sAMAccountName={0})", "username_attribute": "uid" } } } }, "authz": { "roles_from_myldap": { "description": "Authorize via LDAP or Active Directory", "http_enabled": true, "transport_enabled": true, "authorization_backend": { "type": "ldap", "config": { "enable_ssl": false, "enable_start_tls": false, "enable_ssl_client_auth": false, "verify_hostnames": true, "hosts": ["10.0.XXX.XXX:389"], "bind_dn": "CN=adminAD,DC=test,DC=ldap,DC=com", "password": "<password>", "rolebase": "OU=groups,DC=test,DC=ldap,DC=com", "rolesearch": "(member={0})", "userroleattribute": null, "userrolename": "disabled", "rolename": "CN", "resolve_nested_roles": true, "userbase": "OU=ITDepartment,DC=test,DC=ldap,DC=com", "usersearch": "(uid={0})" } } } } } }
其中,表表1中的参数需要基于实际环境修改。
- X.500目录协议(包含LDAP)的相关定义:
- 在Elasticsearch安全集群中配置LDAP用户权限和Elasticsearch权限的映射,实现集群用户的细粒度权限。
LDAP服务器的rolebase权限组需要和Elasticsearch集群中的role相对应,映射关系如图3所示。详细的配置指导请参见创建Elasticsearch集群用户并授权使用。
- 登录云搜索服务管理控制台。
- 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
- 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,使用admin登录Kibana页面。
- 选择左侧导航栏的“Security”,进入Security页面。
- 选择“Roles”,进入Open Distro Security Roles页面。单击“Create Role”,配置Name、Cluster Permissions、 Index permissions和Tenant permissions。单击“Save Role Definition”,保存角色设置。
- Name:Role的名字
- Cluster Permissions:集群权限
- Index permissions:索引权限
- Tenant permissions:租户权限
- 单击新建的Role,选择“Mapped users”,在“Backend roles”中输入LDAP服务中的group权限组,单击“Map”完成权限映射。
- 查看配置结果。
图4 权限映射
- 重复5.e-5.g完成其他权限组的映射。
- 验证结果。
- 登录云搜索服务管理控制台。
- 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
- 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,使用LDAP用户登录Kibana页面。
- 如果能成功登录,表示配置成功,用户可以通过LDAP接入集群,集群的具体操作权限受Elasticsearch的角色权限控制。
- 如果登录失败,表示配置失败,请联系技术支持协助定位处理。