可以通过“身份验证”工作区使用 LDAP 协议为 SaltStack Config 配置目录服务。此协议用于连接到 Active Directory 或 Microsoft Azure 等服务。

注: 如果需要,可以在 SaltStack Config 中同时使用多个系统对用户进行身份验证。例如,可以使用基于 SAML 的 IdP 或基于 LDAP 的 IdP,同时在 RaaS 服务器上本地存储一些用户凭据。但是, SaltStack Config 不允许同时配置两个以上的 SAML 提供程序或两个以上的 LDAP 提供程序。

SaltStack Config 使用以下后端进程对基于 LDAP 的系统进行身份验证:

  • 预览 - 预览连接设置时,SaltStack Config 从 LDAP 服务器检索用户和组的示例列表,以便您可以验证是否输入了正确的配置参数。
  • 登录 - 当用户在 SaltStack Config 登录表单中输入凭据时,后端服务器此时会检查数据库中的匹配项。然后,启动多步骤查找进程,找到匹配项后对用户进行身份验证。对于此查找进程,已启用组中的已启用个人用户在首次登录后才会显示在“角色”工作区中。
  • 后台任务 - SaltStack Config 定期运行后台作业,以查找目录服务连接中的每个链接组和用户,以确保其仍然存在。如果组或用户已移除,则后端服务器会停用其在数据库中的链接。
  • 已存档的组和用户 - 从目录服务连接中移除的任何组均会存档。即使这些组处于非活动状态且用户无法登录,也仍显示在“角色”工作区中,并可供选择。对于之前显示在“角色”工作区中的任何已移除用户,同样如此。
  • 嵌套组 - 使用嵌套组时,启用父组后,默认情况下也会启用所有子组。

配置 LDAP 连接

要配置 LDAP,请先创建连接,然后使特定的 LDAP 用户和组向 SaltStack Config 进行身份验证。启用组或用户后,可以定义其基于角色的访问控制 (RBAC) 设置。

可以选择在字段中预填充为目录服务(例如 Active Directory 或 OpenLDAP)自定义的默认设置。

注: 以下步骤应由了解整个 LDAP 系统布局的经验丰富的 LDAP 或 Active Directory 管理员完成。如需帮助,请联系您的管理员。

