Spec-Zone.ru › Ansible

microsoft.ad.ldap inventory — плагин инвентаризации для Active Directory

Примечание

Этот плагин инвентаризации входит в коллекцию microsoft.ad (версия 1.10.0).

Возможно, эта коллекция уже установлена, если вы используете пакет ansible. Она не входит в состав ansible-core. Чтобы проверить, установлена ли она, выполните ansible-galaxy collection list.

Чтобы установить её, используйте: ansible-galaxy collection install microsoft.ad. Для работы с этим плагином инвентаризации требуются дополнительные компоненты. Подробности см. в разделе Требования.

Чтобы использовать его в плейбуке, укажите: microsoft.ad.ldap.

Добавлено в microsoft.ad 1.1.0

  • Краткое описание
  • Требования
  • Параметры
  • Примечания
  • Примеры

Краткое описание

  • Плагин инвентаризации для Active Directory и других источников LDAP.
  • Использует файл конфигурации YAML, имя которого заканчивается на microsoft.ad.ldap.{yml|yaml}.
  • Для каждого добавленного узла значение inventory_hostname будет установлено в name объекта компьютера LDAP, а значение ansible_host — в значение атрибута LDAP dNSHostName, если он задан. Если атрибут dNSHostName не задан для объекта компьютера, то ansible_host не устанавливается. Дополнительную информацию о том, как задаются эти значения и как их изменить, см. в разделе Имя узла в инвентаризации LDAP.
  • Факту узла microsoft_ad_distinguished_name также будет присвоено различающееся имя узла, использованное для создания записи узла.
  • Все остальные необходимые факты должны быть определены в параметре attributes.

Требования

Следующие компоненты необходимы на локальном управляющем узле, который выполняет инвентаризацию.

  • dnspython — для поддержки поиска сервера с помощью параметра
  • pyspnego >= 0.8.0
  • pyspnego[kerberos] — для поддержки Kerberos и поиска сервера
  • sansldap
  • dpapi-ng — для поддержки расшифровки LAPS

Параметры

Параметр

Комментарии

attributes

dictionary

Атрибуты LDAP, которые нужно получить.

Указанные ключи — это запрашиваемые атрибуты LDAP, а значения для каждого атрибута представляют собой словарь, в котором указано, какую переменную узла задать и каким образом.

Каждый ключ во внутреннем словаре — это имя переменной узла, которую нужно задать, а значение — шаблон для получения значения. Если значение явно не задано, будет использоваться приведённое к нужному типу значение, возвращённое атрибутом LDAP.

Атрибуты, обозначенные в схеме LDAP как одиночные, возвращаются в виде одиночного значения, а атрибуты с несколькими значениями — в виде списка значений.

Дополнительные сведения см. в разделе Атрибуты инвентаризации LDAP.

По умолчанию: {}

auth_protocol

string

Протокол аутентификации, используемый при подключении к узлу LDAP.

По умолчанию используется certificate, если применяется LDAPS/StartTLS и указано certificate. В противном случае по умолчанию используется negotiate.

simple — это простая аутентификация, при которой имя пользователя и пароль передаются в незашифрованном виде. Она не поддерживает шифрование, поэтому её необходимо использовать либо с LDAPS, либо с StartTLS. Если протокол используется через незашифрованное соединение LDAP без TLS, необходимо указать encrypt=False, чтобы явно согласиться на отсутствие шифрования.

certificate — это аутентификация с помощью клиентского сертификата TLS. Её можно использовать только с LDAPS или StartTLS. Дополнительные сведения об указании клиентского сертификата для аутентификации см. в описании certificate.

negotiate попытается согласовать аутентификацию Kerberos с переходом на NTLM в случае неудачи. Если Kerberos доступен, можно использовать кэш учётных данных Kerberos, если имя пользователя или пароль не указаны.

kerberos использует аутентификацию Kerberos без перехода на NTLM.

ntlm использует аутентификацию NTLM без попытки применить Kerberos.

negotiate, kerberos и ntlm поддерживают шифрование через LDAP.

Для поддержки Kerberos необходимо установить дополнительные компоненты pyspnego[kerberos].

Дополнительные сведения см. в разделе Аутентификация LDAP.

Для этого параметра можно использовать значение шаблона Jinja2.

Варианты:

  • "simple"
  • "certificate"
  • "negotiate"
  • "kerberos"
  • "ntlm"

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_AUTH_PROTOCOL

ca_cert

string

Путь к файлу сертификата ЦС в формате PEM или DER, каталог сертификатов PEM или строка сертификата ЦС в формате PEM, используемого для проверки сертификатов.

