本文永久链接: https://www.xtplayer.cn/rancher/authentication/rancher2-ad-authentication/

如果您的组织使用 Microsoft Active Directory 作为统一用户管理系统,则 Rancher 可以集成 Active Directory 服务以进行统一身份验证。Rancher 根据 Active Directory 管理的用户和组来控制对集群和项目的访问,同时允许最终用户在登录 Rancher UI 时使用其 AD 凭据进行身份验证。

Rancher 使用 LDAP 与 Active Directory 服务通信。因此,Active Directory 的身份验证流程与 OpenLDAP身份验证集成方法相同。

注意 在开始之前,请熟悉 外部身份验证配置和主要用户 的概念。

先决条件

您需要通过 AD 管理员创建或获取新的 AD 用户,以用作 Rancher 的服务帐户。此用户必须具有足够的权限才能执行 LDAP 搜索并读取 AD 域下的用户和组的属性。

通常应该使用域用户帐户(非管理员)来实现此目的,因为默认情况下此用户对域中的大多数对象具有只读权限。

但请注意,在某些锁定的 Active Directory 配置中,此默认行为可能不适用。在这种情况下,您需要确保服务帐户用户至少具有在基本 OU(封闭用户和组)上授予的读取和列出内容权限,或者全局授予域。

使用 TLS? 如果 AD 服务器使用的证书是自签名的,或者不是来自公认的证书颁发机构,请确保手头有 PEM 格式的 CA 证书(与所有中间证书连接)。您必须在配置期间设置此证书,以便 Rancher 能够验证证书。

选择 AD 认证

  1. 使用本地 admin 帐户登录 Rancher UI 。
  2. 全局视图中,导航到安全>认证
  3. 选择 Active Directory,配置 AD 认证参数。

配置 AD 服务器

在标题为配置 Active Directory 服务器的部分中,填写特定于 Active Directory 服务的配置信息。有关每个参数所需值的详细信息,请参阅下表。

