模块中的AD身份验证

此集合中使用的模块的一个关键需求是能够在管理资源时将用户身份验证到域控制器。本指南将介绍此场景中可用的不同选项。

注意

本指南介绍在 Windows 主机上使用模块时对域控制器的身份验证。有关在 Linux 上运行的插件如何进行身份验证的信息,请参见LDAP身份验证

隐式身份验证

第一个也是最简单的选项是在身份验证期间使用连接用户的现有凭据。这避免了必须在模块的参数中指定用户名和密码,但它确实要求Ansible使用的连接方法支持凭据委派。例如,使用CredSSP身份验证以及winrmpsrp连接插件,或使用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_useransible_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_usernamedomain_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_usernamedomain_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 - 将在默认域控制器上使用UserForDefaultDCPasswordForDefaultDC进行查找

  • GroupOnDefaultDC2 - 与上面相同,只是指定为字典

  • GroupOnOtherDC - 将在OtherDC上使用UserForOtherDCPasswordForOtherDC进行查找

  • GroupOnThirdDC - 将在ThirdDC上使用隐式用户身份验证上下文进行查找

server的值必须与domain_credentials中的name条目相对应。如果未在domain_credentials中指定服务器,则模块将默认为使用domain_username/domain_password或隐式用户身份验证。

注意

domain_credentials中的默认(无name键)条目仅用于没有显式设置服务器的查找。domain_usernamedomain_password凭据将用于所有连接,除非domain_credentials中存在显式服务器条目。