Если параметр не указан, используемое для проверки хранилище сертификатов ЦС по умолчанию зависит от текущих настроек Python.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CA_CERT

cert_validation

string

Поведение при проверке сертификата во время использования соединения TLS.

Можно указать always, ignore, ignore_hostname.

always выполняет проверку имени узла и ЦС сертификата.

ignore игнорирует все ошибки сертификата.

ignore_hostname проверяет цепочку доверия ЦС, но игнорирует проверку имени узла, выполняемую TLS.

Дополнительные сведения см. в разделе Проверка сертификата.

Для этого параметра можно использовать значение шаблона Jinja2.

Варианты:

  • "always" ← (по умолчанию)
  • "ignore"
  • "ignore_hostname"

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CERT_VALIDATION

certificate

string

Сертификат или набор сертификата с ключом, используемый для аутентификации по сертификату.

Значением может быть путь к файлу с сертификатом или строка сертификата в кодировке PEM.

Если указан путь к файлу сертификата, файл может содержать сертификат в кодировке PEM, сертификат и ключ в кодировке PEM, сертификат в кодировке DER или сертификат и ключ в формате PFX/PKCS12.

Используйте certificate_key, если в указанном сертификате нет ключа.

Используйте certificate_password, если ключ зашифрован паролем.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CERTIFICATE

certificate_key

string

Ключ сертификата, используемый для аутентификации по сертификату.

Значением может быть путь к файлу с ключом в кодировке PEM или DER либо строка ключа в кодировке PEM.

Используйте certificate_password, если ключ зашифрован паролем.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CERTIFICATE_KEY

certificate_password

string

Пароль для расшифровки ключа сертификата, указанного в certificate или certificate_key.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CERTIFICATE_PASSWORD

compose

dictionary

Создание переменных с помощью выражений Jinja2.

По умолчанию: {}

connection_timeout

integer

Время ожидания установления соединения в секундах, после которого попытка завершается ошибкой.

Для этого параметра можно использовать значение шаблона Jinja2.

По умолчанию: 5

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_CONNECTION_TIMEOUT

encrypt

boolean

Требуется ли шифрование соединения.

Шифрование может выполняться с помощью протокола аутентификации или TLS.

Протоколы auth_protocol negotiate, kerberos и ntlm поддерживают шифрование через LDAP, а simple — нет.

При использовании auth_protocol=simple через LDAP без TLS необходимо установить значение False. В этом случае трафик не шифруется и передаётся в открытом виде, поэтому такой режим не рекомендуется.

Для этого параметра можно использовать значение шаблона Jinja2.

Варианты:

  • false
  • true ← (по умолчанию)

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_ENCRYPT

filter

string

Строка фильтра LDAP для запроса объектов компьютеров.

По умолчанию она объединяется с фильтром «(objectCategory=computer)». Используйте filter_without_computer, чтобы переопределить это поведение и применять только фильтр filter.

filter_without_computer

boolean

добавлено в microsoft.ad 1.3.0

Не объединять значение filter с фильтром по умолчанию «(objectCategory=computer)».

В большинстве случаев следует указать false, но можно установить true, чтобы использовать только заданное значение filter.

Варианты:

  • false ← (по умолчанию)
  • true

groups

dictionary

Добавление узлов в группы на основе условий Jinja2.

По умолчанию: {}

keyed_groups

list / elements=dictionary

Добавление узлов в группы на основе значений переменной.

По умолчанию: []

default_value

string

добавлено в ansible-core 2.12

Значение по умолчанию, если значение переменной узла равно None или является пустой строкой.

Этот параметр нельзя использовать одновременно с keyed_groups[].trailing_separator.

key

string

Ключ входного словаря, используемый для создания групп.

parent_group

string

Родительская группа для группы, создаваемой по ключу.

prefix

string

Имя группы, создаваемой по ключу, будет начинаться с этого префикса.

По умолчанию: ""

separator

string

Разделитель, используемый для формирования имени группы по ключу.

По умолчанию: "_"

trailing_separator

boolean

добавлено в ansible-core 2.12

Установите для этого параметра значение false, чтобы не добавлять keyed_groups[].separator после переменной узла, если её значение равно None или является пустой строкой.

Этот параметр нельзя использовать одновременно с keyed_groups[].default_value.

Варианты:

  • false
  • true ← (по умолчанию)

leading_separator

boolean

добавлено в ansible-core 2.11

Используйте вместе с keyed_groups.

По умолчанию имя группы, создаваемой по ключу, начинается с подчёркивания, если для неё не указан префикс или разделитель.

Это связано с тем, что префикс по умолчанию — "", а разделитель по умолчанию — "_".

Установите для этого параметра значение false, чтобы не добавлять начальное подчёркивание (или другой разделитель), если префикс не указан.

