Spec-Zone.ru › Ansible

Аутентификация 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API