模块中的AD身份验证
此集合中使用的模块的一个关键需求是能够在管理资源时将用户身份验证到域控制器。本指南将介绍此场景中可用的不同选项。
注意
本指南介绍在 Windows 主机上使用模块时对域控制器的身份验证。有关在 Linux 上运行的插件如何进行身份验证的信息,请参见LDAP身份验证。
隐式身份验证
第一个也是最简单的选项是在身份验证期间使用连接用户的现有凭据。这避免了必须在模块的参数中指定用户名和密码,但它确实要求Ansible使用的连接方法支持凭据委派。例如,使用CredSSP身份验证以及winrm
和psrp
连接插件,或使用Kerberos委派。其他身份验证选项(如NTLM)不支持凭据委派,并且不适用于隐式身份验证。
测试是否可以使用隐式身份验证的唯一方法是运行模块并查看它是否有效。如果它不起作用,则错误很可能包含消息Failed to contact the AD server
。
Become
如果隐式身份验证不可用,则可以使用become
运行模块,该模块指定用于身份验证的用户名和密码。
- name: Use become with connection credentials
microsoft.ad.user:
name: MyUser
state: present
become: true
become_method: runas
become_flags: logon_type=new_credentials logon_flags=netcredentials_only
vars:
ansible_become_user: '{{ ansible_user }}'
ansible_become_pass: '{{ ansible_password }}'
在Windows上使用runas
方法,become_flags
将指定仅将凭据用于网络身份验证。ansible_become_user
和ansible_become_pass
变量指定用于身份验证的用户名和密码。重要的是,这两个变量都设置为有效的用户名和密码,否则身份验证将失败。
也可以使用SYSTEM
帐户进行become。这将使模块在使用目标DC进行身份验证时使用该主机的AD计算机帐户,而不是显式用户名和密码。AD计算机帐户仍然必须具有执行请求的操作所需的权限。
- name: Use machine account for authentication
microsoft.ad.user:
name: MyUser
state: present
become: true
become_method: runas
become_user: SYSTEM
显式凭据
最后一个选项是将用户名和密码指定为模块选项。这可以通过两种方式完成;使用domain_username
和domain_password
选项,或者使用domain_credentials
选项。下面显示了这两种方法的示例。
- name: Use domain_username and domain_password
microsoft.ad.user:
name: MyUser
state: present
domain_username: '{{ ansible_user }}'
domain_password: '{{ ansible_password }}'
- name: Use domain_credentials
name: MyUser
state: present
domain_credentials:
- username: '{{ ansible_user }}'
password: '{{ ansible_password }}'
注意
此集合的1.6.0版中添加了domain_credentials
选项。
与domain_username
和domain_password
一样,没有name
键的domain_credentials
选项将是用于使用默认域控制器进行身份验证的凭据。不支持同时使用这两个选项,这将导致错误。
domain_credentials
选项也可用于指定特定于服务器的凭据。例如,当尝试查找AD对象的标识时
- name: Set member with lookup on different server
microsoft.ad.group:
name: MyGroup
state: present
members:
add:
- GroupOnDefaultDC
- name: GroupOnDefaultDC2
- name: GroupOnOtherDC
server: OtherDC
- name: GroupOnThirdDC
server: ThirdDC
domain_credentials:
- username: UserForDefaultDC
password: PasswordForDefaultDC
- name: OtherDC
username: UserForOtherDC
password: PasswordForOtherDC
在上述情况下,有三个成员被添加到组中
GroupOnDefaultDC
- 将在默认域控制器上使用UserForDefaultDC
和PasswordForDefaultDC
进行查找GroupOnDefaultDC2
- 与上面相同,只是指定为字典GroupOnOtherDC
- 将在OtherDC
上使用UserForOtherDC
和PasswordForOtherDC
进行查找GroupOnThirdDC
- 将在ThirdDC
上使用隐式用户身份验证上下文进行查找
server
的值必须与domain_credentials
中的name
条目相对应。如果未在domain_credentials
中指定服务器,则模块将默认为使用domain_username/domain_password
或隐式用户身份验证。
注意
domain_credentials
中的默认(无name
键)条目仅用于没有显式设置服务器的查找。domain_username
和domain_password
凭据将用于所有连接,除非domain_credentials
中存在显式服务器条目。