更新时间:2025-08-22 GMT+08:00
分享

通过LDAP接入OpenSearch集群

LDAP(Light Directory Access Portocol)是基于X.500标准的轻量级目录访问协议。基于LDAP协议的LDAP服务可以提供用户身份验证的能力。CSS服务通过使用Open Distro的Security插件,在集群中加入Active Directory作为身份验证后端,使集群无缝接入到LDAP服务中。本文会讲解CSS集群接入LDAP认证的基本方式,并会讲解基本原理。

本文介绍如何在CSS服务的OpenSearch集群中配置轻量目录访问协议LDAP认证,以实现相应角色的LDAP用户接入OpenSearch集群。

准备工作

  • 已经在CSS服务上准备好一个OpenSearch安全模式的集群,且集群处于可用状态。
  • 已准备好和OpenSearch集群在同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服务上修改OpenSearch安全集群的参数配置,在“opensearch.yml”中配置静态参数后才可以连接LDAP服务。

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

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

    6. 参数修改保存成功后,单击页面右上方的“重启”重启集群,使修改的配置生效。
      图3 重启集群
      • 如果修改了参数配置,未重启集群,则在集群列表的“任务状态”栏显示为“配置未更新”
      • 如果修改后重启集群,集群列表的“任务状态”显示“配置错误”,则表示修改参数配置文件失败。

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

    1. 在集群详情页,选择“概览”页签。
    2. “配置信息”下方,单击“集群路由”后面的“添加路由”
    3. “添加路由”弹窗中,配置路由信息。
      表1 添加路由

      参数

      说明

      ip地址

      填写LDAP服务器的子网。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网。

      子网掩码

      填写LDAP服务器的子网掩码。如果使用的是ECS上的LDAP服务,则此处直接填写ECS的子网掩码。

    4. 单击“确定”添加路由。

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

    1. 在集群详情页,单击页面右上方的“Dashboards”,登录OpenSearch Dashboards。
    2. 在左侧导航栏选择“Dev Tools”,进入操作页面。
    3. 执行如下命令,配置LDAP认证。
      • X.500目录协议(包含LDAP)的相关定义:
        • CN = Common Name
        • OU = Organizational Unit
        • DC = Domain Component
        • DN = Distinguished Name

        其中,CN、OU、DC必须按顺序一一对应,否则无法认证。

      • 配置文件主要分为两个部分“authc”“authz”
        • authc(authentication,认证):主要作用是验证用户是否是其宣称的人(验证密码)。
        • authz(authorization,授权):主要作用是判断当前用户是否具有相应权限。
      PUT _plugins/_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})"
                          }
                      }
                  }
              }
          }
      }

      其中,表表2中的参数需要基于实际环境修改。

      表2 配置项说明

      配置项

      说明

      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. 在OpenSearch安全集群中配置LDAP用户权限和OpenSearch权限的映射,实现集群用户的细粒度权限。

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

    图4 权限映射关系
    1. 在OpenSearch Dashboards页面,选择左侧导航栏的“Security”,进入Security页面。
    2. 选择“Roles”,进入Open Distro Security Roles页面。单击“Create Role”,配置NameCluster PermissionsIndex permissionsTenant permissions。单击“Save Role Definition”,保存角色设置。
      • Name:Role的名字
      • Cluster Permissions:集群权限
      • Index permissions:索引权限
      • Tenant permissions:租户权限
    3. 单击新建的Role,选择“Mapped users”,在“Backend roles”中输入LDAP服务中的group权限组,单击“Map”完成权限映射。
    4. 查看配置结果。
      图5 权限映射
    5. 重复5.b-5.d完成其他权限组的映射。

  6. 使用LDAP用户登录OpenSearch Dashboards,验证结果。

    1. 登录云搜索服务管理控制台
    2. 在左侧导航栏,选择“集群管理 > OpenSearch”
    3. 在集群列表,选择目标集群,单击操作列“Dashboards”,使用LDAP用户登录OpenSearch Dashboards页面。

      登录成功,表示配置成功,用户可以通过LDAP接入集群,集群的具体操作权限受OpenSearch的角色权限控制。

相关文档