Documentation

20. 设置社交身份认证

身份验证方法可简化最终用户的登录过程,使用现有登录信息提供单点登录以登录到第三方网站,而不是为该网站专门创建新登录帐户。

在 Ansible Tower 版本 3.1 之前,只能在 /etc/tower/conf.d/ 中的配置文件中配置帐户验证。从 Ansible Tower 版本 3.1 开始,不再使用平面文件,配置文件现在被保存到 PostgreSQL 数据库中。因此,必须在 Ansible Tower 用户界面中配置帐户身份验证。如需相关说明,请参阅 Tower 配置 部分。

Ansible Tower 中的帐户身份验证可以被配置为集中使用 OAuth2,企业级帐户身份验证可以配置 SAML、RADIUS 或 LDAP 作为身份验证信息来源。

对于提供帐户信息的网站,如 Microsoft Azure、Google 或 GitHub,则通常使用 OAuth 标准来实施帐户信息。OAuth 是一个安全授权协议,通常与帐户身份验证一同使用,以授予第 3 个方应用“会话令牌”,允许它们代表用户向提供程序发出 API 调用。

SAML(Security Assertion Markup Language)是一个基于 XML 的、开放式的数据格式,用于在身份提供程序和服务提供程序之间交换帐户身份验证和授权数据。

使用 RADIUS 分布式客户端/服务器系统,您可以保护网络不受未授权访问的影响,并可在为远程用户维护网络访问时需要高安全性的网络环境中实施。

20.1. Google OAuth2 设置

要设置 Google 的身份验证,您需要获取 web 应用程序的 OAuth2 密钥和 secret。为此,您必须首先创建一个项目并使用 Google 进行设置。如需相关说明,请参阅 https://support.google.com/googleapi/answer/6158849。如果您已经完成了设置过程,您可以进入 Google API Manager Console 的 Credentials 部分来访问这些凭证。OAuth2 密钥(客户端 ID)和 secret(客户端 secret)将用于提供 Ansible Tower 用户界面中所需的字段。

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

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

  1. 选择 Google OAuth2 选项卡。

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

Google OAuth2 Callback URL 字段已预先填充且不可编辑。

  1. 以下字段也会预先填充。如果没有,请使用 web 应用设置过程中提供的 Google 凭证,并寻找与以下示例中所示相同格式的值:

  • 将 Google 的客户端 ID 复制并粘贴到 Google OAuth2 Key 字段中。

  • 将 Google 的客户端 secret 复制并粘贴到 Google OAuth2 Secret 字段中。

    _images/configure-tower-auth-google.png
  1. 要完成剩余的可选字段,请参考每个字段中的工具提示,以获得说明和所需格式。

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

  3. 完成后请点击 Save

  4. 要验证是否已正确配置了身份验证,请注销 Ansible Tower,登录屏幕现在将会显示 Google 徽标,以指定它作为登录 Ansible Tower 的替代方法。

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

20.2. GitHub OAuth2 设置