Если имя группы формируется на основе сопоставления, разделитель всё равно используется для объединения элементов.

Чтобы вообще не использовать разделитель в имени группы, задайте для группы по ключу пустую строку в качестве разделителя.

Варианты:

  • false
  • true ← (по умолчанию)

password

string

Пароль для аутентификации.

Если для auth_protocol задано simple, а пароль не указан, привязка будет выполнена без аутентификации.

Если для auth_protocol задано negotiate, kerberos или ntlm, а пароль не указан, будет предпринята попытка использовать локальные кэшированные учётные данные, указанные в username, если они доступны.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_PASSWORD

port

integer

Порт LDAP, используемый для соединения.

Для LDAP используется порт 389, а для LDAPS — порт 686.

По умолчанию используется порт 636, если tls_mode=ldaps, иначе — 389.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_PORT

search_base

string

База поиска LDAP, в которой выполняется поиск объектов компьютеров.

Если параметр не указан, по умолчанию используется defaultNamingContext сервера Active Directory.

При поиске в большой базе данных Active Directory рекомендуется сузить базу поиска, чтобы ускорить выполнение запросов.

search_scope

string

Область поиска LDAP.

base выполняет поиск только по текущему пути или объекту, указанному в search_base. Обычно этот вариант не подходит для плагинов инвентаризации.

one_level выполняет поиск только по непосредственным дочерним объектам в search_base.

subtree выполняет поиск по непосредственным дочерним и всем вложенным объектам в search_base.

Варианты:

  • "base"
  • "one_level"
  • "subtree" ← (по умолчанию)

server

string

Контроллер домена/сервер, к которому выполняется подключение.

Если сервер не указан, он определяется на основе текущей настройки default_realm в krb5.conf и с помощью DNS-запроса SRV.

Дополнительные сведения см. в разделе Поиск сервера.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_SERVER

strict

boolean

Если задано yes, недопустимые записи приводят к критической ошибке; в противном случае они пропускаются, и выполнение продолжается.

Поскольку в выражениях можно использовать факты, они могут быть доступны не всегда; по умолчанию такие ошибки игнорируются.

Варианты:

  • false ← (по умолчанию)
  • true

tls_mode

string

Используемая операция TLS.

Если для port явно задано значение 636, по умолчанию используется ldaps.

ldaps устанавливает соединение через LDAPS (порт 636).

start_tls устанавливает соединение через LDAP (порт 389) и выполняет операцию StartTLS перед привязкой для аутентификации.

Если планируется использовать TLS, рекомендуется выбрать ldaps вместо start_tls.

Для этого параметра можно использовать значение шаблона Jinja2.

Варианты:

  • "ldaps"
  • "start_tls"

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_TLS_MODE

use_extra_vars

boolean

добавлено в ansible-core 2.11

Объединить дополнительные переменные с доступными переменными для формирования значений (наивысший приоритет).

Варианты:

  • false ← (по умолчанию)
  • true

Конфигурация:

  • Запись INI:

    [inventory_plugins]
    use_extra_vars = false
    
  • Переменная среды: ANSIBLE_INVENTORY_USE_EXTRA_VARS

username

string

Имя пользователя для аутентификации.

Если для auth_protocol задано simple, а имя пользователя не указано, используется анонимная аутентификация.

Если для auth_protocol задано negotiate, kerberos или ntlm, а имя пользователя не указано, будет предпринята попытка использовать локальные кэшированные учётные данные, если они доступны, например полученные с помощью kinit.

Для этого параметра можно использовать значение шаблона Jinja2.

Конфигурация:

  • Переменная среды: MICROSOFT_AD_LDAP_USERNAME

Примечание

Параметры конфигурации, перечисленные выше для каждого типа записей (переменная Ansible, переменная среды и т. д.), упорядочены от низкого приоритета к высокому. Например, переменная, расположенная ниже в списке, переопределяет переменную, расположенную выше. Типы записей также упорядочены по приоритету от низкого к высокому. Например, запись ansible.cfg (расположенная выше в списке) переопределяется переменной Ansible (расположенной ниже в списке).

Примечания

Примечание

  • Дополнительные сведения об использовании этого плагина инвентаризации см. в разделе Инвентаризация LDAP.
  • Дополнительные сведения о получении паролей LAPS с помощью этого плагина см. в разделе LAPS.
  • Этот плагин находится на этапе предварительного ознакомления; параметры модуля могут измениться с учётом полученных отзывов.
  • Если в описании параметра не указано иное, значение из файла конфигурации используется без изменений. Только для параметров подключения LDAP разрешено использовать шаблон Jinja2.
  • На этом этапе инвентаризация ещё не завершена, поэтому автоматически заполненные группы all и ungrouped будут содержать только данные, явно добавленные в них предыдущими источниками инвентаризации.
  • Во время построения инвентаризации динамические «магические переменные» недоступны. Например, groups и hostvars ещё не существуют.
  • Дополнительные сведения о подключениях LDAP см. в разделе Справка по подключению LDAP.