要设置 LDAP 目录服务,请执行以下操作:

  1. (可选)在配置 LDAP 之前,使用第三方工具测试连接和查询可能会有所帮助。对于 AD 用户,可以使用 LDP 或 ADSI Edit。对于 Linux 用户,建议使用工具 ldapsearch
    注: 有关使用这些工具进行测试的详细信息,请参见支持中心的 如何验证目录服务连接并进行故障排除
  2. 单击侧边菜单上的管理 > 身份验证
  3. 单击创建
  4. 配置类型菜单中,选择 LDAP
  5. (可选)在设置下,单击预填充默认值,然后从下拉列表中选择您的目录服务。

    默认条目将根据您的选择进行填充。但是,某些条目(如用户搜索 DN)不完整。请确保验证条目是否与目录服务结构定义匹配,并且将占位符文本替换为适用于您服务的正确值。

  6. 输入或验证 LDAP 连接的信息。

    基本

    字段 说明
    名称 LDAP 连接的名称。由于此名称仅为显示名称,因此输入任何名称都有助于区分此身份验证后端和其他身份验证后端。
    主机 LDAP 主机服务器地址,格式为 FQDN 或 IP 地址。
    端口 配置 LDAP 服务器的端口。默认端口为 389(对于未加密的 LDAP)和 636(对于 LDAP over SSL)。
    后台同步 SaltStack Config 按照此处定义的设定时间间隔(以分钟为单位)根据身份验证后端验证所有用户和组。
    SSL
    启用 SSL
    选择此项可使用在 RaaS 服务器设置中指定的证书通过安全套接字层 (SSL) 连接到 LDAP 服务器。如果未提供配置,将使用系统证书存储验证 SSL 连接。有关设置 RaaS 服务器的详细信息,请参见《安装和配置 SaltStack Config》指南中的 设置 SSL 证书
    重要说明: 最佳做法是选择“启用 SSL”。如果取消选择此选项, SaltStack Config 将通过不安全的连接传输明文信息。
    验证证书
    选择此项可确保连接后对 SSL 证书进行验证。取消选择此项会跳过验证,例如使用自签名证书时(不建议用于生产环境)。

    身份验证

    字段 说明
    身份验证基本 DN

    基本 LDAP 标识名。这是从中查询组和用户的位置,例如 DC=sse,DC=example,DC=com

    注: LDAP 详细信息页面包括 个人对象类帐户属性名称组类组属性名称同步调度的单独输入字段,如下所述。因此,请勿在“基本 DN”字段中包括这些对象。
    管理员绑定 DN 为 LDAP 服务器配置的管理员 DN。SaltStack Config 使用此项向目录进行身份验证,以进行用户和组查找。根据以下语法输入内容:cn=Administrator,cn=Users,dc=example,dc=com
    管理员绑定 DN 密码

    管理员的个人密码。

    将以加密方式存储在数据库中。不会明文存储。

    身份验证绑定 DN 筛选器

    应用筛选器以选择特定用户。此搜索的结果是用户 DN,SaltStack Config 将使用该用户 DN 绑定到目录并授予用户对 SaltStack Config 的访问权限。这对于限制给定搜索返回的结果数量非常有用。

    注: 由于筛选器语法可能会变得相当复杂,最佳做法是使用 LDP、 ldapsearch 或类似工具测试条目,以验证您的输入并做出任何调整,然后再填写此字段。

    以下示例筛选器将仅返回与所提供的用户名匹配并属于 DevOps 或级别 II 组的帐户。

    (&(objectclass=user)(sAMAccountName={username})(|(memberOf=CN=DevOps,OU=Groups,OU=TestCompanyHQ,DC=adtest,DC=com)(memberOf=LevelII,OU=Groups,DC=adtest,DC=com)))

    如果使用预填充的默认值,请确保将占位符文本替换为适用于您目录服务的正确值。

    注: 配置林结构时,将此字段留空。
    远程唯一 ID 属性名称 用于标识唯一条目的值的名称。这是所有条目的唯一 ID 属性。在 AD 中,为 ObjectGUID

    字段 说明
    组搜索 DN 组的搜索库。例如,在 AD 中,可能为 cn=Groups,dc=example,dc=com。表示目录中搜索组的位置。与下面的“组搜索范围”一起使用。
    组搜索范围

    表示从“组搜索 DN”中指示的基本条目开始进行搜索的目录搜索深度,可以具有以下四个值之一:

    baseObject
    值 0,通常称为 base。使用此值将仅搜索此对象,而不搜索其他对象。
    singleLevel
    值 1,通常称为 one。使用此值将仅考虑在基本条目的直接子项中搜索匹配项。
    wholeSubtree
    值 2(或者在 ldap3 中为 SUBTREE),通常称为 sub。使用此值将搜索到基本条目及其任何深度的所有从属项。
    subordinateSubtree
    值 3,通常称为 subordinates。与 wholeSubtree 一样,但会忽略基本搜索条目。
    组搜索 DN 筛选器 用于从目录中提取组的搜索筛选器。通常为 (objectClass=group),但在某些 AD 配置中,可能会 (objectCategory=group)。可以与“组类”同时使用,以实现更细的粒度。
    组类 用于定义组的对象类名称,例如,groupOfNames
    组名称属性 要用于组名称的属性的名称。输入单值属性,而不是多值。
    组成员身份属性 包含组名称的用户条目中的属性名称,例如,memberOf

    用户

    字段 说明
    用户搜索 DN 用户的搜索基,例如,cn=Users,dc=example,dc=com(在 AD 中)或 cn=people,cn=accounts,dc=example,dc=com(在其他目录服务中)。表示目录中搜索用户的位置。与下面的“用户搜索范围”一起使用。
    用户搜索范围 表示从“用户搜索 DN”中指示的基本条目开始进行搜索的目录搜索深度,可以具有以下四个值之一。请参见“组搜索范围”中介绍的四个值。
    用户搜索 DN 筛选器 用于从目录中提取用户的搜索筛选器。通常为 (objectClass=person),但在某些 AD 配置中,可能会 (objectCategory=user)
    个人类 目录服务类名称,包含要允许登录的用户。大多数系统(包括 Active Directory)使用 person,但有些系统可能更喜欢使用 userinetOrgPerson
    用户 ID 属性 用户帐户属性的唯一名称。对于 AD,为 sAMAccountName。对于其他服务,通常为 uidmemberUid
    用户成员资格属性 包含用户名的组条目中的属性名称。可能的示例包括 memberuniquemember
  7. 要预览设置而不保存,请单击更新预览

    预览窗口将显示为连接选择的用户和组。可以根据需要选择用户选项卡,以预览与服务关联的用户和组。

  8. 单击保存

    您的 LDAP 配置已保存。要验证配置是否正确,可能希望尝试从测试用户帐户登录 SaltStack Config。如果无法成功登录,请参见故障排除,以获得提示。

    注: 对于 LDAP 配置, SaltStack Config 会存储连接设置,包括标识的组和用户。它仅检索您定义的范围内的组和用户,并且不会同步整个目录。

    经过一段时间后,您可能需要刷新或重新同步 LDAP 目录。例如,如果添加了新用户并想要在 SaltStack Config 中启用这些用户,应更新目录。

启用组和用户

