Documentation

21. 设置企业级身份验证

这部分介绍了为以下企业级系统设置身份验证:

注解

对于 LDAP 身份验证,请参阅 设置 LDAP 身份验证

SAML、RADIUS 和 TACACS+ 用户归类为“企业”用户。以下规则适用于企业用户:

  • 企业用户只能在通过远程身份验证后端第一次成功登录时创建。

  • 如果在控制器中已创建了名称相同的非企业用户,则无法创建/验证同名的企业用户。

  • 如果启用了企业后端,企业用户的控制器密码应始终为空,任何用户均不能对其进行设置。

  • 如果禁用了企业后端,则可通过设置密码字段将企业用户转换为普通的控制器用户。但是,此操作不可逆,因为转换后的控制器用户将不再被视为企业用户。

21.1. Azure AD 设置

要为 Microsoft Azure Active Directory (AD) 设置企业级身份验证,您将需要通过注册您的机构拥有的应用从 Azure 获取 OAuth2 密钥和 secret,网址为 https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app。每个密钥和 secret 必须属于一个唯一的应用,且不能在不同身份验证后端之间共享或重复使用。为了注册应用程序,您必须为其提供网页 URL,该 URL 是 Settings Authentication 用户界面中显示的回调 URL。

  1. 点左侧导航栏中的 Settings

  2. 在 Settings 窗口左侧,点 Authentication 选项列表中的 Azure AD settings

  3. Azure AD OAuth2 Callback URL 字段已预先填充且不可编辑。注册应用程序后,Azure 会显示应用程序 ID 和对象 ID。

  4. Edit 将 Azure 的应用 ID 复制并粘贴到 Azure AD OAuth2 Key 字段中。

    遵循 Azure AD 的文档中将应用连接到 Microsoft Azure Active Directory 的说明,向客户端提供密钥(只显示一次)以进行身份验证。

  5. 将为 Azure AD 应用创建的实际 secret 密钥复制到 Settings - Authentication 屏幕的 Azure AD OAuth2 secret 字段。

  6. 如需完成映射字段的详情,请参阅 机构和团队映射

  7. 完成后请点击 Save

  8. 要验证是否已正确配置了身份验证,请登出 automation controller,登录屏幕现在将会显示 Microsoft Azure 徽标,以允许使用这些凭证登录。

_images/configure-tower-auth-azure-logo.png

如需 Azure AD 中应用注册的基础知识,请参阅 Azure AD Identity Platform (v2) 概述。

21.3. RADIUS 设置

automation controller 可以配置为集中使用 RADIUS 作为身份验证信息的来源。

  1. 点左侧导航栏中的 Settings

  2. 在 Settings 窗口左侧,从 Authentication 选项列表中点 RADIUS settings

  3. Edit,在 Radius Server 字段中输入 Radius 服务器的主机或 IP。如果此字段留空,则禁用 Radius 身份验证。

  4. 在接下来的两个字段中输入端口和 secret 信息。

  5. 完成后请点击 Save

21.4. SAML 设置

SAML 允许身份提供程序(IdP - 提供单点登录服务的服务器系统)和服务提供程序(本例中为 automation controller)之间交换身份验证和授权数据。automation controller 可以配置为与 SAML 对话,以便验证(创建/登录/注销)控制器用户身份。用户团队和机构成员资格可以嵌入到 SAML 对控制器的响应。

_images/configure-tower-auth-saml-topology.png

以下说明将 automation controller 称为服务提供程序。要通过 RHSSO (keycloak) 验证用户身份,请参阅 Red Hat Single Sign On Integration with the Automation Controller 博客。

设置 SAML 身份验证:

  1. 点左侧导航栏中的 Settings

  2. 在 Settings 窗口左侧,点 Authentication 选项列表中的 SAML settings

  3. SAML Assertion Consume Service (ACS) URLSAML Service Provider Metadata URL 字段预先填充且不可编辑。请联系身份提供程序管理员并提供这些字段中包含的信息。

  4. Edit,将 SAML Service Provider Entity ID 设置为与 Base URL of the controller host 项相同。Base URL of the controller host 可以在 Miscellaneous System 设置界面中找到(在左面的浏览栏中点 Settings)。通过 API,可在 CONTROLLER_BASE_URL 变量下的 /api/v2/settings/system 中查看该项。实体 ID 可设置为任何一个单独的控制器集群节点,但最好的方法是将其设置为 Service Provider 的 URL。请确保 Base URL 与负载均衡器(如果使用)的 FQDN 匹配。

