文档

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

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

要开始,首先在 Tower 系统中设置 Kerberos 包,以便您可以成功生成 Kerberos 票证。 要安装这些包,请执行以下步骤

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

安装完成后,编辑 /etc/krb5.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 区分大小写。 对于 Tower,您还应确保清单看起来相同。

注意

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

现在,运行剧本应该按预期运行。 您可以通过以 awx 用户身份运行剧本进行测试。

验证剧本正常运行后,与 Tower 的集成非常简单。 以 awx 用户身份生成 Kerberos 票证,Tower 应该会自动获取生成的票证以进行身份验证。

注意

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

24.1. AD 和 Kerberos 凭据

仅限 Active Directory

  • 如果您只打算针对使用 AD 用户名和密码作为机器凭据的 Windows 机器运行剧本,您可以对用户名使用“user@<domain>” 格式,并使用关联的密码。

使用 Kerberos

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

24.2. 使用 Kerberos 票证

当在为 kerberos 配置的主机上,机器凭据中同时指定用户名和密码时,Ansible 默认自动管理 Kerberos 票证。 在每个任务执行之前,将在临时凭据缓存中为每个主机创建一个新票证(以最大程度地减少票证到期的可能性)。 临时凭据缓存会在每个任务完成后删除,不会干扰默认凭据缓存。

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

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