В сети есть некоторое количество информации о том как две указанные вещи можно связать:
https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.vault.html
https://support.saltstack.com/Third-party_Solutions/HashiCorp/Quick_Guide_to_Vault_Integration
https://medium.com/@aratik711/saltstack-and-vault-integration-20eeb2e7ec9c
https://backbeat.tech/blog/secure-servers-with-saltstack-and-vault-part-2/
Интеграция предполагает множество вариантов, в которых не так-то просто разобраться.
Я предлагаю сосредоточиться на общей картине, поэтому нарисовал следующее:
Я пока использую довольно старую версию saltstack - 2017.7.8, поэтому работа saltstack и vault идет только через токены.
UPDATE: с версии 2018 (или 2019) salt master теперь от себя (т.е. со своим токеном) не делает запросы для pillar.get, все запросы теперь идут с токенами миниона. В свою очередь это выливается в существенно более медленную работу стейтов, если для рендеринга пилларов надо много раз сходить в vault (мы об это больно наступили - в версии 2017 поместив много пилларов в vault, смигрировав на 2019 версию, после этого стейты начали работать оочень медленно(~3 мин вместо ~20сек) )
Условно для себя я выделяю 3 текущих способа взаимодействия saltstack и vault:
- Конфигурирование политик vault из saltstack
- Чтение/изменение секретов из salt
- Подключение ext_pillar с данными, взятыми из vault
Данные 3 ситуации и попытался изобразить на картинке.
1. Приведу минимальный стейт-файл states/base/vault/policies.sls для конфигурирования политик:
{# master only generate tokens with different policies for salt minions #} policy_saltstack_master: vault.policy_present: - name: policy_saltstack_master - rules: | path "auth/token/*" { capabilities = ["create", "update", "delete", "sudo"] } policy_saltstack_minion: vault.policy_present: - name: policy_saltstack_minion - rules: | path "sys/policy/*" { capabilities = ["create", "read", "update", "list"] }
Cоздаем токен с политикой для salt master, с помощью которого будем генерировать токены для произвольных политик. В частности, будут генерироваться токены для минионов, которые смогут конфигурировать политики в vault.
Изначально данные политики необходимо создать руками (vault policy write), а только потом уже перенести в соответствующий стейт. После этого уже можем добавлять/изменять политики через saltstack.
Кусок конфига мастера:
vault: url: https://vault.test.ru auth: method: token token: "s.d5...B7p" policies: - policy_saltstack_minion peer_run: '.*': - vault.generate_token
2. Читать и изменять секреты из vault - тут ничего необычного, все согласно документации, работает схоже с п.1
3. salt, pillar, vault: из отличий - к vault "ходит" сам salt master, а не минионы как в предыдущих случаях. Подключение ext_pillar - судя по всему, организовать вложенные пиллары из vault не получится.