microsoft.ad.ldap 清单 – Active Directory 清单插件
注意
此清单插件是 microsoft.ad 集合 (版本 1.7.1) 的一部分。
如果您使用的是 ansible
包,则可能已经安装了此集合。它不包含在 ansible-core
中。要检查是否已安装,请运行 ansible-galaxy collection list
。
要安装它,请使用: ansible-galaxy collection install microsoft.ad
。您需要其他需求才能使用此清单插件,有关详细信息,请参阅 需求。
要在 playbook 中使用它,请指定: microsoft.ad.ldap
。
microsoft.ad 1.1.0 中的新增功能
概要
用于 Active Directory 或其他 LDAP 源的清单插件。
使用以
microsoft.ad.ldap.{yml|yaml}
结尾的 YAML 配置文件。添加的每个主机都将
inventory_hostname
设置为 LDAP 计算机对象的name
,并将ansible_host
设置为dNSHostName
LDAP 属性的值(如果已设置)。如果计算机对象上未设置dNSHostName
属性,则ansible_host
不会被设置。有关如何设置这些值以及如何调整这些值,请参阅 LDAP 清单主机名。主机事实
microsoft_ad_distinguished_name
也将设置为用于派生主机条目的主机的可分辨名称。任何其他需要的 fact 都需要在 *attributes* 选项中定义。
需求
以下需求是在执行此清单的本地控制器节点上所需的。
dnspython - 用于服务器查找支持
pyspnego >= 0.8.0
pyspnego[kerberos] - 用于 Kerberos 和服务器查找支持
sansldap
dpapi-ng - 用于 LAPS 解密支持
参数
参数 |
注释 |
---|---|
要检索的 LDAP 属性。 指定的键是要请求的 LDAP 属性,每个属性的值都是一个字典,它反映了要将其设置为主机变量以及如何设置。 内部字典值的每个键都是要设置的主机变量名,其值是要用来派生值的模板。如果没有显式设置值,它将使用从 LDAP 属性返回的强制值。 在 LDAP 模式中被表示为单值属性的属性将作为单个值返回,多值属性将作为值列表返回。 有关更多信息,请参阅 LDAP 清单属性。 默认值: |
|
连接到 LDAP 主机时要使用的身份验证协议。 如果使用 LDAPS/StartTLS 并已指定 *certificate*,则默认为
Kerberos 支持需要安装 有关更多信息,请参阅 LDAP 身份验证。 可以使用 Jinja2 模板值设置此选项。 选项
配置 |
|
可以是 CA 证书 PEM 或 DER 文件的路径、PEM 证书目录或用于证书验证的 CA 证书 PEM 字符串。 如果省略,用于验证的默认 CA 存储取决于当前的 Python 设置。 可以使用 Jinja2 模板值设置此选项。 配置 |
|
使用 TLS 连接时的证书验证行为。 可以设置为
详情请参阅 证书验证。 可以使用 Jinja2 模板值设置此选项。 选项
配置 |
|
用于证书身份验证的证书或包含密钥的证书捆绑包。 该值可以是包含证书的文件的路径,也可以是 PEM 编码证书的字符串。 如果使用证书文件的路径,则该文件可以是 PEM 编码证书、PEM 编码证书和密钥捆绑包、DER 编码证书或 PFX/PKCS12 编码证书和密钥捆绑包。 如果指定的证书不包含密钥,请使用 *certificate_key*。 如果密钥使用密码加密,请使用 *certificate_password*。 可以使用 Jinja2 模板值设置此选项。 配置 |
|
用于证书身份验证的证书密钥。 该值可以是包含以 PEM 或 DER 编码形式的密钥的文件的路径,也可以是 PEM 编码密钥的字符串。 如果密钥使用密码加密,请使用 *certificate_password*。 可以使用 Jinja2 模板值设置此选项。 配置 |
|
用于解密 *certificate* 或 *certificate_key* 指定的证书密钥的密码。 可以使用 Jinja2 模板值设置此选项。 配置 |
|
从 jinja2 表达式创建变量。 默认值: |
|
连接是否需要加密。 加密可以使用身份验证协议或通过 TLS 执行。 *auth_protocol* 如果在没有 TLS 的情况下通过 LDAP 使用 可以使用 Jinja2 模板值设置此选项。 选项
配置 |
|
用于查询计算机对象的 LDAP 筛选器字符串。 默认情况下,这将与筛选器“(objectCategory=computer)”组合使用。使用 *filter_without_computer* 可覆盖此行为,并使 *filter* 成为唯一使用的筛选器。 |
|
不会将 *filter* 值与默认筛选器“(objectCategory=computer)”组合。 在大多数情况下,这应为 选项
|
|
根据 Jinja2 条件将主机添加到组。 默认值: |
|
根据变量的值将主机添加到组。 默认值: |
|
主机变量的值为空字符串时的默认值。 此选项与 |
|
用于生成组的输入字典中的键 |
|
键控组的父组 |
|
键控组名将以此前缀开头 默认值: |
|
用于构建键控组名的分隔符 默认值: |
|
将此选项设置为 此选项与 选项
|
|
与 keyed_groups 结合使用。 默认情况下,没有提供前缀或分隔符的键控组的名称将以下划线开头。 这是因为默认前缀为“”而默认分隔符为“_”。 如果未给出前缀,则将此选项设置为 False 以省略开头的下划线(或其他分隔符)。 如果组名来自映射,则分隔符仍用于连接项目。 为了根本不使用组名中的分隔符,请将键控组的分隔符设置为空字符串。 选项
|
|
用于身份验证的密码。 如果 *auth_protocol* 为 如果 *auth_protocol* 为 可以使用 Jinja2 模板值设置此选项。 配置 |
|
用于连接的 LDAP 端口。 端口 389 用于 LDAP,端口 686 用于 LDAPS。 如果 可以使用 Jinja2 模板值设置此选项。 配置 |
|
用于查找计算机对象的 LDAP 搜索基。 如果没有指定,则默认为 Active Directory 服务器的 如果搜索较大的 Active Directory 数据库,建议缩小搜索基以加快查询速度。 |
|
要执行的 LDAP 搜索范围。
选项
|
|
要连接到的域控制器/服务器。 如果未指定,则服务器将从当前 krb5.conf 详情请参阅 服务器查找。 可以使用 Jinja2 模板值设置此选项。 配置 |
|
如果为 由于可以在表达式中使用事实,因此它们可能并不总是可用,我们默认忽略这些错误。 选项
|
|
要使用的 TLS 操作。 如果显式 *port* 设置为
如果要使用 TLS,建议使用 可以使用 Jinja2 模板值设置此选项。 选项
配置 |
|
将额外的变量合并到可用于组合的变量中(最高优先级)。 选项
配置
|
|
用于身份验证的用户名。 如果auth_protocol 为 如果auth_protocol 为 可以使用 Jinja2 模板值设置此选项。 配置 |
备注
示例
# 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: [email protected]
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