注意 如果您不确定要在 用户/组 搜索库字段中输入什么值, 请查看 [使用 ldapsearch 识别 Search-Base 和架构](/rancher/authentication/rancher2-ad-authentication/#使用 ldapsearch 识别 Search-Base 和架构)。

表 1:AD 服务器参数

参数描述
主机名指定 AD 服务器的域名或 IP 地址
端口指定 Active Directory 服务器侦听的端口。未加密的 LDAP 通常使用标准端口 389,而 LDAPS 使用端口 636
TLS选中此框以启用 LDAP over SSL/TLS(通常称为 LDAPS)。
服务器连接超时Rancher 无法访问 AD 服务器后等待的持续时间。
服务帐户用户名输入对您的登录域具有只读访问权限的 AD 帐户的用户名(请参阅先决条件)。用户名可以用 NetBIOS 格式输入(例如: DOMAIN\serviceaccount)或 UPN 格式(例如: serviceaccount@domain.com)。
服务帐户密码服务帐户的密码。
默认登录域使用 AD 域的 NetBIOS 名称配置此字段时,在没有域(例如 jdoe)时输入的用户名将在绑定到 AD 服务器时自动转换为斜线的 NetBIOS 登录(例如 LOGIN_DOMAIN\jdoe)。如果您的用户使用 UPN(例如 jdoe@acme.com)作为用户名进行身份验证,则此字段必须为空。
User Search Base目录树中节点的专有名称,从该节点开始搜索用户对象。所有用户必须是此基本 DN 的后代。例如:ou=people,dc=acme,dc=com
Group Search Base如果您的组位于与 User Search Base 配置的节点不同的节点下,则需要在此处提供可分辨名称。否则将其留空。例如:ou=groups,dc=acme,dc=com

自定义架构(可选)

注意 如果您的 AD 服务器为标准配置,那可以跳过此步骤

在标题为自定义架构部分中,您必须为 Rancher 提供与目录中使用的模式相对应的用户和组属性的正确配置。

Rancher 使用 LDAP 查询来搜索和检索有关 Active Directory 中的用户和组的信息,本节中配置的属性映射用于构建搜索过滤器并解析组成员身份。因此,提供的设置反映 AD 域的实际情况至关重要。

注意 如果您不熟悉 Active Directory 域中使用的架构,请参阅使用 ldapsearch 识别搜索库和架构以确定正确的配置值。

用户架构

下表详细介绍了用户架构部分配置的参数。

表 2:用户架构配置参数

参数描述
对象类型域中用户对象的类型名称。
用户名属性其值作为显示名称。
登录属性该值与用户在登录 Rancher 时输入的凭据的用户名部分相匹配的属性。如果您的用户使用其 UPN(例如“ jdoe@acme.com”)作为用户名进行身份验证,则通常必须将此字段设置为 userPrincipalName。否则,对于旧的 NetBIOS 样式的登录名称(例如“jdoe”)通常是这样 sAMAccountName
用户成员属性包含用户所属组的属性。
搜索属性当用户输入文本以在 UI 中添加用户或组时,Rancher 将查询 AD 服务器并尝试按此设置中提供的属性匹配用户。可以通过使用管道(“|”)符号分隔多个属性来指定它们。要匹配 UPN 用户名(例如 jdoe@acme.com ),通常应将此字段的值设置为 userPrincipalName
用户启用的属性包含表示用户帐户标志的按位枚举的整数值的属性。Rancher 使用它来确定是否禁用了用户帐户。您通常应将此设置保留为 AD 标准 userAccountControl
禁用状态位掩码这是 User Enabled Attribute 指定已禁用的用户帐户的值。您通常应将此设置保留为 Microsoft Active Directory 架构中指定的默认值“2”(请参阅此处)。

组架构

下表详细说明了组架构配置的参数。

表 3: 组架构配置参数

参数描述
对象类型域中组对象的类型名称。
名称属性其值作为显示名称。
组成员用户属性格式与中的组成员匹配的用户属性的名称 Group Member Mapping Attribute
组成员映射属性包含组成员的组属性的名称。
搜索属性在将群组添加到集群或项目时用于构建搜索过滤器的属性。请参阅用户架构的说明 Search Attribute
组 DN 属性group 属性的名称,其格式与描述用户成员身份的 user 属性中的值匹配。见 User Member Attribute
嵌套组成员资格此设置定义 Rancher 是否应解析嵌套组成员资格。仅在您的组织使用这些嵌套成员资格时使用(即您拥有包含其他组作为成员的组)。

使用 ldapsearch 识别 Search Base 和架构

为了成功配置 AD 身份验证,您必须提供与 AD 服务器的层次结构和架构相关的正确配置。

ldapsearch工具可以帮助您查询 AD 服务器用户和组对象的模式。

处于演示的目的,我们假设:

  • Active Directory 服务器的主机名为 ad.acme.com
  • 服务器正在侦听端口上的未加密连接 389
  • Active Directory 域是 acme
  • 拥有一个有效的 AD 帐户,其中包含用户名 jdoe 和密码 secret

识别 Search Base

首先,我们将使用 ldapsearch 来识别用户和组的父节点的专有名称(DN):

ldapsearch -x -D "acme\jdoe" -w "secret" -p 389 \
-h ad.acme.com -b "dc=acme,dc=com" -s sub "sAMAccountName=jdoe"

此命令执行 LDAP 搜索,search base 设置为根域(-b "dc=acme,dc=com"),过滤器以用户(sAMAccountNam=jdoe)为目标,返回所述用户的属性:

由于在这种情况下用户的 DN 是 CN=John Doe,CN=Users,DC=acme,DC=com[5],我们应该使用父节点 DN 配置用户 Search BaseCN=Users,DC=acme,DC=com

类似地,基于 memberOf 属性[4]中引用的组的 DN,组 Search Base 的正确值应该是该值的父节点,即:OU=Groups,DC=acme,DC=com

识别用户架构

上述 ldapsearch 查询的输出结果还可以确定用户架构的配置:

  • Object Class: person [1]
  • Username Attribute: name [2]
  • Login Attribute: sAMAccountName [3]
  • User Member Attribute: memberOf [4]

注意 如果组织中的 AD 用户使用他们的 UPN(例如 jdoe@acme.com )而不是短登录名进行身份验证,那么我们必须将 Login Attribute 设置为 userPrincipalName
还可以 Search Attribute 参数设置为 sAMAccountName | name。这样,通过输入用户名或全名,可以通过 Rancher UI 将用户添加到集群/项目中。

识别组架构

接下来,我们查询与此用户关联的一个组,在这种情况下 CN=examplegroup,OU=Groups,DC=acme,DC=com

ldapsearch -x -D "acme\jdoe" -w "secret" -p 389 \
-h ad.acme.com -b "ou=groups,dc=acme,dc=com" \
-s sub "CN=examplegroup"

以上命令将显示组对象的属性:

  • Object Class: group [1]
  • Name Attribute: name [2]
  • Group Member Mapping Attribute: member [3]
  • Search Attribute: sAMAccountName [4]

查看成员属性值,我们可以看到它包含引用用户的 DN。这对应用户对象中的 distinguishedName 属性。因此必须将 Group Member User Attribute 参数的值设置为此属性值。以同样的方式,我们可以观察到用户对象中 memberOf 属性中的值对应于组的 distinguishedName [5]。因此,我们需要将 Group DN Attribute 参数的值设置为此属性值。

测试认证

完成配置后,继续测试与 AD 服务器的连接。如果测试成功,将隐式启用使用已配置的 Active Directory 进行身份验证。

注意 与在此步骤中输入的凭据相关的 AD 用户将映射到本地主体帐户并在 Rancher 中分配管理员权限。因此,您应该有意识地决定使用哪个 AD 帐户执行此步骤。

  1. 输入应映射到本地主帐户的 AD 帐户的用户名密码
  2. 单击使用 Active Directory进行身份验证以完成设置。

注意 如果 LDAP 服务中断,您可以使用本地帐户和密码登录。