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 兼容二进制文件的完整路径。