Каков наилучший способ безопасной доставки специфичных для миньонов файлов с помощью Salt? - PullRequest
0 голосов
/ 26 октября 2018

У меня есть ряд файлов, которые мне нужно безопасно передать определенным хостам миньонов, и я хотел бы автоматизировать этот процесс с помощью Salt.Однако у меня возникли проблемы с поиском наилучшего способа реализации ограниченной передачи на хосте.

Солевой файловый сервер отлично работает для передач, не зависящих от хоста.Однако некоторые файлы, которые мне нужно передать, относятся к конкретному клиенту, поэтому я должен убедиться, что они доступны только с определенных хостов.Предположительно, Pillar был бы идеальным кандидатом для ограничений, специфичных для миньонов, но у меня возникли проблемы с поиском способа указания передачи файлов с использованием Pillar в качестве источника.

Насколько я могу судить, Pillar поддерживает только словарные данные, основанные на SLS, а не передачу файлов.Я пробовал различные комбинации спецификаций состояния file.managed с путями, построенными с использованием различных сверток (включая salt: // _ pillar / xxx), но до сих пор я не смог получить доступ ни к чему, кроме данных токена, определенных в файле SLS.

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

Ответы [ 2 ]

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

Краткое содержание решения: Использование PILLAR.FILE_TREE

A: На вашем главном компьютере настройте каталог, из которого вы будете обслуживать личные файлы (например, / srv / salt / private).).

B: Под этим создайте подкаталог «hosts», а затем под ним создайте каталог для каждого из хостов, который будет иметь личные файлы.

  • /srv / salt / private / hosts / hostA

  • / srv / salt / private / hosts / hostB

  • … где hostA и hostB - этоидентификаторы целевых миньонов.

  • См. документы, если вы хотите использовать группы узлов вместо идентификаторов хоста.

C: поддиректории хоста, включите любые файлы, которые вы хотите передать через колонку.

echo “I am Foo\!” > /srv/salt/private/hosts/hostA/testme 

D: В ваш главный конфигурационный файл (например, / etc / salt / master) включите следующий раздел:

ext_pillar:
 - file_tree:
      root_dir: /srv/salt/private
      follow_dir_links: False
      keep_newline: True
      debug: True

E: Создать файл состояния состояния для обработки передачи.

cat > /srv/salt/files/base/foo.sls << END
/tmp/pt_test:
  file.managed:
    - contents_pillar: testme
END

F: Запустить обновление столба, а затем выполнить команду состояния:

salt hostA state.apply foo

После tНа последнем этапе hostA должен иметь файл с именем / tmp / pt_test, содержащий текст «Я - Фу!».

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

Ответ зависит от того, что именно вы пытаетесь получить.Если только часть задействованных файлов являются «чувствительными» (например, пароли в файлах конфигурации), вы, вероятно, захотите использовать шаблон, который извлекает чувствительные части из столба:

# /srv/salt/app/files/app.conf.jinja
[global]
user = {{ salt['pillar.get']("app:user") }}
password = {{ salt['pillar.get']("app:password") }}
# ...and so on

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

Если весь файл (ы) являются чувствительными, то я думаю вы хотите настроить file_tree external pillar , и используйте file.managed с параметром contents_pillar.Это не то, с чем я работал, поэтому у меня нет хорошего примера.

...