更新时间:2024-10-21 GMT+08:00
分享

通过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官方文档

接入集群

  1. 在弹性云服务器ECS上安装LDAP服务,如果已提前准备好LDAP服务和用户数据,则可以跳过该步骤。

    1. 创建ECS。ECS需要选择Windows系统,且和CSS服务的安全集群在同一个虚拟私有云和安全组中。ECS的Windows Server自带支持LDAP协议的Active Directory服务。

      具体操作请参见快速购买和使用Windows ECS

    2. 登录ECS开启Active Directory服务,新建域、管理员、用户和用户组。
      图1 Active Directory服务目录1
      图2 Active Directory服务目录2
      • “test.ldap.com”:新建域的示例名称。
      • “adminAD”:管理员用户
      • “ITDepartment”: LDAP用户目录
      • “groups”: 每一个用户对应一个权限组。

  2. 在CSS服务上修改Elasticsearch安全集群的参数配置,在“elasticsearch.yml”中配置静态参数后才可以连接LDAP服务。

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
    3. 在集群列表,单击需要修改参数配置的集群名称,进入集群基本信息页面。
    4. 在左侧导航栏选择“参数配置”,单击“编辑”,在“自定义”模块添加如下参数配置。
      • 参数名称:opendistro_security.unsupported.restapi.allow_securityconfig_modification
      • 参数值:true
    5. 添加完成后,单击上方的“提交”弹出“提交配置”窗口,确认参数无误后勾选“参数修改后需要手动重启才能生效”,单击“确定”

      当下方的参数修改列表显示“作业状态”“成功”时,表示修改保存成功。系统最多显示20条修改记录。

    6. 返回集群列表,单击集群操作列的“更多 > 重启”重启集群,使修改的配置生效。
      • 如果修改了参数配置,未重启集群,则在“集群管理”页面的“任务状态”栏显示为“配置未更新”
      • 如果修改后重启集群,“任务状态”显示“配置错误”,则表示修改参数配置文件失败。

  3. 在CSS服务上配置集群的自定义路由,确保集群可以正常访问LDAP服务。

    集群的自定义路由功能是白名单功能,如果有需求,请先提工单申请权限。

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏选择“集群管理”,进入对应类型的集群列表。
    3. 在集群列表,单击需要修改参数配置的集群名称,进入集群基本信息页面。
    4. 在基本信息页面找到“集群路由”,单击“修改”配置路由信息。
      • “IP地址”:填写LDAP服务器的子网。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网。“子网掩码”:填写LDAP服务器的子网掩码。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网掩码。
      • “更改类型”:选择“添加”
    5. 单击“确定”完成配置。

  4. 在Elasticsearch安全集群中配置LDAP认证。

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
    3. 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,登录Kibana页面。
    4. 选择左侧导航栏的“Dev Tools”,进入操作页面。
    5. 执行如下命令配置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中的参数需要基于实际环境修改。

      表1 配置项说明

      配置项

      说明

      hosts

      LDAP服务的地址,端口号为389。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的IP地址。

      bind_dn

      类似于LDAP的用户名(CN - OU - DC ),用于访问LDAP服务器。需要从LDAP服务的用户数据中选择用户名。

      password

      “bind_dn”配置的LDAP用户对应的密码。

      userbase

      连接上LDAP之后获取用户所属的DN,本例中会同步“ITDepartment”目录下所有的用户。

      rolebase

      LDAP服务“userbase”用户组对应的权限配置。

  5. 在Elasticsearch安全集群中配置LDAP用户权限和Elasticsearch权限的映射,实现集群用户的细粒度权限。

    LDAP服务器的rolebase权限组需要和Elasticsearch集群中的role相对应,映射关系如图3所示。详细的配置指导请参见创建Elasticsearch集群用户并授权使用

    图3 权限映射关系
    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
    3. 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,使用admin登录Kibana页面。
    4. 选择左侧导航栏的“Security”,进入Security页面。
    5. 选择“Roles”,进入Open Distro Security Roles页面。单击“Create Role”,配置NameCluster PermissionsIndex permissionsTenant permissions。单击“Save Role Definition”,保存角色设置。
      • Name:Role的名字
      • Cluster Permissions:集群权限
      • Index permissions:索引权限
      • Tenant permissions:租户权限
    6. 单击新建的Role,选择“Mapped users”,在“Backend roles”中输入LDAP服务中的group权限组,单击“Map”完成权限映射。
    7. 查看配置结果。
      图4 权限映射
    8. 重复5.e-5.g完成其他权限组的映射。

  6. 验证结果。

    1. 登录云搜索服务管理控制台。
    2. 在左侧导航栏选择“集群管理 > Elasticsearch”,进入集群列表。
    3. 在集群列表,选择需要进行配置的集群,单击操作列“Kibana”,使用LDAP用户登录Kibana页面。
      • 如果能成功登录,表示配置成功,用户可以通过LDAP接入集群,集群的具体操作权限受Elasticsearch的角色权限控制。
      • 如果登录失败,表示配置失败,请联系技术支持协助定位处理。

相关文档