Spec-Zone.ru › Ansible

Управление паролями хранилища

Управлять зашифрованным содержимым проще, если разработать стратегию управления паролями хранилища. Паролем хранилища может быть любая выбранная вами строка. Специальной команды для создания пароля хранилища нет. Однако вам необходимо отслеживать пароли хранилища. Каждый раз, когда вы шифруете переменную или файл с помощью Ansible Vault, необходимо указать пароль. При использовании зашифрованной переменной или файла в команде или плейбуке необходимо указать тот же пароль, который использовался для шифрования. Чтобы разработать стратегию управления паролями хранилища, начните с двух вопросов:

  • Хотите ли вы шифровать всё содержимое одним паролем или использовать разные пароли для разных целей?
  • Где вы хотите хранить пароль или пароли?

Выбор между одним паролем и несколькими паролями

Если у вас небольшая команда или мало конфиденциальных значений, вы можете использовать один пароль для всего, что шифруете с помощью Ansible Vault. Храните пароль хранилища в безопасности — в файле или менеджере секретов, как описано ниже.

Если у вас большая команда или много конфиденциальных значений, вы можете использовать несколько паролей. Например, можно использовать разные пароли для разных пользователей или уровней доступа. В зависимости от ваших потребностей, можно задать отдельный пароль для каждого зашифрованного файла, каталога или среды. У вас может быть плейбук, включающий два файла vars: один для среды разработки, другой для рабочей среды, зашифрованные разными паролями. Запуская плейбук, вы можете выбрать правильный пароль хранилища для целевой среды с помощью идентификатора хранилища.

Управление несколькими паролями с помощью идентификаторов хранилища

Если вы используете несколько паролей хранилища, их можно различать с помощью идентификаторов хранилища. Идентификатор хранилища используется тремя способами:

  • Передайте его с помощью --vault-id команде ansible-vault при создании зашифрованного содержимого
  • Добавьте его в место хранения пароля для этого идентификатора хранилища (см. раздел Хранение паролей хранилища и доступ к ним)
  • Передайте его с помощью --vault-id команде ansible-playbook при запуске плейбука, использующего содержимое, зашифрованное с этим идентификатором хранилища

При передаче идентификатора хранилища в качестве параметра команды ansible-vault к зашифрованному содержимому добавляется метка (подсказка или условное имя). Эта метка указывает, какой пароль использовался для шифрования. Зашифрованная переменная или файл содержит метку идентификатора хранилища в открытом виде в заголовке. Идентификатор хранилища — последний элемент перед зашифрованным содержимым. Например:

my_encrypted_var: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

Помимо метки, необходимо указать источник соответствующего пароля. В зависимости от способа хранения паролей хранилища источником может быть запрос ввода, файл или скрипт. Шаблон выглядит так:

--vault-id label@source

Если в плейбуке используются несколько зашифрованных переменных или файлов, зашифрованных разными паролями, при запуске плейбука необходимо передать идентификаторы хранилищ. Можно использовать --vault-id отдельно, вместе с --vault-password-file или с --ask-vault-pass. Шаблон такой же, как при создании зашифрованного содержимого: укажите метку и источник соответствующего пароля.

Ниже приведены примеры шифрования содержимого с идентификаторами хранилищ и использования содержимого, зашифрованного с такими идентификаторами. Параметр --vault-id работает с любой командой Ansible, взаимодействующей с хранилищами, включая ansible-vault, ansible-playbook и другие.

Ограничения идентификаторов хранилища

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

Проверка соответствия идентификаторов хранилища

По умолчанию метка идентификатора хранилища служит лишь подсказкой, напоминающей, какой пароль использовался для шифрования переменной или файла. Ansible не проверяет, совпадает ли идентификатор хранилища в заголовке зашифрованного содержимого с идентификатором, указанным при использовании этого содержимого. Ansible расшифровывает все файлы и переменные, к которым обращается команда или плейбук, если они зашифрованы указанным паролем. Чтобы проверять зашифрованное содержимое и расшифровывать его только в том случае, если содержащийся в нём идентификатор хранилища совпадает с идентификатором, переданным с помощью --vault-id, задайте параметр конфигурации DEFAULT_VAULT_ID_MATCH. Если задать DEFAULT_VAULT_ID_MATCH, каждый пароль будет использоваться только для расшифровки данных, зашифрованных с той же меткой. Это эффективно и предсказуемо, а также может уменьшить вероятность ошибок, если разные значения зашифрованы разными паролями.

Примечание

Даже при включённом параметре DEFAULT_VAULT_ID_MATCH Ansible не требует использовать один и тот же пароль каждый раз при использовании определённой метки идентификатора хранилища.

Хранение паролей хранилища и доступ к ним

Вы можете запомнить пароль хранилища или вручную скопировать его из любого источника и вставить в командную строку, но большинство пользователей хранят пароли в безопасном месте и при необходимости получают к ним доступ из Ansible. Для хранения паролей хранилища с доступом из Ansible есть два варианта: файлы или сторонний инструмент, например системная связка ключей или менеджер секретов. Если вы храните пароли в стороннем инструменте, для получения доступа к ним из Ansible потребуется клиентский скрипт пароля хранилища.

Хранение паролей в файлах

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

При запуске плейбука, использующего пароль хранилища, сохранённый в файле, укажите файл с помощью флага --vault-password-file. Например:

ansible-playbook --extra-vars @secrets.enc --vault-password-file secrets.pass

Хранение паролей в сторонних инструментах с помощью клиентских скриптов пароля хранилища

Пароли хранилища можно хранить в системной связке ключей, базе данных или менеджере секретов и получать к ним доступ из Ansible с помощью клиентского скрипта пароля хранилища. Введите пароль в виде строки в одну строку. Если у пароля есть идентификатор хранилища, сохраните его способом, совместимым с используемым инструментом хранения паролей.

Чтобы создать клиентский скрипт пароля хранилища:

  • Создайте файл с именем, оканчивающимся на -client или -client.EXTENSION
  • Сделайте файл исполняемым
  • В самом скрипте:
    • Выводите пароли в стандартный поток вывода
    • Принимайте параметр --vault-id
    • Если скрипт запрашивает данные (например, пароль базы данных), выводите запросы в терминал (TTY).

При запуске плейбука, использующего пароли хранилища, сохранённые в стороннем инструменте, укажите скрипт в качестве источника с помощью флага --vault-id. Например:

ansible-playbook --vault-id dev@contrib-scripts/vault/vault-keyring-client.py

Ansible запускает клиентский скрипт с параметром --vault-id, чтобы скрипт знал, какую метку идентификатора хранилища вы указали. Например, скрипт, загружающий пароли из менеджера секретов, может использовать метку идентификатора хранилища, чтобы выбрать пароль для «dev» или «prod». В результате выполнения приведённой выше команды клиентский скрипт будет запущен следующим образом:

contrib-scripts/vault/vault-keyring-client.py --vault-id dev

Пример клиентского скрипта, загружающего пароли из системной связки ключей, см. в скрипте vault-keyring-client.

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/vault_guide/vault_managing_passwords.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API