Аутентификация AD в модулях
Одно из ключевых требований к модулям, используемым в этой коллекции, — возможность аутентифицировать пользователя на контроллере домена при управлении ресурсом. В этом руководстве рассматриваются различные варианты для такого сценария.
Примечание
В этом руководстве рассматривается аутентификация на контроллере домена при использовании модуля на хосте Windows. Сведения об аутентификации при использовании плагинов, работающих в Linux, см. в разделе Аутентификация LDAP.
Неявная аутентификация
Первый и самый простой вариант — использовать при аутентификации существующие учетные данные пользователя подключения. Это позволяет не указывать имя пользователя и пароль в параметрах модуля, но требует, чтобы используемый Ansible способ подключения поддерживал делегирование учетных данных. Например, можно использовать аутентификацию CredSSP с плагином подключения winrm и psrp или делегирование Kerberos. Другие варианты аутентификации, например NTLM, не поддерживают делегирование учетных данных и не работают с неявной аутентификацией.
Единственный способ проверить, доступна ли неявная аутентификация, — запустить модуль и убедиться, что он работает. Если это не так, сообщение об ошибке, скорее всего, будет содержать текст Failed to contact the AD server.
Повышение привилегий
Если неявная аутентификация недоступна, модуль можно запустить с помощью 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. В этом случае при аутентификации на целевом контроллере домена модуль будет использовать учетную запись компьютера 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 }}'
Примечание
Параметр domain_credentials добавлен в версии 1.6.0 этой коллекции.
Параметр domain_credentials без ключа name, как в приведенном выше примере, задает учетные данные для аутентификации на контроллере домена по умолчанию, так же как domain_username и domain_password. Одновременное использование обоих вариантов не поддерживается и приведет к ошибке.
Параметр 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 должно соответствовать записи name в domain_credentials. Если сервер не указан в domain_credentials, по умолчанию модуль будет использовать domain_username/domain_password или неявную аутентификацию пользователя.
Примечание
Запись по умолчанию (без ключа name) в domain_credentials используется только для поиска, если сервер не указан явно. Учетные данные domain_username и domain_password будут использоваться для всех подключений, кроме случаев, когда в domain_credentials есть запись для конкретного сервера.
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/microsoft/ad/docsite/guide_ad_module_authentication.html