Примеры

# Set in the file ending with microsoft.ad.ldap.yml or microsoft.ad.ldap.yaml
plugin: microsoft.ad.ldap


####################################################################
#                        Connection Options                        #
#                                                                  #
# These options control how the plugin connects to the LDAP server #
####################################################################

# Connects to ldap://dc01.domain.com:389
server: dc01.domain.com
port: 389

# Connects to ldaps://dc01.domain.com:636
server: dc01.domain.com
tls_mode: ldaps

# Connects to the global catalog
# ldap://dc01.domain.com:3268
server: dc01.domain.com
port: 3268

# Provides explicit user, will use the current Kerberos ticket if no credential
# is provided.
username: domain-user@DOMAIN.COM
password: Password123!

# Only allow Kerberos authentication.
auth_protocol: kerberos

# Verify LDAPS CA chain with custom CA chain.
tls_mode: ldaps
ca_cert: /home/user/certs/ldap.pem

# The username and password can be retrieved using a template with a lookup.
# Other connection options can also be set this way, the option description
# tells you whether it can be set to a template.
username: '{{ lookup("ansible.builtin.env", "LDAP_USERNAME") }}'
password: '{{ lookup("ansible.builtin.env", "LDAP_PASSWORD") }}'


##############################################
#               Search Options               #
#                                            #
# These options control the searching rules  #
##############################################

# Search for computer accounts in the Workshop OU.
search_base: OU=Workshop A,DC=domain,DC=com

# Filter the computer accounts returned for only ones with the dNSDomainName
# attribute set.
filter: (dNSDomainName=*)

# Filter computer accounts returned for ones starting with PROD and with the
# LAPS password set.
filter: (&(sAMAccountName=PROD*)(ms-Mcs-AdmPwd=*))

# See documentation for more details
attributes:
  sAMAccountName:
    sam_account_name:
  objectSid:
    computer_sid:
  pwdLastSet:
    password_last_set: this | microsoft.ad.as_datetime
  comment:
    host_comment
  memberOf:
    # Gets the value (1) of the first RDN (0) of each memberOf instance (this).
    # For example 'CN=Domain Admins,CN=Users,DC=domain,DC=test'
    # will be returned as just 'Domain Admins'
    computer_membership: this | microsoft.ad.parse_dn | map(attribute="0.1")
  location:


############################################################################
#                             LAPS Integration                             #
#                                                                          #
# Examples on how to use the new Windows LAPS values as connection options #
############################################################################

attributes:
  # msLAPS-Password is used if no encryption has been configured.
  # Currently an encrypted LAPS password is not supported.
  msLAPS-Password:
    ansible_user: (this | from_json).n
    ansible_password: (this | from_json).p

  # msLAPS-EncryptedPassword is used if encryption has been configured.
  # If the Python dpapi-ng library is installed the `this`` value will
  # contain the entry `value` which is the decrypted value. The ``info``
  # entry will contain the reason why the value could not be decrypted.
  msLAPS-EncryptedPassword:
    ansible_user: (this.value | from_json).n
    ansible_password: (this.value | from_json).p

  # ms-Mcs-AdmPwd is used for Legacy LAPS and stores just the password.
  # The username needs to be hardcoded as a string value for this template.
  ms-Mcs-AdmPwd:
    ansible_user: '"Administrator"'
    ansible_password: this


#####################################################################
#                        Constructed Options                        #
#                                                                   #
# These options control the constructed values like vars and groups #
#####################################################################

# Build composed host variables. Requires attributes to be set in the
# attributes option to be referenced here.
compose:
  host_var: computer_sid

# Conditionals that adds found hosts to the groups specified.
groups:
  # Adds all hosts to the windows group
  windows: true

  # Uses the memberOf fact documented above to place the host in the production
  # group if it's a member of that group
  production: '"Production Group" in computer_membership'

# Adds the host to a group site_{{ location }} with the default group of
# site_unknown if the location isn't defined
keyed_groups:
  - key: location | default(omit)
    prefix: site
    default_value: unknown

Авторы

  • Jordan Borean (@jborean93)

Ссылки на коллекцию

  • Отслеживание проблем
  • Репозиторий (исходный код)
  • Сообщить о проблеме
  • Связь

© 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/ldap_inventory.html

Spec-Zone.ru

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