Puppet-hiera-Function lookup () не нашел значения-Windows - PullRequest
0 голосов
/ 31 октября 2018

Я установил модуль dsc и добавил пользователя AD в контроллер домена с помощью puppet. Приведенный ниже код отлично работает, когда пароль жестко задан в виде простого текста Можно ли как-то зашифровать эти пароли.

Я читал, что hiera-eyaml является решением для этого, поэтому я зашифровал пароль

[root@PUPPET puppet]# /opt/puppetlabs/puppet/bin/eyaml encrypt -p
Enter password: **********
string: ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAl/+uUACl6WpGAnA1sSqEuTp39SVYfHc7J0BMvC+a2C0YzQg1V]

Затем сохранил этот зашифрованный проход в файле /etc/common.eyaml (указан в файле конфигурации hiera)

/opt/puppetlabs/puppet/bin/eyaml edit /etc/common.eyaml

Я могу успешно расшифровать файл:

 /opt/puppetlabs/puppet/bin/eyaml decrypt -f /etc/common.eyaml

Затем я указал зашифрованный проход в файл манифеста

/ и т.д. / puppetlabs / код / ​​окружающая среда / производство / манифестов / site.pp:

 dsc_xADUser {'FirstUser':

            dsc_ensure => 'present',
            dsc_domainname => 'ad.contoso.com',
            dsc_username   => 'tfl',
            dsc_userprincipalname => 'tfl@ad.contoso.com',
            dsc_password   => {
            'user' => 'Administrator@ad.contoso.com',
            'password' => Sensitive('pass')
            },
            dsc_passwordneverexpires => true,
            dsc_domainadministratorcredential => {
            'user'  => 'Administrator@ad.contoso.com',
            'password' => Sensitive(lookup('password'))
            },



        }

На узле Windows я получил ошибку

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Function lookup() did not find a value for the name 'password' on node windows.example.com

Конфигурационный файл Hiera:

cat /etc/puppetlabs/puppet/hiera.yaml
---
# Hiera 5 Global configuration file

---
version: 5
defaults:
  datadir: data
  data_hash: yaml_data
hierarchy:
  - name: "Eyaml hierarchy"
    lookup_key: eyaml_lookup_key # eyaml backend
    paths:
       - "/etc/common.eyaml"
    options:
        pkcs7_private_key: "/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem"
        pkcs7_public_key: "/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem"

cat /etc/common.eyaml

 password: ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAl/+uUACl6WpGAnA1sSqEuTp39SVYfHc7J0BMvC+a2C0YzQg1V]

Я новичок в Puppet, и эта иера сбивает меня с толку

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Уффф, после долгих попыток, наконец, все заработало:

 cat /etc/puppetlabs/puppet/hiera.yaml
---
version: 5
defaults:
  datadir: data
  data_hash: yaml_data
hierarchy:
  - name: "Eyaml hierarchy"
    lookup_key: eyaml_lookup_key # eyaml backend
    paths:
      - "nodes/%{trusted.certname}.yaml"
      - "windowspass.eyaml"
    options:
        pkcs7_private_key: "/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem"
        pkcs7_public_key: "/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem

Создан пароль:

/opt/puppetlabs/puppet/bin/eyaml encrypt -l 'password' -s 'Pass' --pkcs7-public-key=/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem --pkcs7-private-key=/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem

Добавлен в файл /etc/puppetlabs/puppet/data/windowspass.eyaml:

/opt/puppetlabs/puppet/bin/eyaml edit windowspass.eyaml --pkcs7-public-key=/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem --pkcs7-private-key=/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem



cat /etc/puppetlabs/puppet/data/windowspass.eyaml
---
password: ENC[PKCS7,MIIBeQYJKoZIhvcNAQcDoIIBajCCAWYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAUopetXenh/+DN1+VesIZUI5y4k3kOTn2xa5uBrtGZP3GvGqoWfwAbYsfeNApjeMG+lg93/N/6mE9T59DPh]

Проверенная дешифровка:

/opt/puppetlabs/puppet/bin/eyaml decrypt -f windowspass.eyaml --pkcs7-public-key=/etc/puppetlabs/puppet/keys/public_key.pkcs7.pem --pkcs7-private-key=/etc/puppetlabs/puppet/keys/private_key.pkcs7.pem

Как предложил Мэтт, сопоставил содержимое windowspass.eyaml с файлом манифеста

'password' => Sensitive(lookup('password'))

Команда отладки мне очень помогла:

puppet master --debug --compile windows.example.com --environment=production

Спасибо всем, особенно Мэтту

0 голосов
/ 31 октября 2018

Для начала, в вашем конфигурационном файле Hiera есть опечатка. Путь к данным должен быть:

paths:
  - "/etc/common.eyaml"

После исправления вам нужно получить значение из Hiera. Это выполняется с помощью функции поиска кукол . Поскольку у вас есть одна пара ключ-значение здесь в одном файле данных, это можно выполнить с минимальным количеством аргументов.

dsc_xADUser {'FirstUser':
  dsc_ensure            => 'present',
  dsc_domainname        => 'ad.contoso.com',
  dsc_username          => 'tfl',
  dsc_userprincipalname => 'tfl@ad.contoso.com',
  dsc_password   => {
    'user'     => 'Administrator@ad.contoso.com',
    'password' => Sensitive('pass')
  },
  dsc_passwordneverexpires => true,
  dsc_domainadministratorcredential => {
    'user'     => 'Administrator@ad.contoso.com',
    'password' => lookup('string'),
  },
}

Однако вы также действительно хотите отредактировать этот пароль из своих журналов и отчетов. Вы хотели бы обернуть эту строку пароля в конфиденциальный тип данных .

'password' => Sensitive(lookup('string')),

Вы, кажется, уже делаете это для вашего другого пароля, который передается в виде строки pass.

Дополнительное замечание ко всему этому заключается в том, что Puppet имеет встроенную поддержку поиска поиска из Vault и Conjur в версии 6, поэтому в скором времени она станет лучшей практикой вместо hiera-eyaml.

...