注解

Base URL 对于集群中的每个节点来说都是不同的。通常,负载均衡器会位于很多控制器集群节点的前面以提供一个单一的入口点,控制器 Cluster FQDN。SAML Service Provider 必须能够建立出站连接,并可路由到控制器 Cluster Node,或 SAML Service Provider Entity ID 中设置的控制器 Cluster FQDN。

在本例中,Service Provider 是控制器集群,因此 ID 设置为控制器 Cluster FQDN。

_images/configure-tower-auth-saml-spentityid.png
  1. 为 Ansible 集群创建服务器证书。通常,当配置 Ansible 集群时,控制器节点将配置为仅处理 HTTP 流量,且负载均衡器将作为 SSL 终止点。在这种情况下,负载均衡器需要 SSL 证书,而单独控制器 Cluster Nodes 不需要。SSL 可以根据单独控制器节点启用或禁用,但在使用 SSL 终止的负载均衡器时应当禁用。建议使用非过期自签名证书,以避免定期更新证书。这样,在有用户忘记更新证书时身份验证将不会失败。

注解

SAML Service Provider Public Certificate 字段应包含整个证书,包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”。

如果您的证书使用的是 CA 捆绑包,请在此字段中包含整个捆绑包。

_images/configure-tower-auth-saml-cert.png

作为公共证书的示例:

-----BEGIN CERTIFICATE——
... cert text ...
-----END CERTIFICATE——
  1. 为控制器创建可选私钥以用作服务提供程序 (SP),并将其输入到在 SAML Service Provider Private Key 字段中。

作为私钥的示例:

-----BEGIN PRIVATE KEY--
... key text ...
-----END PRIVATE KEY——
  1. SAML Service Provider Organization Info 字段的 SSO 过程中为 IdP 提供控制器集群的信息。

{
  "en-US": {
    "url": "http://www.example.com",
    "displayname": "Example",
    "name": "example"
  }
}

例如:

_images/configure-tower-auth-saml-org-info.png

注解

为了在控制器中正确配置 SAML,需要这些字段。

  1. 请在 SAML Service Provider Technical Contact 字段中为 IdP 提供技术联系信息。请勿删除此字段的内容。

{
"givenName": "Some User",
"emailAddress": "[email protected]"
}

例如:

_images/configure-tower-auth-saml-techcontact-info.png
  1. 请在 SAML Service Provider Support Contact 字段中为 IdP 提供支持联系信息。请勿删除此字段的内容。

{
"givenName": "Some User",
"emailAddress": "[email protected]"
}

例如:

_images/configure-tower-auth-saml-suppcontact-info.png
  1. SAML Enabled Identity Providers 字段中,提供有关如何连接到列出的每个身份提供程序的信息。控制器在以下示例中需要以下 SAML 属性:

Username(urn:oid:0.9.2342.19200300.100.1.1)
Email(urn:oid:0.9.2342.19200300.100.1.3)
FirstName(urn:oid:2.5.4.42)
LastName(urn:oid:2.5.4.4)

如果这些属性未知,请将现有的 SAML 属性映射到名、姓、电子邮件和用户名。

为每个 IDp 配置所需密钥:

  • attr_user_permanent_id - 用户的唯一标识符。它可以配置为与 IdP 发送的任何属性匹配。通常,如果 SAML:nameid 属性发送到控制器节点,则该项设置为 name_id,也可以是用户名属性或自定义唯一标识符。

  • entity_id - 身份提供程序管理员提供的实体 ID。管理员为控制器创建一个 SAML 配置集,它会生成唯一的 URL。

  • url - 在激活单点登录 (SSO) 时,SSO URL 控制器会重定向用户。

  • x509_cert - 由 IdP 管理员提供的证书,由身份提供程序上创建的 SAML 配置集生成。删除 --BEGIN CERTIFICATE----END CERTIFICATE-- 标头,然后以不间断字符串形式输入证书。

