Sco*_*ack 5 authentication puppet sssd
我正在尝试重建 nwaller 的sssd puppet 模块,使其完全基于 LDAP 并且更简洁一些。在其中,我们为表单的每个身份验证域定义了一个资源
define sssd::domain (
$domain = $name,
$domain_description = '',
$domain_type,
$ldap_uri = 'ldap://example.com',
$ldap_search_base = 'dc=example,dc=com',
$simple_allow_groups,
....
)
Run Code Online (Sandbox Code Playgroud)
然后将此定义作为 a 传递,concat::fragment它填写用于构建最终sssd.conf.
如果我在每个节点中定义 LDAP 服务器,这一切都很好,如下所示:
节点.pp
node "node1.systems.private" {
include "puppet::client"
class {
'sssd':
domains => [ 'LDAP' ],
make_home_dir => true;
}
sssd::domain { 'LDAP':
domain_type => 'ldap',
ldap_uri => 'ldaps://ldap.site.com:636',
ldap_search_base => 'DC=site,DC=com',
ldap_user_search_base => 'OU=People,DC=site,DC=com',
ldap_group_search_base => 'OU=Groups,DC=site,DC=com',
ldap_default_bind_dn => 'CN=bindaccount,OU=Service Accounts,OU=People,DC=site,DC=com',
ldap_default_authtok => 'soopersekretbindpw',
simple_allow_groups => ['SysAdmins','AppAdmins'],
}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿做的是一个更加分层的设置。使sssd::domain定义尽可能通用,以便我可以将其作为独立于我们组织配置的模块进行维护。在全局配置中定义 LDAP 服务器,然后在每个节点内定义需要访问的特定组。所以更像是:
模块/组织/清单/default.pp
class org::default {
include "puppet::client"
class {
'sssd':
domains => [ 'LDAP' ],
make_home_dir => true;
}
sssd::domain { 'LDAP':
domain_type => 'ldap',
ldap_uri => 'ldaps://ldap.site.com:636',
ldap_search_base => 'DC=site,DC=com',
ldap_user_search_base => 'OU=People,DC=site,DC=com',
ldap_group_search_base => 'OU=Groups,DC=site,DC=com',
ldap_default_bind_dn => 'CN=bindaccount,OU=Service Accounts,OU=People,DC=site,DC=com',
ldap_default_authtok => 'soopersekretbindpw',
}
}
Run Code Online (Sandbox Code Playgroud)
节点.pp
node "node1.systems.private" {
include "org::default"
sssd::domain { 'LDAP':
simple_allow_groups => ['SysAdmins','AppAdmins'],
}
}
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这会在尝试应用定义时导致重复声明错误。有没有办法做到这一点,有选择地覆盖参数,或者我是否坚持在原始定义中定义身份验证域,然后覆盖每个节点内的授权参数?
小智 5
我会使用 Hiera:http : //docs.puppetlabs.com/hiera/latest/
Hiera 允许您将变量数据与 Puppet 清单分离。
顾名思义,Hiera 是分层的,允许使用一些有趣的方法来覆盖和组合可变数据。
首先,修改您的 sssd:: 域声明以执行 Hiera 查找参数:
sssd::domain { 'LDAP':
domain_type => 'ldap',
ldap_uri => hiera('ldap_uri', 'ldaps://ldap.site.com:636'),
ldap_search_base => hiera('ldap_search_base', 'DC=site,DC=com'),
ldap_user_search_base => hiera('ldap_user_search_base', 'OU=People,DC=site,DC=com'),
ldap_group_search_base => hiera('ldap_group_search_base', 'OU=Groups,DC=site,DC=com'),
ldap_default_bind_dn => hiera('ldap_default_bind', 'CN=bindaccount,OU=ServiceAccounts,OU=People,DC=site,DC=com'),
ldap_default_authtok => hiera('ldap_default_authtok', 'soopersekretbindpw'),
simple_allow_groups => hiera_array('ldap_simple_allow_groups', ['SysAdmins','AppAdmins']),
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我为每个查找定义了默认值。如果您愿意,您可以通过在最通用的 Hiera 数据文件(通常是“common.yaml”或“common.json”)中保留默认值来排除这些:
常见的.yaml:
---
ldap_uri: ldaps://ldap.site.com:636
ldap_search_base: DC=site,DC=com
ldap_simple_allow_groups:
- SysAdmins
- AppAdmins
Run Code Online (Sandbox Code Playgroud)
对于您想要在每个主机的基础上个性化的位,您需要创建一个以相关主机的 FQDN 命名的 YAML 或 JSON 文件,并将必要的值放入其中。
node1.systems.private.yaml:
---
ldap_simple_allow_groups:
- SomeOtherGroup
Run Code Online (Sandbox Code Playgroud)
在此示例中,请注意ldap_simple_allow_groups使用的是hiera_array查找功能。这将连接层次结构中的所有有效发现。因此,node1 将获得 common.yaml 中定义的值以及它自己的 YAML 文件中定义的“SomeOtherGroup”。
阅读 Hiera 查找类型文档以获取更多详细信息:http : //docs.puppetlabs.com/hiera/latest/lookup_types.html