2.5.2. 配置 LDAP 身份验证
作为平台管理员,您可以将 LDAP 配置为 Ansible Automation Platform 用户的帐户身份验证信息的来源。
如果要连接的 LDAP 服务器有由内部证书颁发机构(CA)自签名或签名的证书,则必须将 CA 证书添加到系统的可信 CA 中。否则,到 LDAP 服务器的连接会导致证书签发者无法识别的错误。
配置 LDAP 后,会为使用 LDAP 用户名和密码登录的任何用户创建一个帐户,并可作为常规用户或机构管理员自动将其放置到机构中。
Ansible Automation Platform 将用户名视为 LDAP 中不区分大小写。它将在不修改的情况下输入的用户名发送到 LDAP 供应商以进行身份验证。身份验证成功后,平台会将用户名转换为小写,并将其存储在数据库中。例如,如果用户以 JDOE 身份登录,其平台用户名是 jdoe。如果用户再次以 JDoe 身份登录,其用户名仍会是 jdoe。
但是,如果 Ansible Automation Platform 配置了多个 LDAP 验证器,并且其中存在相同的用户 ID,则它们的用户名可能会有所不同。例如,JDOE 可能具有用户名 jdoe,而 jDOE 可以分配 jdoe-<some hash& gt;。
如果用户之前使用其用户名的不同问题单变体登录,Ansible Automation Platform 会将所有问题单更改映射到小写的用户名。对于交互式登录,具有其他案例变化的现有用户无效。但是,混合问题单用户名的任何现有 OAuth 令牌仍允许身份验证。如果需要,系统管理员可以删除这些案例变体用户。
通过 LDAP 登录创建的用户不应为自己更改用户名、名、姓或设置本地密码。下次登录平台时,对此信息所做的任何更改都会被覆盖。
在平台 UI 中,2.4 不支持将 LDAP 身份验证设置迁移到 2.5。如果您要从 Ansible Automation Platform 2.4 升级到 2.5,请务必在升级前保存身份验证供应商数据。
步骤
-
在导航面板中,选择
。 - 点 。
- 输入此身份验证配置的 Name。
- 从 Authentication type 列表中选择 LDAP。Authentication details 部分自动更新,以显示与所选验证类型相关的字段。
- 从 Auto migrate users from 列表中选择一个旧的验证器方法。从 2.4 升级到 2.5 后,这是旧的验证器,用于从中自动将用户迁移到这个新的身份验证配置。有关迁移用户的重要信息,请参阅 RPM 升级和迁移指南中的 Ansible Automation Platform 升级后步骤。
- 在 LDAP Server URI 字段中,输入或修改您要连接的 LDAP 服务器列表。此字段支持多个地址。
在 LDAP 绑定 DN 文本字段中,输入 Distinguished Name (DN)以指定 Ansible Automation Platform 用来连接到 LDAP 服务器的用户,如下例所示:
cn=josie,cn=users,dc=website,dc=com- 在 LDAP Bind Password 文本字段中,输入用于绑定用户的密码。
从 LDAP Group Type 列表中选择一个组类型。
group type 定义组的类名称,后者管理 LDAP 目录中与用户关联的组,并由此流程的第 14 步中指定的搜索返回。组类型以及组参数和组搜索用于在登录期间查找和为用户分配组,也可以在映射过程中评估。下表列出了可用的组类型,以及它们的描述以及每个组所需的参数。默认情况下,通过获取 cn 属性的第一个值,LDAP 组将映射到 Django 组。您可以使用
name_attr指定不同的属性。例如,name_attr='cn'。Expand 表 2.1. 可用的 LDAP 组类型 LDAP 组类型 描述 initializer 方法(init) PosixGroupType处理
posixGroup对象类。这会检查主组和组成员资格。name_attr='cn'MemberDNGroupType处理 group 对象中包含其成员 DN 列表的分组机制。
member_attr, name_attr='cn'GroupOfNamesType处理
groupOfNames对象类。等同于MemberDNGroupType ('member')。name_attr='cn'GroupOfUniqueNamesType处理
groupOfUniqueNames对象类。等同于MemberDNGroupType ('uniqueMember')。name_attr='cn'ActiveDirectoryGroupType处理 Active Directory 组。等同于
MemberDNGroupType ('member')。name_attr='cn'OrganizationalRoleGroupType处理
organizationalRole对象类。等同于MemberDNGroupType ('roleOccupant')。name_attr='cn'NestedGroupOfNamesType处理
groupOfNames对象类。等同于NestedMemberDNGroupType ('member')。member_attr, name_attr='cn'NestedGroupOfUniqueNamesType处理
groupOfUniqueNames对象类。等同于NestedMemberDNGroupType ('uniqueMember')。name_attr='cn'NestedActiveDirectoryGroupType处理 Active Directory 组。等同于
NestedMemberDNGroupType ('member')。name_attr='cn'NestedOrganizationalRoleGroupType处理
organizationalRole对象类。等同于NestedMemberDNGroupType ('roleOccupant')。name_attr='cn'注意Ansible Automation Platform 支持的组类型使用底层 django-auth-ldap 库。要为所选组类型指定参数,请参阅此步骤的第 14 步。
您可以使用 LDAP 用户 DN 模板 作为用户搜索的替代选择。这种方法对于用户查找效率要高,而不是搜索在您的机构环境中。输入模板的名称,如下例所示:
uid=%(user)s,cn=users,cn=accounts,dc=example,dc=com其中:
uid是用户标识符,cn是通用名称,dc是域组件。注意如果此设置具有值,它将被使用,而不是 LDAP 用户搜索设置。
- LDAP Start TLS 默认禁用。STARTTLS 允许您的 LDAP 连接使用传输层安全(TLS)从未加密的连接升级到安全连接。要在 LDAP 连接没有使用 SSL 时启用 StartTLS,请将开关设置为 On。
可选:输入此验证器可以采用的任何其他 身份验证器字段。这些字段不会被验证,并直接传递给验证器。
注意此字段中定义的值覆盖 UI 中提供的专用字段。此处未定义的任何值都不提供给验证器。
输入为 LDAP 连接 设置的任何 LDAP 连接选项。默认情况下,禁用 LDAP 引用,以防止某些 LDAP 查询与 Active Directory 挂起。选项名称应该是字符串,如下例所示:
OPT_REFERRALS: 0 OPT_NETWORK_TIMEOUT: 30有关可设置的选项和值,请参阅 python-LDAP 参考。
根据所选的 LDAP 组类型, LDAP Group Type Parameters 字段中提供了不同的参数。
LDAP_GROUP_TYPE_PARAMS是一个字典,它转换为kwargs,并传递给所选的 LDAP 组类型 类。组类型使用两种常用参数:name_attr和member_attr。其中name_attr默认为cn,member_attr默认为member:{"name_attr": "cn", "member_attr": "member"}要确定特定 LDAP 组类型需要的参数,请参阅类
init参数上的 django_auth_ldap 文档。在 LDAP Group Search 字段中,指定应搜索哪些组以及如何搜索它们,如下例所示:
[ "dc=example,dc=com", "SCOPE_SUBTREE", "(objectClass=group)" ]在 LDAP User Attribute Map 字段中,输入用户属性,将 LDAP 字段映射到您的 Ansible Automation Platform 用户,如
email或first_name,如下例所示:{ "first_name": "givenname", "last_name": "sn", "email": "mail" }在 LDAP User Search 字段中输入在身份验证期间搜索用户的位置,如下例所示:
[ "ou=users,dc=website,dc=com", "SCOPE_SUBTREE", "(cn=%(user)s)" ]如果没有设置 LDAP 用户 DN 模板,Ansible Automation Platform 会使用 绑定 DN 模板和 LDAP 绑定 密码对 LDAP 进行身份验证。身份验证后,将执行 LDAP 搜索来查找此字段指定的用户。如果找到了用户,Ansible Automation Platform 会根据 LDAP 搜索发现的用户验证提供的密码。通过输入多个搜索术语,支持带有
LDAPUnion的用户支持多个搜索查询,如下例所示:[ [ "ou=users,dc=example,dc=com", "SCOPE_SUBTREE", "uid=%(user)s" ], [ "ou=employees,dc=subdivision,dc=com", "SCOPE_SUBTREE", "uid=%(user)s" ] ]如果在多次搜索过程中找到非唯一的用户,则这些用户将无法登录到 Ansible Automation Platform。根据提供的示例,如果在
ou=users,dc=example,dc=com和ou=employees,dc=subdivision,dc=com中都找不到带有uid=jdoe的用户,则jdoe用户都无法登录。在任一分支中找到的所有其他唯一用户仍然可以登录。注意如果填充了字段 LDAP 用户 DN 模板,它将优先于 LDAP User Search 字段,只有模板才会用于验证用户。
- 要在成功登录时自动创建机构、用户和团队,请选择 Create objects。
- 要在创建时启用此验证方法,请选择 Enabled。
- 要在之前从此来源进行身份验证时添加的任何组删除用户,请选择 Remove users。
- 单击 。
2.5.2.1. 在用于 LDAPS 集成的自动化控制器中导入证书颁发机构 复制链接链接已复制到粘贴板!
您可以使用 LDAP 向自动化控制器服务器进行身份验证。但是,如果您更改为使用 LDAPS (通过 SSL/TLS 进行 LDAP)进行验证,并且平台网关不信任 TLS 证书,则会失败并显示以下错误:
2025-08-26 16:40:56,141 WARNING django_auth_ldap Caught LDAPError while authenticating: SERVER_DOWN({'result': -1, 'desc': "Can't contact LDAP server", 'ctrls': [], 'info': 'error:0A000086:SSL routines::certificate verify failed (self-signed certificate)'})
要让 Ansible Automation Platform 信任来自 LDAP 的证书,请在所有平台网关实例上执行以下步骤。
步骤
-
将 LDAP 服务器证书的副本放在目录
/etc/pki/ca-trust/source/anchors/中。 运行命令:
update-ca-trust