设置 LDAP 连接后,需要配置目录服务组并确保用户可以登录到 SaltStack Config。要配置目录服务组,请执行以下操作:

  1. 在“身份验证”工作区中,选择所需的 LDAP 配置。
  2. 选择选项卡以查看从 LDAP 配置检索到的组列表。
    注: 如果检索到大量组,则可能需要长达一分钟才能加载该页面。
  3. 选择要在 SaltStack Config 中启用的组。
  4. 选择用户选项卡以查看从 LDAP 配置检索到的用户列表。
    注: 如果检索到大量用户,则可能需要长达一分钟才能加载该页面。
  5. 选择要在 SaltStack Config 中启用的用户。
    注: 已启用组中包含的所有用户已处于选中状态,且无法取消选择。
    SaltStack Config 中已启用的用户的列表
  6. 单击保存

    现在,可以为所选组定义基于角色的访问控制 (RBAC) 设置。但是,只有在用户首次登录后,您才能在“角色”工作区中管理所选组中包括的各个用户的设置。要删除组或用户,请取消选择组或用户,然后单击保存

    有关 SaltStack Config 中 RBAC 的详细信息,请参见如何定义用户角色

LDAP 连接故障排除

如果无法成功预览连接,请执行以下故障排除步骤。
问题 说明 解决方案
无法预览连接

如果无法预览组和用户,在许多情况下,这是因为 LDAP 服务器与 SaltStack Config 之间的连接存在问题,或者 LDAP 配置表单中的条目无效。

  1. 确保允许从 SaltStack Config 到 LDAP 服务器上选定端口的 TCP 连接。
  2. 仔细检查表单条目,并使用第三方工具验证语法。请参见如何验证目录服务连接并进行故障排除
  3. 如果以上两项措施都无法解决问题,请参见下面的“其他问题”部分。
  4. 如果以上各项措施都无法解决问题,请联系客户支持。
尝试预览连接时,页面在加载时停滞不前 如果页面在加载时停滞不前超过两分钟,请重新启动 RaaS 服务,然后删除并重新创建配置。
  1. 打开 RaaS 日志。
    tail -f /var/log/raas/raas

    该日志包含类似以下内容的错误:

    [ERROR    :256][ForkPoolWorker-2:10253][ldap_preview_background_task(some_uuid)]
    Task ldap preview_background_task[some_uuid]raised unexpected: KeyError('ad-1_preview')
  2. 停止 RaaS 服务,然后重新启动该服务。
    systemctl stop raas
    systemctl start raas
  3. 返回 SaltStack Config 用户界面并删除 LDAP 连接。
    注:

    在删除之前,您可能希望将配置条目复制粘贴到备份文本文件中。

  4. 重新创建 LDAP 配置。
其他问题

如果您已配置并保存 LDAP 连接,但用户无法登录,或者您遇到任何其他问题,请检查启用了扩展调试的 raas 日志,以帮助确定根本原因。

要启用扩展调试,请执行以下操作:

  1. 在 RaaS 上,打开 /etc/raas/raas
  2. 进行以下更改:
    • Loggingoptions 下,取消注释 log_file_loglevel:debug
    • AD/LDAPdriverconfiguration 下,取消注释 log_level 并设置为 log_level:EXTENDED
  3. 停止 RaaS 服务,然后重新启动该服务。
    systemctl stop raas
    systemctl start raas
  4. 查看 raas 日志。
    tail -f /var/log/raas/raas

您可能会在日志中看到以下常见错误:

  • 连接 (SSL) 设置错误。请调整 SSL 设置。
    [raas.utils.validation.schemas.settings][DEBUG   :546 ][Webserver:9096]
    Error while connecting to AD/LDAP Server. SSL connection issues: socket
    ssl wrapping error: [Errno 104] Connection reset by peer
  • 管理员绑定 DN 的密码错误。验证后重新输入密码。
    [raas.utils.rpc   ][DEBUG   :284 ][Webserver:9095]
    Processed RPC request(129360670417695). Response:
    {'riq': 129360670417695, 'ret': None, 'error': {'code': 3004, 'message':
    'Request validation failure.', 'detail': {'_schema':
    ['Credentials are not valid']}}, 'warnings': []}
  • 预填充的默认身份验证绑定 DN 筛选器产生冲突。请将该字段留空,或者使用 {username},而不使用 {{username}}
    注:

    您已保存 LDAP 连接但用户无法登录时,可能会遇到此错误。

    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :903 ][Webserver:9096]
    Running _get_auth_backend_user with this search_filter: (&(objectclass=person)(sAMAccountName={username}))
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :931 ][Webserver:9096]
    Could not find any user using '(&(objectclass=person)(sAMAccountName={username}))'
    as the search filter in the ldap backend under the ad-1 configuration.
    Trying remote_uid 'None'
    
    [var.tmp._MEIBCyG76.raas.mods.auth.ldap][DEBUG   :963 ][Webserver:9096]
    Could not find any user using '(&(objectClass=person)(objectGUID=None))'
    as the search filter in the ldap backend under the ad-1 configuration.