注解
如果您想要连接的 LDAP 服务器有由公司内部证书认证机构 (CA) 自签名或签名的证书,则必须将 CA 证书添加到系统的信任 CA 中。否则,到 LDAP 服务器的连接会导致证书签发者无法识别的错误。
管理员使用 LDAP 作为 Tower 用户的帐户身份验证信息来源。它提供了用户身份验证,而未提供用户权限和凭证的同步功能。机构成员资格(以及机构管理员)和团队成员资格可以同步。
当这样配置时,使用 LDAP 用户名和密码登录的用户会自动获得为其创建的 Tower 帐户,并可作为常规用户或机构管理员自动将其放置到机构中。
通过 LDAP 登录创建的用户无法为自己更改用户名、名、姓或设置本地密码。也可以调整此项来限制其他字段名称的编辑。
为 Tower 配置 LDAP 集成:
首先,在 LDAP 中创建有权读取整个 LDAP 结构的用户。
如果您能够成功查询 LDAP 服务器,请使用 ldapsearch
命令,这是一个命令行工具,可以安装在 tower 系统的命令行上,也可以安装在其他 Linux 和 OSX 系统上。使用以下命令查询 ldap 服务器,其中 josie 和 Josie4Cloud 由适用于您的设置的属性替代:
ldapsearch -x -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4Cloud
此处 CN=josie,CN=users,DC=website,DC=com
是连接的用户的可辨识名称。
注解
Ansible Tower 不会自动预安装 ldapsearch
工具程序,您可以从 openldap-clients
软件包中安装它。
在 Ansible Tower 用户界面中,从 Settings () 菜单屏幕中点击 Authentication。
在默认情况下,最初会显示 Azure AD 标签页。
选择 LDAP 选项卡。
注解
您可以通过指定要配置的服务器来配置多个 LDAP 服务器(否则,使服务器保留为 Default):
等同的 API 端点将显示 AUTH_LDAP_*
重复:AUTH_LDAP_1_*
、AUTH_LDAP_2_*
、......、AUTH_LDAP_5_*
用于表示服务器的名称。
在 LDAP Server URI 字段中输入要连接的 LDAP 服务器地址,其格式与文本字段中显示的格式相同。以下是一个示例:
在 LDAP Bind DN 文本字段中输入可辨识的名称,以指定 Tower 用来连接(绑定)LDAP 服务器的用户。以下使用了示例 CN=josie,CN=users,DC=website,DC=com
:
在 LDAP Bind Password 文本字段中输入用于绑定用户的密码。在本例中,密码是“passme”:
如果该名称存储在键 sAMAccountName
中,则**LDAP User DN Template** 使用 (sAMAccountName=%(user)s)
填充。Active Directory 将用户名保存到 sAMAccountName
。同样,对于 OpenLDAP,键是 uid
,行变为 (uid=%(user)s)
。
点击以从 LDAP Group Type 下拉菜单中选择组类型。
LDAP 组类型包括:
PosixGroupType
GroupOfNamesType
GroupOfUniqueNamesType
ActiveDirectoryGroupType
OrganizationalRoleGroupType
MemberDNGroupType
NISGroupType
NestedGroupOfNamesType
NestedGroupOfUniqueNamesType
NestedActiveDirectoryGroupType
NestedOrganizationalRoleGroupType
NestedMemberDNGroupType
PosixUIDGroupType
Tower 支持的 LDAP 组类型利用底层 django-auth-ldap library。
每个 LDAP Group Type 都可能采用不同的参数。因此 Tower 将
LDAP_GROUP_TYPE_PARAMS
公开给帐户。LDAP_GROUP_TYPE_PARAMS
是字典,Tower 把它转换成 kwargs,并传递给所选的 LDAP 组类型类。所有 LDAP 组类型常用的参数有两个:name_attr
和member_attr
。其中name_attr
默认为cn
,而member_attr
默认为member
:{"name_attr": "cn", "member_attr": "member"}要确定特定 LDAP 组类型所需的参数,请参阅有关类
init
参数的 django_auth_ldap 文档。
在 LDAP Require Group 字段中输入组可辨识名称以允许该组中的用户访问 Tower,使用的格式与文本字段中显示的格式相同。在本例中,请使用:CN=Tower Users,OU=Users,DC=website,DC=com
在 LDAP Deny Group 字段中输入组可辨识名称以防止该组中的用户访问 Tower,使用的格式与文本字段中显示的格式相同。在本例中,将该字段留空。
LDAP Start TLS 默认禁用。当 LDAP 连接未使用 SSL 时,若要启用 TLS,请点击切换到 ON。
在 LDAP USER SEARCH 字段中输入在身份验证时搜索用户的位置,使用的格式与文本字段中显示的格式相同。在本例中,使用:
[
"OU=Users,DC=website,DC=com",
"SCOPE_SUBTREE",
"(cn=%(user)s)"
]
第一行指定在 LDAP 树中搜索用户的位置。在上例中,从 DC=website,DC=com
开始以递归方式搜索用户。
第二行指定搜索用户的范围:
SCOPE_BASE:此值只用于指定仅搜索基本 DN 处的条目,从而只返回该条目
SCOPE_ONELEVEL:此值用于指定搜索基本 DN 下某一个级别的所有条目,但不包括基本 DN,且不包括基本 DN 下某一级别下的条目。
SCOPE_SUBTREE:此值用于指定搜索所有级别的全部条目,且包括指定的基本 DN。
第三行指定存储用户名的键名。
注解
对于多个搜索查询,正确的语法是:
[
[
"OU=Users,DC=northamerica,DC=acme,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
],
[
"OU=Users,DC=apac,DC=corp,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
],
[
"OU=Users,DC=emea,DC=corp,DC=com",
"SCOPE_SUBTREE",
"(sAMAccountName=%(user)s)"
]
]
在 LDAP Group Search 文本字段中,指定应当搜索哪些组以及如何搜索它们。在本例中,使用:
[
"dc=example,dc=com",
"SCOPE_SUBTREE",
"(objectClass=group)"
]
第一行指定应当搜索组的基本 DN。
第二行指定范围,与用户指令的范围相同。
第三行指定在您使用的 LDAP 中组对象的 objectclass
是什么。
在 LDAP User Attribute Map 文本字段中输入用户属性。在本例中,使用:
{
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
上面的示例按姓从键 sn
中检索用户。您可以对用户使用相同的 LDAP 查询,以找出他们存储在哪些键下。
在 LDAP User Flags by Group 文本字段中输入用户配置集标志。在本例中,使用以下语法将 LDAP 用户设置为“Superusers”和“Auditors”:
{
"is_superuser": "cn=superusers,ou=groups,dc=website,dc=com",
"is_system_auditor": "cn=auditors,ou=groups,dc=website,dc=com"
}
上例检索在其配置集中标记为 superusers 或 auditor 的用户。
如需完成映射字段的详情,请参阅 LDAP 机构和团队映射。
完成后请点击 Save。
使用此表单上输入的这些值,您现在可以通过 LDAP 进行成功身份验证。
注解
Tower 不会主动同步用户,但会在用户初始登录时创建用户。
当查询对象不存在于数据库中时,Active Directory 将使用“引用(referral)”。此项不适用于 django LDAP 客户端,大部分时间最好禁用引用。将以下行添加到您的 /etc/tower/conf.d/custom.py
文件来禁用 LDAP 引用。
AUTH_LDAP_GLOBAL_OPTIONS = {
ldap.OPT_REFERRALS: False,
}
注解
在 Ansible Tower 版本 2.4.3 版及更高版本中,“引用” 被默认禁用。如果您运行的是较早版本的 Tower,您应当考虑将此参数添加到您的配置文件中。
如需完成映射字段的详情,请参阅 LDAP 机构和团队映射。
要为 LDAP 启用日志记录,您必须在 Tower 设置配置窗口中将级别设置为 DEBUG
:
点击左侧导航栏中的 Settings () 图标并选择 System。
从系统配置页面中,点击 Logging 选项卡。
滚动到底部,将 Logging Aggregator Level Threshold 字段设置为 Debug。
点击 Save 保存您的更改。
接下来,需要根据 LDAP 的属性控制哪些用户放置到哪个 Tower 机构中(在您的机构管理员/用户和 LDAP 组之间进行映射)。
键是机构的名称。如果机构不存在,则会创建机构。值是字典,用于定义每个机构成员资格的选项。对于每个机构来说,可以指定哪些组自动成为机构的用户,以及哪些组可以管理机构。
如果为 None,则机构管理员不会根据 LDAP 值进行更新。
如果为 True,则 LDAP 中的所有用户将自动添加为机构管理员。
如果为 False,则没有 LDAP 用户自动添加为机构的管理员。
如果为字符串或字符串列表,则指定在与任何指定组匹配时将添加到机构的组 DN。
当为 True 时,不属于指定组的成员将从机构的管理列表中删除。
users:None、True/False、字符串或字符串列表/元组。应用的规则与 admins 相同。
remove_users:True/False。默认为 False。应用的规则与 remove_admins 相同。
{
"LDAP Organization": {
"admins": "cn=engineering_admins,ou=groups,dc=example,dc=com",
"remove_admins": false,
"users": [
"cn=engineering,ou=groups,dc=example,dc=com",
"cn=sales,ou=groups,dc=example,dc=com",
"cn=it,ou=groups,dc=example,dc=com"
],
"remove_users": false
},
"LDAP Organization 2": {
"admins": [
"cn=Administrators,cn=Builtin,dc=example,dc=com"
],
"remove_admins": false,
"users": true,
"remove_users": false
}
}
组成员(用户)和 LDAP 组之间的映射。键是团队名称(如果不存在就会创建)。值是每个团队成员资格选项的字典,其中每项可以包含以下参数:
如果机构和团队名称的组合不存在,将会创建团队。如果机构不存在,则会首先创建机构。
users:None、True/False、字符串或字符串列表/元组。
如果为 None,则不会更新团队成员。
如果为 True/False,则所有 LDAP 用户将作为团队成员添加/删除。
如果为字符串或字符串列表,则指定组 DN。如果用户是这些组中任意组的成员,则用户将添加为团队成员。
remove:True/False。默认为 False。当为 True 时,不是给定组成员的用户将从团队中删除。
{
"LDAP Engineering": {
"organization": "LDAP Organization",
"users": "cn=engineering,ou=groups,dc=example,dc=com",
"remove": true
},
"LDAP IT": {
"organization": "LDAP Organization",
"users": "cn=it,ou=groups,dc=example,dc=com",
"remove": true
},
"LDAP Sales": {
"organization": "LDAP Organization",
"users": "cn=sales,ou=groups,dc=example,dc=com",
"remove": true
}
}