Documentation

21. 设置企业级身份验证

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

注解

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

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

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

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

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

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

21.1. Azure Active Directory (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 是 Configure Tower 用户界面中显示的回调 URL。

  1. 在 Ansible Tower 用户界面中,从 Settings (settings) 菜单屏幕中点击 Authentication

  1. 如果没有处于默认视图,请选择 Azure AD 标签页。

_images/configure-tower-auth-azure-select.png
  1. Azure AD OAuth2 Callback URL 字段已预先填充且不可编辑。

注册应用程序后,Azure 会显示应用 ID 和对象 ID。

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

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

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

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

  3. 完成后请点击 Save

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

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

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

21.3. RADIUS 身份验证设置

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

  1. 在 Ansible Tower 用户界面中,从 Settings (settings) 菜单屏幕中点击 Authentication

在默认情况下,最初会显示 Azure AD 标签页。

  1. 选择 Radius 标签页。

_images/configure-tower-auth-radius-select.png
  1. Radius Server 字段中输入 Radius 服务器的主机或 IP。如果此字段留空,则禁用 Radius 身份验证。

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

  3. 完成后请点击 Save

21.4. SAML 身份验证设置

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

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

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

设置 SAML 身份验证:

  1. 在 Ansible Tower 用户界面中,从 Settings (settings) 菜单屏幕中点击 Authentication

在默认情况下,最初会显示 Azure AD 标签页。

  1. 选择 SAML 标签页。

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

以下步骤描述了 all 项以及它们的作用。要实现透明的 SAML 登录功能,最小的必填字段在用户界面中被标记为星号(*)。

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

  2. SAML Service Provider Entity ID 设置为与 Tower Base URL 相同。Tower Base URL 可以在 Configure Tower 屏幕的 System 标签页中找到,您可通过 Settings settings 图标访问。通过 API,可在 TOWER_URL_BASE 变量下的``/api/v2/settings/system`` 中查看该项。实体 ID 可设置为任何一个单独的 Tower 集群节点,但最好的方法是将其设置为 Service Provider 的 URL。请确保 Base URL 与负载均衡器(如果使用)的 FQDN 匹配。

注解

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

在本例中,Service Provider 是 Tower Cluster,因此 ID 设置为 Tower Cluster FQDN。

_images/configure-tower-auth-saml-spentityid.png
  1. 为 Ansible 集群创建服务器证书。通常,当配置 Ansible 集群时,Tower 节点将配置为仅处理 HTTP 流量,且负载均衡器将作为 SSL 终止点。在这种情况下,负载均衡器需要 SSL 证书,而单独 Tower Cluster Nodes 不需要。SSL 可以根据单独 Tower 节点启用或禁用,但在使用 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. 为 Tower 创建可选私钥以用作服务提供程序 (SP),并将其输入到在 SAML Service Provider Private Key 字段中。

作为私钥的示例:

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

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

例如:

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

注解

为了在 Tower 中正确配置 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 字段中,提供有关如何连接到列出的每个身份提供程序的信息。在以下示例中,Tower 需要使用以下 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 属性发送到 Tower 节点,则该项设置为 name_id,也可以是用户名属性或自定义唯一标识符。

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

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

  • 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 是一项特殊属性,一些身份提供程序使用它来告知服务提供程序(Tower 集群)唯一用户标识符是什么。如果使用它,则将 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

警告

attr_username 必须引用唯一的 per-account 属性。 例如,如果 attr_username 引用 User.email 和一个与另一个用户(包括一个非 SAML 用户)共享同一电子邮件的 SAML 用户,则重复的电子邮件帐户将被合并。 请注意,相同的行为同样适用于 System Admin 用户。因此使用与 System Admin 用户相同的电子邮件地址的 SAML 登录会以 System Admin 权限登录。 作为以后的参考,您可以根据 SAML 映射删除(或添加)管理员权限,如后续步骤中所述。

注解

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

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

  2. Tower 可以配置为查找包含团队和机构成员资格的特定属性,以在用户登录 Tower 时与用户关联。属性名称在 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>

以下是对应的 Tower 配置。

{
  "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>" } 的一组字典,用于定义来自 Tower 团队 -> Tower 机构的映射。需要此项是因为 Tower 中的多个机构中存在相同名称的团队。没有此映射,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"
}

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

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

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

Tower 在用户通过 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 输出,否则配置不正确。

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

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

21.4.1. 透明 SAML 登录

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

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

  2. 一旦透明登录正常工作,在 Ansible Tower 用户界面的 Settings (settings) 菜单的 Systems 窗口中,使用 Login Redirect Override URL 字段指定非登录用户的重定向 URL 指向默认 Tower 登录页面以外的其他位置。该项应当设置为 /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。这提供了标准的 Tower 登录页面,包括 SSO 身份验证按钮,并允许您使用任何配置的方法登录。

21.5. TACACS+ 身份验证设置

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

  1. 在 Ansible Tower 用户界面中,从 Settings (settings) 菜单屏幕中点击 Authentication

在默认情况下,最初会显示 Azure AD 标签页。

  1. 选择 TACACs+ 标签页。

_images/configure-tower-auth-tacacs-select.png
  1. 在以下字段中输入信息:

  • 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