Spec-Zone.ru › Ansible

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

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

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

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

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

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

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

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

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

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

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

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

--vault-id label@source

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

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

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

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

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

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

Примечание

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

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

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

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

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

Когда вы запускаете playbook, который использует пароль хранилища, хранящийся в файле, укажите файл в флаге --vault-password-file. Например:

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

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

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

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

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

Когда вы запускаете playbook, который использует пароли хранилища, хранящиеся в инструменте стороннего производителя, укажите скрипт как источник в флаге --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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/vault_guide/vault_managing_passwords.html

Spec-Zone.ru

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