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

AWX 支持通过活动目录 (AD) 进行用户身份验证,也称为通过 Kerberos 进行身份验证。

要开始使用,首先在 AWX 中设置 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 [email protected]:
[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: [email protected]

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

获得有效票据后,您可以检查以确保一切按预期从命令行工作。要测试这一点,请确保您的清单如下所示

[windows]
win01.WEBSITE.COM

[windows:vars]
ansible_user = [email protected]
ansible_connection = winrm
ansible_port = 5986

您还应该

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

  • 在用户名声明中,确保域名称(@ 后的文本)在大小写方面输入正确,因为 Kerberos 区分大小写。对于 AWX,您还应确保清单看起来相同。

注意

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

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

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

注意

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

24.1. AD 和 Kerberos 凭据

仅限活动目录

  • 如果您只计划针对使用 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 兼容二进制文件的完整路径。