
# 配置LDAP认证
在企业级应用中，为了确保数据的安全性和访问控制，通常需要对用户进行身份验证。然而，传统的身份验证方式往往需要在每个应用中单独配置，导致管理复杂且容易出错。为了简化这一过程，CSS服务通过使用Open Distro的Security插件，在集群中加入Active Directory作为身份验证后端，使集群无缝接入到LDAP服务中。LDAP（Lightweight Directory Access Protocol）是基于X.500标准的轻量级目录访问协议。基于LDAP协议的LDAP服务可以提供用户身份验证的能力。如何在CSS服务的OpenSearch集群中配置轻量目录访问协议LDAP认证，以实现相应角色的LDAP用户接入OpenSearch集群？本文将详细介绍CSS集群接入LDAP认证操作指导。
#### 准备工作
- 已经在CSS服务上准备好一个OpenSearch安全模式的集群，且集群处于可用状态。
- 已准备好和OpenSearch集群在同VPC下的LDAP服务和用户数据。具体操作请参见[OpenLDAP官方文档](https://www.openldap.org/doc/admin24/quickstart.html)。
 
#### 配置LDAP认证
1. 在弹性云服务器ECS上安装LDAP服务，如果已提前准备好LDAP服务和用户数据，则可以跳过该步骤。 
   1. 创建ECS。ECS需要选择Windows系统，且和CSS服务的安全集群在同一个虚拟私有云和安全组中。ECS的Windows Server自带支持LDAP协议的Active Directory服务。 具体操作请参见[快速购买和使用Windows ECS](https://support.huaweicloud.com/qs-ecs/ecs_01_0102.html)。
      
   
   2. 登录ECS开启Active Directory服务，新建域、管理员、用户和用户组。
      图1Active Directory服务目录1   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002039678777.png "点击放大")
      图2Active Directory服务目录2   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002003439672.png "点击放大")
      - "test.ldap.com"：新建域的示例名称。
      
      - "adminAD"：管理员用户
      
      - "ITDepartment"： LDAP用户目录
      
      - "groups"： 每一个用户对应一个权限组。
        
   
   
   
   
2. 在CSS服务上修改OpenSearch安全集群的参数配置，在"opensearch.yml"中配置静态参数后才可以连接LDAP服务。 
   1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
   
   2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
   
   3. 在集群列表，单击目标集群名称，进入集群详情页。
   
   4. 选择"集群配置 \> 参数配置 \> OpenSearch配置"，单击"编辑"，在"自定义"模块添加如下参数配置。
      - 参数名称：plugins.security.unsupported.restapi.allow_securityconfig_modification
      
      - 参数值：true
       
   
   5. 添加完成后，单击"保存"，在弹窗中确认参数无误后勾选"参数修改后需要手动重启才能生效"，单击"确定"。 当下方的参数配置任务列表显示"作业状态"为"成功"时，表示修改保存成功。
      
   
   6. 参数修改保存成功后，在页面右上角单击"重启"，集群将重启以使配置更改生效。
      图3重启集群   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002413714301.png)
      - 如果修改了参数配置，未重启集群，则在集群列表的"任务状态"栏显示为"配置未更新"。
      
      - 如果修改后重启集群，集群列表的"任务状态"显示"配置错误"，则表示修改参数配置文件失败。
       
   
   
   
   
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认证。
      ![](https://support.huaweicloud.com/usermanual-css/public_sys-resources/note_3.0-zh-cn.png)
      - 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]所示。详细的配置指导请参见[创建集群用户并授权使用](https://support.huaweicloud.com/usermanual-css/css_01_0329.html)。
   图4权限映射关系   
   ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002003441216.png "点击放大")
   1. 在OpenSearch Dashboards页面，选择左侧导航栏的"Security"，进入Security页面。
   
   2. 选择"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**：租户权限
       
   
   3. 单击新建的Role，选择"Mapped users"，在"Backend roles"中输入LDAP服务中的group权限组，单击"Map"完成权限映射。
   
   4. 查看配置结果。
      图5权限映射   
      ![](https://support.huaweicloud.com/usermanual-css/figure/zh-cn_image_0000002039680337.png "点击放大") 
   
   5. 重复[5.b]-[5.d]完成其他权限组的映射。
   
   
   
   
6. 使用LDAP用户登录OpenSearch Dashboards，验证结果。 
   1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
   
   2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
   
   3. 在集群列表，选择目标集群，单击操作列"Dashboards"，使用LDAP用户登录OpenSearch Dashboards页面。 登录成功，表示配置成功，用户可以通过LDAP接入集群，集群的具体操作权限受OpenSearch的角色权限控制。
      
   
   
   
   
 
