Documentation

24. 使用 Kerberos 进行用户身份验证

Ansible Tower 支持通过 Active Directory (AD) 进行用户身份验证(也称为通过 Kerberos 进行身份验证)。

要开始使用,首先请在 Tower 系统中设置 Kerberos 软件包,以便您能够成功生成 Kerberos 票据(ticket)。要安装这些软件包,请使用以下步骤:

yum install krb5-workstation
yum install krb5-devel
yum install krb5-libs

安装后,按如下所示编辑 /etc/krb.conf 文件,以提供 AD 的地址、域等:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 default_realm = WEBSITE.COM
 dns_lookup_realm = false
 dns_lookup_kdc = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true

[realms]
 WEBSITE.COM = {
  kdc = WIN-SA2TXZOTVMV.website.com
  admin_server = WIN-SA2TXZOTVMV.website.com
 }

[domain_realm]
 .website.com = WEBSITE.COM
 website.com = WEBSITE.COM

更新配置文件后,您应当能够成功进行身份验证并获得一个有效令牌。以下步骤演示了如何进行身份验证并获得令牌:

[root@ip-172-31-26-180 ~]# kinit username
Password for username@WEBSITE.COM:
[root@ip-172-31-26-180 ~]#

Check if we got a valid ticket.

[root@ip-172-31-26-180 ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: username@WEBSITE.COM

Valid starting     Expires            Service principal
01/25/16 11:42:56  01/25/16 21:42:53  krbtgt/WEBSITE.COM@WEBSITE.COM
  renew until 02/01/16 11:42:56
[root@ip-172-31-26-180 ~]#

在获得有效票据后,您可以从命令行检查以确保所有操作均正常工作。要测试这一点,请确保您的清单类似如下:

[windows]
win01.WEBSITE.COM

[windows:vars]
ansible_user = username@WEBSITE.COM
ansible_connection = winrm
ansible_port = 5986

您还应当:

  • 确定主机名是与 AD 中条目匹配的正确客户端主机名,且不是 IP 地址。

  • 在用户名声明中,请确保正确输入了域名(@ 之后的文本),注意 Kerberos 大小写字母,因为 Kerberos 区分大小写。对于 Tower,您还应当确保清单看起来相同。

注解

如果您遇到 Server not found in Kerberos database 出错信息,且您的清单是使用 FQDN(不是 IP 地址)配置的,请确保服务主体名称未缺失或错误配置。

现在,playbook 操作应当可以按预期运行。您可以使用 awx 用户身份运行 playbook 来测试这一点。

当您验证了 playbook 正常工作后,与 Tower 集成就容易了。以 awx 用户身份生成 Kerberos 票据,Tower 应该自动获取生成的票据进行验证。

注解

必须安装 python kerberos 软件包。Ansible 旨在检查是否安装了 kerberos 软件包,如果安装了,则使用 kerberos 身份验证。

24.1. AD 和 Kerberos 凭证

仅限 Active Directory:

  • 如果您只计划对 Windows 机器运行 playbook,且这些 Windows 机器使用 AD 用户名和密码作为凭证 ,则用户名和关联的密码可以使用“user@<domain>”格式。

对于 Kerberos:

  • 如果安装了 Kerberos,您可以使用用户名和密码创建机器凭证,为该用户名使用“user@<domain>”格式。

24.2. 使用 Kerberos 票据

在为 kerberos 配置的主机的机器凭证中指定用户名和密码时,Ansible 默认为自动管理 kerberos 票据(Ansible 2.3 起)。在每个任务执行(以尽可能减少票据过期的机会)前,在每个主机的临时凭据缓存中创建新的票据。在每次任务后都会删除临时凭证缓存,且不会影响默认的凭证缓存。

要禁用自动票据管理(例如,使用现有的 SSO 票据或手动调用 kinit 来填充默认凭证缓存),请通过清单设置 ansible_winrm_kinit_mode=manual

自动票据管理需要在控制主机系统路径上有一个标准 kinit 二进制文件。要指定不同的位置或二进制名称,请将 ansible_winrm_kinit_cmd 清单变量设置为与 MIT krbv5 kinit 兼容的二进制文件的完全限定路径。