要设置 GitHub 的社交身份验证,您需要获取 web 应用的 OAuth2 密钥和 secret。为此,您必须首先将新应用注册到 GitHub(https://github.com/settings/developers.)。为了注册应用,您必须为其提供主页 URL,这是 Configure Tower 用户界面中显示的回调 URL。OAuth2 密钥(客户端 ID)和 secret(客户端 Secret)将用于提供 Ansible Tower 用户界面中所需的字段。

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

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

  1. 选择 GitHub 选项卡。

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

注册应用程序后,GitHub 会显示客户端 ID 和客户端 Secret。

  1. 将 GitHub 的客户端 ID 复制到 GitHub OAuth2 Key 字段中。

  2. 将 GitHub 的客户端 Secret 复制到 GitHub OAuth2 Secret 字段中。

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

  4. 完成后请点击 Save

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

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

20.2.1. GitHub 机构设置

当使用机构或者机构中团队定义帐户身份验证时,您应该使用特定的机构和团队设置。帐户身份验证可以受机构以及机构中团队的限制。

您还可以通过指定基于非机构或非团队的设置(如上所示)来选择允许所有设置。

您可以限制只有某个机构或者机构中的某个团队的用户才可以登陆到 Tower。

要为 GitHub 机构设置社交身份验证,您需要获取 web 应用的 OAuth2 密钥和 secret。为此,您必须首先在 https://github.com/organizations/<yourorg>/settings/applications 中注册您的机构拥有的应用。为了注册应用,您必须为其提供授权回调 URL,这是 Configure Tower 用户界面中显示的回调 URL。每个密钥和 secret 都必须属于一个唯一的应用,且不能在不同的后端间共享或重用。OAuth2(客户端 ID)和 secret(客户端 Secret)将用于提供 Ansible Tower 用户界面中所需的字段。

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

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

  1. 选择 GitHub 选项卡,从 GitHub 类别下拉菜单列表中选择 GutHub Org

_images/configure-tower-auth-github-org-select.png
  1. GitHub Organization OAuth2 Callback URL 字段已预先填充且不可编辑。

注册应用程序后,GitHub 会显示客户端 ID 和客户端 Secret。

  1. 将 GitHub 的客户端 ID 复制并粘贴到 GitHub Organization OAuth2 Key 字段中。

  2. 将 GitHub 的客户端 Secret 复制并粘贴到 GitHub Organization OAuth2 Secret 字段中。

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

  4. 完成后请点击 Save

  5. 要验证是否已正确配置了身份验证,请先退出 Ansible Tower。登录屏幕现在将会显示 GitHub 机构徽标来允许使用这些凭证登陆到 Ansible Tower。

_images/configure-tower-auth-github-orgs-logo.png

20.2.2. GitHub 团队设置

要为 GitHub 团队设置社交身份验证,您需要获取 web 应用的 OAuth2 密钥和 secret。为此,您必须首先在 https://github.com/organizations/<yourorg>/settings/applications 中注册您的团队拥有的应用。为了注册应用,您必须为其提供授权回调 URL,这是 Configure Tower 用户界面中显示的回调 URL。每个密钥和 secret 都必须属于一个唯一的应用,且不能在不同的后端间共享或重用。OAuth2(客户端 ID)和 secret(客户端 Secret)将用于提供 Ansible Tower 用户界面中所需的字段。

  1. 使用 GitHub API 查找团队 ID:http://fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/.。团队 ID 将用于提供 Ansible Tower 用户界面中所需的字段。

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

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

  1. 选择 GitHub 选项卡,从 GitHub 类别下拉菜单列表中选择 GutHub Team

_images/configure-tower-auth-github-team-select.png
  1. GitHub Team OAuth2 Callback URL 字段已预先填充且不可编辑。

注册应用程序后,GitHub 会显示客户端 ID 和客户端 Secret。

  1. 将 GitHub 的客户端 ID 复制并粘贴到 GitHub Team OAuth2 Key 字段中。

  2. 将 GitHub 的客户端 Secret 复制并粘贴到 GitHub Team OAuth2 Secret 字段中。

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

  4. 完成后请点击 Save

  5. 要验证是否已正确配置了身份验证,请注销 Ansible Tower,登录屏幕现在将会显示 GitHub 团队徽标,以允许使用这些凭证登录。

20.3. 机构和团队映射

20.3.1. 机构映射

您将需要根据用户名和电子邮件地址控制哪些用户放置到哪个 Tower 机构(从社交或企业身份验证帐户映射您的机构管理员/用户)。

字典键是机构名称。如果不存在机构以及许可证允许多个机构,则将创建机构。否则,无论键是什么均使用单一默认机构。

值是字典,用于定义每个机构成员资格的选项。对于每个机构来说,可以指定哪个用户自动成为机构的用户,以及哪个用户可以管理机构。

admins:None、True/False、字符串或字符串的列表/元组。

  • 如果为 None,机构管理员将不会更新。

  • 如果为 True,使用帐户身份验证的所有用户将自动添加为机构管理员。

  • 如果为 False,则没有帐户身份验证用户自动添加为机构的管理员。

  • 如果为字符串或字符串列表,指定要添加到机构中的用户的用户名和电子邮件。以 / 开头和结尾的字符串将编译成正则表达式;修饰符 i (区分大小写)和 m``(多行)可在结束 ``/ 后指定。

remove_admins:True/False。默认为 True

  • 当为 True 时,不匹配的用户将从机构的管理列表中删除。

users:None、True/False、字符串或字符串列表/元组。应用的规则与 admins 相同。

remove_users:True/False。默认为 True。应用的规则与 remove_admins 相同。

{
    "Default": {
        "users": true
    },
    "Test Org": {
        "admins": ["[email protected]"],
        "users": true
    },
    "Test Org 2": {
        "admins": ["[email protected]", "/^tower-[^@]+?@.*$/i"],
        "users": "/^[^@].*?@example\\.com$/"
    }
}

可以为每个帐户身份验证后端单独指定机构映射。如果已定义,这些配置将优先于上述全局配置。

SOCIAL_AUTH_GOOGLE_OAUTH2_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_ORG_ORGANIZATION_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_ORGANIZATION_MAP = {}
SOCIAL_AUTH_SAML_ORGANIZATION_MAP = {}

20.3.2. 团队映射

团队映射是从社交身份验证帐户的团队成员(用户)的映射。键是团队名称(如果不存在就会创建)。值是每个团队成员资格选项的字典,其中每项可以包含以下参数:

organization:字符串。团队所属机构的名称。如果机构和团队名称的组合不存在,则会创建团队。如果该机构不存在,则会首先创建机构。如果许可证不允许多个机构,团队将始终被分配给单一的默认机构。

users:None、True/False、字符串或字符串列表/元组。

  • 如果为 None,则不会更新团队成员。

  • 如果为 True/False,则所有社交身份验证用户将作为团队成员添加/删除。

  • 如果为字符串或字符串列表,指定用于匹配用户的表达式。如果用户名或电子邮件匹配,用户将被添加为团队成员。以 / 开头和结尾的字符串将编译成正则表达式;修饰符 i``(区分大小)和 ``m``(多行)可以在 ``/ 结束后指定。

remove:True/False。默认为 True。当 True 时,与规则不匹配的用户将从团队中删除。

{
    "My Team": {
        "organization": "Test Org",
        "users": ["/^[^@]+?@test\\.example\\.com$/"],
        "remove": true
    },
    "Other Team": {
        "organization": "Test Org 2",
        "users": ["/^[^@]+?@test\\.example\\.com$/"],
        "remove": false
    }
}

可以根据您的设置,为每个帐户身份验证后端单独指定团队映射。定义后,这些配置优先于上面的全局配置。

SOCIAL_AUTH_GOOGLE_OAUTH2_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_ORG_TEAM_MAP = {}
SOCIAL_AUTH_GITHUB_TEAM_TEAM_MAP = {}
SOCIAL_AUTH_SAML_TEAM_MAP = {}

取消注释以下行(即将 SOCIAL_AUTH_USER_FIELDS 设置为空列表),以防止创建新用户帐户。只有之前已经使用社交或企业级身份验证登录或用户帐户有匹配电子邮件地址的用户才能登录 Tower。

SOCIAL_AUTH_USER_FIELDS = []