LDAP 管理
平台管理员可以在平台上添加、更新和删除 LDAP 服务。
LDAP 概述
LDAP(轻量级目录访问协议)是一种成熟、灵活且得到良好支持的标准机制,用于与目录服务器进行交互。它将数据组织成层次树结构,以存储企业用户和组织信息,主要用于实现单点登录(SSO)。
NOTE
LDAP 关键特性:
- 启用客户端与 LDAP 服务器之间的通信
- 支持数据存储、检索和搜索操作
- 提供客户端认证能力
- 便于与其他系统集成
有关更多信息,请参阅 LDAP 官方文档。
支持的 LDAP 类型
OpenLDAP
OpenLDAP 是 LDAP 的开源实现。如果您的组织使用开源 LDAP 进行用户认证,可以通过添加 LDAP 并配置相关参数来使平台与 LDAP 服务进行通信。
NOTE
OpenLDAP 集成:
- 启用平台对 LDAP 用户的认证
- 支持标准 LDAP 协议
- 提供灵活的用户管理
有关 OpenLDAP 的更多信息,请参阅 OpenLDAP 官方文档。
Active Directory
Active Directory 是微软基于 LDAP 的软件,用于在 Windows 系统中提供目录存储服务。如果您的组织使用微软 Active Directory 进行用户管理,可以配置平台与 Active Directory 服务进行通信。
NOTE
Active Directory 集成:
- 启用平台对 AD 用户的认证
- 支持 Windows 域集成
- 提供企业级用户管理
LDAP 术语
OpenLDAP 常用术语
术语 | 描述 | 示例 |
---|
dc (域组件) | 域组件 | dc=example,dc=com |
ou (组织单位) | 组织单位 | ou=People,dc=example,dc=com |
cn (常用名) | 常用名 | cn=admin,dc=example,dc=com |
uid (用户 ID) | 用户 ID | uid=example |
objectClass (对象类) | 对象类 | objectClass=inetOrgPerson |
mail (邮件) | 邮件 | mail=example@126.com |
givenName (名) | 名 | givenName=xq |
sn (姓) | 姓 | sn=ren |
objectClass: groupOfNames | 用户组 | objectClass: groupOfNames |
member (成员) | 组成员属性 | member=cn=admin,dc=example,dc=com |
memberOf | 用户组成员属性 | memberOf=cn=users,dc=example,dc=com |
Active Directory 常用术语
术语 | 描述 | 示例 |
---|
dc (域组件) | 域组件 | dc=example,dc=com |
ou (组织单位) | 组织单位 | ou=People,dc=example,dc=com |
cn (常用名) | 常用名 | cn=admin,dc=example,dc=com |
sAMAccountName/userPrincipalName | 用户标识符 | userPrincipalName=example 或 sAMAccountName=example |
objectClass: user | AD 用户对象类 | objectClass=user |
mail (邮件) | 邮件 | mail=example@126.com |
displayName | 显示名称 | displayName=example |
givenName (名) | 名 | givenName=xq |
sn (姓) | 姓 | sn=ren |
objectClass: group | 用户组 | objectClass: group |
member (成员) | 组成员属性 | member=CN=Admin,DC=example,DC=com |
memberOf | 用户组成员属性 | memberOf=CN=Users,DC=example,DC=com |
添加 LDAP
TIP
LDAP 集成成功后:
- 用户可以使用其企业账户登录平台
- 多次添加相同的 LDAP 将覆盖先前同步的用户
前提条件
在添加 LDAP 之前,请准备以下信息:
- LDAP 服务器地址
- 管理员用户名
- 管理员密码
- 其他所需配置详细信息
步骤
- 在左侧导航栏中,点击 用户 > 身份提供者(IDP)
- 点击 添加 LDAP
- 配置以下参数:
基本信息
参数 | 描述 |
---|
服务器地址 | LDAP 服务器访问地址(例如,192.168.156.141:31758 ) |
用户名 | LDAP 管理员 DN(例如,cn=admin,dc=example,dc=com ) |
密码 | LDAP 管理员账户密码 |
登录框用户名提示 | 用户名输入提示消息(例如,“请输入您的用户名”) |
搜索设置
NOTE
搜索设置目的:
- 根据指定条件匹配 LDAP 用户条目
- 提取关键用户和组属性
- 将 LDAP 属性映射到平台用户属性
参数 | 描述 |
---|
对象类型 | 用户的 ObjectClass: - OpenLDAP: inetOrgPerson - Active Directory: organizationalPerson - 组: posixGroup |
登录字段 | 用作登录用户名的属性: - OpenLDAP: mail (电子邮件地址) - Active Directory: userPrincipalName |
筛选条件 | 用户/组过滤的 LDAP 筛选条件 示例: (&(cn=John*)(givenName=*xq*)) |
搜索起始点 | 用户/组搜索的基本 DN(例如,dc=example,dc=org ) |
搜索范围 | 搜索范围: - sub : 整个目录子树 - one : 从起始点向下一级 |
登录属性 | 唯一用户标识符: - OpenLDAP: uid - Active Directory: distinguishedName |
名称属性 | 对象名称属性(默认: cn ) |
电子邮件属性 | 电子邮件属性: - OpenLDAP: mail - Active Directory: userPrincipalName |
组成员属性 | 组成员标识符(默认: uid ) |
组属性 | 用户组关系属性(默认: memberuid ) |
-
在 身份提供者(IDP)服务配置验证 部分:
- 输入有效的 LDAP 账户用户名和密码
- 用户名必须与 登录字段 设置匹配
- 点击验证配置
-
(可选)配置 LDAP 自动同步策略:
- 启用 自动同步用户 开关
- 设置同步规则
- 使用 在线工具 验证 CRON 表达式
-
点击 添加
NOTE
添加 LDAP 后:
- 用户可以在同步之前登录
- 用户信息将在首次登录时自动同步
- 自动同步将根据配置的规则进行
LDAP 配置示例
LDAP 连接器配置
以下示例展示如何配置一个 LDAP 连接器:
apiVersion: dex.coreos.com/v1
kind: Connector
id: ldap # 连接器 ID
name: ldap # 连接器显示名称
type: ldap # 连接器类型为 LDAP
metadata:
name: ldap
namespace: cpaas-system
spec:
config:
# LDAP 服务器地址和端口
host: ldap.example.com:636
# 用于连接器的服务账户的 DN 和密码。
# 此 DN 用于搜索用户和组。
bindDN: uid=serviceaccount,cn=users,dc=example,dc=com
# 服务账户密码,创建连接器时必填。
bindPW: password
# 登录账户提示。例如,用户名
usernamePrompt: SSO Username
# 用户搜索配置
userSearch:
# 从基本 DN 开始搜索
baseDN: cn=users,dc=example,dc=com
# LDAP 查询语句,用于搜索用户。
# 例如: "(&(objectClass=person)(uid=<username>))"
filter: (&(objectClass=organizationalPerson))
# 以下字段为用户条目属性的直接映射。
# 用户 ID 属性
idAttr: uid
# 必填。映射到电子邮件的属性
emailAttr: mail
# 必填。映射到用户名的属性
nameAttr: cn
# 登录用户名属性
# 筛选条件将转换为 "(<attr>=<username>)",如 (uid=example)。
username: uid
# 扩展属性
# phoneAttr: phone
# 组搜索配置
groupSearch:
# 从基本 DN 开始搜索
baseDN: cn=groups,dc=freeipa,dc=example,dc=com
# 组过滤条件
# "(&(objectClass=group)(member=<user uid>))"。
filter: "(objectClass=group)"
# 用户组匹配字段
# 组属性
groupAttr: member
# 用户组成员属性
userAttr: uid
# 组显示名称
nameAttr: cn
用户过滤器示例
# 1. 基本过滤器:查找所有用户
(&(objectClass=person))
# 2. 多条件组合:查找特定部门的用户
(&(objectClass=person)(departmentNumber=1000))
# 3. 查找启用的用户(Active Directory)
(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
# 4. 查找特定电子邮件域的用户
(&(objectClass=person)(mail=*@example.com))
# 5. 查找特定组的成员
(&(objectClass=person)(memberOf=cn=developers,ou=groups,dc=example,dc=com))
# 6. 查找最近登录的用户(Active Directory)
(&(objectClass=user)(lastLogon>=20240101000000.0Z))
# 7. 排除系统账户
(&(objectClass=person)(!(uid=admin))(!(uid=system)))
# 8. 查找具有特定属性的用户
(&(objectClass=person)(mobile=*))
# 9. 查找多个部门的用户
(&(objectClass=person)(|(ou=IT)(ou=HR)(ou=Finance)))
# 10. 复杂条件组合示例
(&
(objectClass=person)
(|(department=IT)(department=Engineering))
(!(title=Intern))
(manager=cn=John Doe,ou=People,dc=example,dc=com)
)
组搜索配置示例
# 1. 基本过滤器:查找所有组
(objectClass=groupOfNames)
# 2. 查找具有特定前缀的组
(&(objectClass=groupOfNames)(cn=dev-*))
# 3. 查找非空组
(&(objectClass=groupOfNames)(member=*))
# 4. 查找具有特定成员的组
(&(objectClass=groupOfNames)(member=uid=john,ou=People,dc=example,dc=com))
# 5. 查找嵌套组(Active Directory)
(&(objectClass=group)(|(groupType=-2147483646)(groupType=-2147483644)))
# 6. 查找具有特定描述的组
(&(objectClass=groupOfNames)(description=*admin*))
# 7. 排除系统组
(&(objectClass=groupOfNames)(!(cn=system*)))
# 8. 查找具有特定成员的组
(&(objectClass=groupOfNames)(|(cn=admins)(cn=developers)(cn=operators)))
# 9. 查找特定 OU 的组
(&(objectClass=groupOfNames)(ou=IT))
# 10. 复杂条件组合示例
(&
(objectClass=groupOfNames)
(|(cn=prod-*)(cn=dev-*))
(!(cn=deprecated-*))
(owner=cn=admin,dc=example,dc=com)
)
AND(&) 和 OR(|) 运算符在 LDAP 筛选器中的示例
# AND 运算符 (&) - 所有条件必须满足
# 语法: (&(condition1)(condition2)(condition3)...)
# 多属性 AND 示例
(&
(objectClass=person)
(mail=*@example.com)
(title=Engineer)
(manager=*)
)
# OR 运算符 (|) - 至少一个条件必须满足
# 语法: (|(condition1)(condition2)(condition3)...)
# 多属性 OR 示例
(|
(department=IT)
(department=HR)
(department=Finance)
)
# 组合 AND 和 OR
(&
(objectClass=person)
(|
(department=IT)
(department=R&D)
)
(employeeType=FullTime)
)
# 复杂条件组合
(&
(objectClass=person)
(|
(&
(department=IT)
(title=*Engineer*)
)
(&
(department=R&D)
(title=*Developer*)
)
)
(!(status=Inactive))
(|(manager=*)(isManager=TRUE))
)
同步 LDAP 用户
在成功将 LDAP 用户同步到平台后,您可以在用户列表中查看已同步的用户。
您可以在 添加 LDAP 时配置自动同步策略(可以稍后更新)或在成功添加 LDAP 后手动触发同步。以下是手动触发同步操作的方法。
注意:
-
在与平台集成的 LDAP 中新增的用户可以在执行用户同步操作之前登录平台。一旦他们成功登录平台,其信息将自动同步到平台。
-
从 LDAP 中删除的用户在同步后将显示为 无效
状态。
-
新同步用户的默认有效期为 永久。
-
与现有用户(本地用户、IDP 用户)同名的同步用户会自动关联。它们的权限和有效期将与现有用户保持一致。它们可以使用对应来源的登录方式登录平台。
操作程序
-
在左侧导航栏中,点击 用户 > 身份提供者(IDP)。
-
点击要手动同步的 LDAP 名称。
-
点击右上角的 操作 > 同步用户。
-
点击 同步。
注意:如果您手动关闭同步提示对话框,将出现确认对话框以确认关闭。关闭同步提示对话框后,系统将继续同步用户。如果您仍在用户列表页面,将收到同步结果反馈。如果您离开用户列表页面,将不会收到同步结果。
相关操作
您可以点击列表页面右侧的
或在详情页面右上角点击 操作 以根据需要更新或删除 LDAP。
操作 | 描述 |
---|
更新 LDAP | 更新已添加 LDAP 的配置信息或 LDAP 自动同步策略。
注意:更新 LDAP 后,通过此 LDAP 目前同步到平台的用户也将被更新。从 LDAP 中删除的用户将在平台用户列表中变为无效。您可以通过执行清理无效用户的操作来清理垃圾数据。 |
删除 LDAP | 删除 LDAP 后,通过此 LDAP 同步到平台的所有用户将变为 无效 状态(用户与角色之间的绑定关系保持不变),并且他们无法登录平台。重新集成后,需要重新执行同步以激活用户。
提示:删除 IDP 后,如果需要删除通过 LDAP 同步到平台的用户和用户组,请在提示框下方勾选 清理 IDP 用户和用户组 复选框。 |