Как использовать Ansible Vault для хранения секретных ключей – CloudSavvy IT
При большинстве средств автоматизации учетные данные необходимы для аутентификации и использования защищенных ресурсов. Проблема всегда заключалась в том, как лучше хранить эти учетные данные надежно. анзибль это система автоматизации, которая обеспечивает предоставление программного обеспечения, управление конфигурацией и развертывание приложений.
Как и любой другой системе автоматизации, Ansible нужен безопасный способ хранения секретов. В случае Ansible эта система называется Ansible Vault, Ansible Vault предоставляет кроссплатформенное решение для безопасного хранения учетных данных.
Представляем Ansible Vault
Ansible Vault можно использовать для шифрования любого файла или самих переменных из книги воспроизведения. По умолчанию используется AES – шифрование на основе общего секретного ключа. Оба метода шифрования файлов и переменных имеют свои преимущества и недостатки.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)
Шифрование файлов
Чтобы создать новый зашифрованный файл с именем secrets.yml
, просто используйте следующее ansible-vault
команда.
ansible-vault create secrets.yml
После запроса пароля, ansible-vault
Команда запустит редактор системных файлов по умолчанию, который при сохранении приведет к зашифрованному файлу.
Точно так же, чтобы зашифровать ранее незашифрованный файл, используйте следующее ansible-vault
команда. Обратите внимание, что это использует encrypt
параметр, а не create
параметр.
ansible-vault encrypt secrets.yml
Недостатком использования шифрования файлов является удобочитаемость. Если вы откроете файл, то обнаружите, что без расшифровки невозможно расшифровать содержимое.
Переменное шифрование
В пределах книги игр можно использовать зашифрованную переменную, предварительно добавив зашифрованные данные к !vault
тег. Запуск encrypt_string
аргумент ansible_vault
Команда приведет к зашифрованной строке, которую вы можете использовать в своих playbooks.
ansible-vault encrypt_string 'secret_data' --name 'my_secret'
После запроса пароля вы получите следующую зашифрованную строку.
my_secret: !vault |
$ANSIBLE_VAULT;1.1;AES256
37636561366636643464376336303466613062633537323632306566653533383833366462366662
6565353063303065303831323539656138653863353230620a653638643639333133306331336365
62373737623337616130386137373461306535383538373162316263386165376131623631323434
3866363862363335620a376466656164383032633338306162326639643635663936623939666238
3161
Переменное шифрование отлично подходит для удобочитаемости, но при использовании этого метода жертвуется возможность использовать повторное использование командной строки.
Использование Ansible Vault на практике
Вы можете осознать, что использование Ansible Vault в производстве – это сложная задача. Чтобы эффективно использовать Ansible Vault, следующие методы облегчают этот процесс.
- Непроверенная расшифровка
- Несколько хранилищ
- смена ключей
Непроверенная расшифровка
Одним из вариантов прозрачного дешифрования файла или переменной при использовании Ansible является сохранение пароля в защищенном и не версионном файле паролей. Чтобы сослаться на этот сохраненный пароль, просто укажите местоположение файла, используя vault-password-file
параметр.
ansible-playbook --vault-password-file /path/vault-password-file secrets.yml
Это расшифрует любые включенные зашифрованные файлы или переменные, используя включенный пароль.
Очень важно не фиксировать ваш файл с открытым текстом пароля в вашей системе контроля версий. Аналогичным образом защитите этот файл только для пользователя или группы, которым необходим доступ к сохраненному паролю в файловой системе с использованием списков контроля доступа (ACL).
Несколько хранилищ
Несмотря на то, что удобно иметь одно хранилище со всеми зашифрованными секретами, лучшей практикой безопасности является разделение защищенных учетных данных на отдельные соответствующие хранилища. Примером этого может быть разделение среды производства и разработки. К счастью, Ansible Vault позволяет нам создавать несколько хранилищ и ссылок, которые хранят зашифрованные данные с помощью метки.
ansible-vault create --vault-id prod@prompt prod-secrets.yml
Приведенный выше код создаст prod
хранилище и запросить пароль во время выполнения (как отмечено @prompt
строка). Если у вас уже есть файл пароля, который вы хотели бы использовать, просто укажите путь к файлу.
ansible-vault create --vault-id prod@/path/prod-vault-password-file prod-secrets.yml
Допустим, мы хотим зашифровать то же самое my_secret
переменная, но на этот раз хранить, что в нашем prod
свод. Как и раньше, используя encrypt_string
но с соответствующими vault-id
позволяет хранить секрет в указанном месте.
ansible-vault encrypt_string --vault-id prod@/path/prod-vault-password-file 'secret_data' --name 'my_secret'
Вы заметите, что после AES256
строка, новый фрагмент текста, prod
Показано. Это указывает на хранилище, в котором находится зашифрованный текст.
my_secret: !vault |
$ANSIBLE_VAULT;1.1;AES256;prod
37636561366636643464376336303466613062633537323632306566653533383833366462366662
6565353063303065303831323539656138653863353230620a653638643639333133306331336365
62373737623337616130386137373461306535383538373162316263386165376131623631323434
3866363862363335620a376466656164383032633338306162326639643635663936623939666238
3161
Что, если вы хотите включить несколько хранилищ в одну книгу? Вы можете легко перейти в несколько vault-id
декларации о ansible-playbook
командная строка.
ansible-playbook --vault-id dev@/path/dev-vault-password-file --vault-id prod@/path/prod-vault-password-file site.yml
смена ключей
Наконец, важно регулярно циклически повторять ваши пароли. Для файлов, которые зашифрованы, вы можете использовать командную строку ниже. Проходя в new-vault-id
Параметр позволяет легко сменить пароль, которым зашифрованы секреты.
ansible-vault rekey --vault-id prod@/path/prod-vault-password-file-old --new-vault-id prod@/path/prod-vault-password-file-new site.yml
Как отмечено выше, повторное использование командной строки не работает для зашифрованных переменных. В этом случае вам нужно будет индивидуально перешифровать строки и заменить их в заданной книге.
Лучшие практики
Безопасность сложна, особенно когда речь идет об использовании секретов в системах автоматизации. Имея это в виду, ниже приведены несколько рекомендаций, которые следует использовать при использовании Ansible Vault. Хотя мы рассмотрели некоторые из них ранее, было бы целесообразно повторить эту практику.
- Защищенные ACL и неверсированные файлы паролейФайлы паролей не должны храниться в системах контроля версий, таких как GIT. Кроме того, убедитесь, что только соответствующие пользователи могут получить доступ к файлу паролей.
- Отдельные хранилищаОбычно используется много разных сред. Поэтому лучше всего разделить необходимые учетные данные на соответствующие хранилища.
- Регулярное изменение пароля к файлу и переменнойВ случае повторного использования или утечки пароля лучше всего регулярно вводить новые пароли, чтобы использовать их для ограничения риска.
Заключение
Как и в случае любой системы автоматизации, очень важно, чтобы секреты были должным образом защищены и контролировались. Благодаря Ansible Vault этот процесс становится простым и гибким. Использование лучших практик, описанных выше, хранение и использование секретов в Ansible является безопасным и надежным.
Чтобы еще больше расширить Ansible Vault и поднять этот процесс на новый уровень, вы можете использовать сценарии, которые интегрируются в решения для управления паролями. Как вы можете видеть, Ansible Vault – отличный способ использовать секреты в игровых книгах Ansible.
Программы для Windows, мобильные приложения, игры - ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале - Подписывайтесь:)