支持多个 SAML IdP。一些 IdP 可能会使用与默认的 OID (https://github.com/omab/python-social-auth/blob/master/social/backends/saml.py) 不同的属性来提供用户数据。SAML NameID 是一项特殊属性,一些身份提供程序使用它来告知服务提供程序(控制器集群)唯一用户标识符是什么。如果使用它,则将 attr_user_permanent_idname_id 设置为如示例中所示。每个 IdP 的其它属性名称可能会被覆盖,如下所示。

{
"myidp": {
  "entity_id": "https://idp.example.com",
  "url": "https://myidp.example.com/sso",
  "x509cert": ""
},
"onelogin": {
  "entity_id": "https://app.onelogin.com/saml/metadata/123456",
  "url": "https://example.onelogin.com/trust/saml2/http-post/sso/123456",
  "x509cert": "",
  "attr_user_permanent_id": "name_id",
  "attr_first_name": "User.FirstName",
  "attr_last_name": "User.LastName",
  "attr_username": "User.email",
  "attr_email": "User.email"
  }
}
_images/configure-tower-auth-saml-idps.png

警告

请勿创建与另一个用户共享同一电子邮件的 SAML 用户(包括非 SAML 用户)。这样做将会导致帐户合并。请注意,System Admin 用户存在此同样的行为,因此,使用与 System Admin 用户相同的电子邮件地址的 SAML 登录将会获得 System Admin 的权限。为了便于以后参考,您可以基于 SAML 映射删除(或添加)Admin 特权,如后续步骤所述。

注解

IdP 使用已知的 SAML urn 提供电子邮件、姓和名。IdP 使用自定义 SAML 属性标识用户,该属性是控制器无法读取的属性。但是,控制器可以识别唯一标识符名称,即 URN。将 SAML“Name”属性中列出的 URN 用于用户属性,如下例所示。

_images/configure-tower-auth-saml-idps-urn.png
  1. (可选)提供 SAML Organization Map。如需更多详情,请参阅 机构和团队映射

  2. 控制器可以配置为查找包含团队和机构成员资格的特定属性,以在用户登录控制器时与用户关联。属性名称在 SAML Organization Attribute MappingSAML Team Attribute Mapping 字段中定义。

SAML 机构属性映射示例

以下是 SAML 属性示例,它将用户机构成员资格嵌入属性 member-of 中。

<saml2:AttributeStatement>
    <saml2:Attribute FriendlyName="member-of" Name="member-of"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
        <saml2:AttributeValue>Engineering</saml2:AttributeValue>
        <saml2:AttributeValue>IT</saml2:AttributeValue>
        <saml2:AttributeValue>HR</saml2:AttributeValue>
        <saml2:AttributeValue>Sales</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute FriendlyName="admin-of" Name="admin-of"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
        <saml2:AttributeValue>Engineering</saml2:AttributeValue>
    </saml2:Attribute>
</saml2:AttributeStatement>

以下是对应的控制器配置。

{
  "saml_attr": "member-of",
  "saml_admin_attr": "admin-of",
  "remove": true,
  "remove_admins": false
}

saml_attr:可找到机构数组的 SAML 属性名称,remove 设置为 True,以便在将用户添加到机构列表中之前从所有机构中删除该用户。若要在将用户添加到 SAML 中的机构时让用户保留在其所在机构中,请将 remove 设置为 False

saml_admin_attr:与 saml_attr 属性类似,但不传递机构成员资格,此属性传递管理员机构权限。

SAML 团队属性映射示例

以下是包含列表成员资格的 SAML 属性的另一个示例。

<saml:AttributeStatement>
     <saml:Attribute
        xmlns:x500="urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500"
        x500:Encoding="LDAP"
        NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
        Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.1"
        FriendlyName="eduPersonAffiliation">
        <saml:AttributeValue
            xsi:type="xs:string">member</saml:AttributeValue>
        <saml:AttributeValue
            xsi:type="xs:string">staff</saml:AttributeValue>
        </saml:Attribute>
</saml:AttributeStatement>
{
    "saml_attr": "eduPersonAffiliation",
    "remove": true,
    "team_org_map": [
    {
        "team": "member",
        "organization": "Default1"
    },
    {
        "team": "staff",
        "organization": "Default2"
    }
  ]
}
  • saml_attr:能够找到团队数组的 SAML 属性名称。

  • removeremove 设置为 True,在将用户添加到团队列表前从所有团队中删除该用户。若要在将用户添加到 SAML 属性中的团队时让用户保留在其所在的团队,请 remove 设置为 False

  • team_org_map:表单 { "team": "<AWX Team Name>", "organization": "<AWX Org Name>" } 的一组字典,用于定义来自控制器团队 -> 控制器机构的映射。需要此项是因为控制器中的多个机构中存在相同名称的团队。没有此映射,SAML 属性中列出的团队所属的机构将模糊不清。

您可以创建一个别名来覆盖 SAML 团队属性映射 中的团队和机构。当 SAML 后端发送复杂的组名称时,这个选项变得非常方便,如下例所示:

{
 "remove": false,
 "team_org_map": [
  {
   "team": "internal:unix:domain:admins",
   "organization": "Default",
   "team_alias": "Administrators"
  },
  {
   "team": "Domain Users",
   "organization_alias": "OrgAlias",
   "organization": "Default"
  }
 ],
 "saml_attr": "member-of"
}

一旦用户身份经过验证,控制器会如预期创建机构和团队别名。

  1. (可选)在 SAML Team Map 字段中提供团队成员资格映射。如需更多详情,请参阅 机构和团队映射

  2. 也可在 SAML Security Config 字段中提供安全设置。此字段等同于 API 中的 SOCIAL_AUTH_SAML_SECURITY_CONFIG 字段。如需更多详情,请参阅 OneLogin's SAML Python Toolkit

控制器在用户通过 SAML 登录时使用 python-social-auth 库。该库依赖于 python-saml 库来提供下两个可选字段 SAML Service Provider Extra Configuration Data**SAML IDP to EXTRA_DATA Attribute Mapping**的设置。

  1. SAML Service Provider Extra Configuration Data 字段等同于 API 中的 SOCIAL_AUTH_SAML_SP_EXTRA。请参阅 python-saml library documentation,了解有效服务提供程序的额外(SP_EXTRA)参数。

  1. SAML IDP to EXTRA_DATA Attribute Mapping 字段等同于 API 中的 SOCIAL_AUTH_SAML_EXTRA_DATA。如需更多信息,请参阅 Python 的 SAML Advanced Settings 文档。

  1. 完成后请点击 Save

  2. 要验证是否正确配置了身份验证,请将 **SAML Service Provider Metadata URL ** 中自动生成的 URL 加载到浏览器中。它应当会输出 XML 输出,否则配置不正确。

    另外,automation controller 的注销和登录屏幕现在会显示 SAML 徽标,以指示它作为登录 automation controller 的替代方法。

    _images/configure-tower-auth-saml-logo.png

21.4.1. 透明 SAML 登录

要使透明登录功能可以正常工作,您必须首先使 IdP 启动的登录正常工作。要实现此目标,请执行以下操作:

  1. 如前所述,将 IdP 上的 RelayState 设置为 SAML Enabled Identity Providers 字段中 IdP 定义的密钥。在上面给出的示例中,RelayState 将会需要 myidponelogin

  2. 一旦可以正常工作,为非登录的用户指定一个重定向 URL,它不同于默认的控制器登录页。在左面的浏览栏中,使用 Settings 菜单的 Miscellaneous System 设置窗口中的 Login redirect override URL 项。如示例中所示,它被设置为 /sso/login/saml/?idp=<name-of-your-idp> 用于透明的 SAML 登录。

_images/configure-tower-system-login-redirect-url.png

注解

以上是一个典型的 IdP 格式的示例,但可能并不适合于您的特定情况。您可能需要联系您的 IdP 以便能正确地以透明方式重定向 URL,因为该 URL 并不适用于所有 IdP。

  1. 配置了透明 SAML 登录后,若要使用本地凭证或不同的 SSO 登录,请直接转至 https://<your-tower-server>/login。这提供了标准的控制器登录页面,包括 SSO 身份验证按钮,并允许您使用任何配置的方法登录。

21.5. TACACS+ 设置

Terminal Access Controller Access-Control System Plus (TACACS+) 是一个协议,它处理通过集中服务器进行联网访问控制的远程身份验证和相关服务。特别是,TACACS+ 提供了身份验证、授权和核算 (AAAA) 服务,您可以在其中配置 automation controller 以用作身份验证的来源。

  1. 点左侧导航栏中的 Settings

  2. 在 Settings 窗口左侧,从 Authentication 选项列表中点 TACACs+ settings

  3. Edit,在以下字段中输入信息:

  • TACACS+ Server:提供要进行身份验证的 TACACS+ 服务器的主机名或 IP 地址。如果此字段留空,则禁用 TACACS+ 身份验证。

  • TACACS+ Port:TACACS+ 默认使用端口 49,该端口已预先填充。

  • TACACS+ Secret:TACACS+ 身份验证服务器的 secret 键。

  • TACACS+ Auth Session Timeout:会话超时值,以秒为单位。默认值为 5 秒。

  • TACACS+ Authentication Protocol*: TACACS+ 客户端使用的协议。选项为 asciipap

_images/configure-tower-auth-tacacs.png
  1. 完成后请点击 Save