Мы планируем использовать ansible vault в нашем проекте, чтобы предотвратить утечку паролей или ключей в git.
Идея состоит в том, чтобы поместить все наши конфиденциальные данные в простой файл, а затем зашифровать этот файл с помощью ansible-vault с помощью пароля, прежде чем нажимать на git.
Чтобы расшифровать файл, мы должны передать пароль хранилища в ansible, я думаю о 3 возможностях:
- Храните его в переменной окружения сервера
- Передайте его как опцию команде ansible-playbook
- Сохраните его в не версионный файл.
Есть ли какие-либо другие варианты, которые являются лучшим (и безопасным) способом для хранения пароля ansible-vault, в документации по ANSI ничего не сказано об этом.
Ответы:
Значение «все» в этом предложении должно быть тщательно проанализировано, прежде чем внедрять решение, которое вы планируете.
Ansible vault - очень полезный инструмент, но его следует использовать только для хранения секретов, которые:
Второй момент имеет решающее значение.
Многие люди и, возможно, вся команда DevOps будут иметь доступ к паролю к хранилищу и, следовательно, ко всем секретам.
Следовательно, для всех секретов, хранящихся в хранилище, должно соблюдаться условие, при котором человек или машина с несанкционированным доступом к ним не могут использовать их, если это необходимо.
В частности, если вы используете ansible для развертывания базы данных и ее пользователей, вы можете хранить пароли в хранилище, но вам придется быть очень осторожным (и, скорее всего, рассмотреть другое решение), если эта служба будет доступна из Интернета. и без необходимости какой-либо аутентификации VPN!
Пользователи (DevOps), раскрывающие секрет, должны быть неспособны использовать «запомненные» пароли, если на них наложен один барьер безопасности (например, аннулирован доступ к VPN). В дополнение к этому, доступ к хранилищу исходного кода (где хранится хранилище) также должен быть аннулирован до изменения паролей.
В этих условиях ансайловое хранилище является очень полезным инструментом.
Попытка сохранить в хранилище секрет, который может быть использован любым человеком или машиной в Интернете, вместо этого будет ошибкой (например, учетные данные пользователей VPN).
В условиях предыдущего параграфа, я думаю, что хорошей практикой будет:
Соблюдайте соглашение об использовании секретов ! Вы не сможете просматривать изменения в секретах, и вы не сможете найти доступные переменные в файлах секретов! Так что будьте внимательны с самого начала. Хорошим соглашением является присвоение
secret_
префиксам всех переменных, хранящихся в хранилище ansible . Когда вы увидите что-то вроде:postgres.yml:
вы будете знать, что значение хранится в хранилище ansible.
источник
Поскольку вы еще ничего не реализовали, вы можете пересмотреть это. Использование системы, подобной Ansible Vault, имеет ряд недостатков безопасности:
Потенциально гораздо более безопасная, хотя и более сложная система, которая не имеет этих недостатков, - это использовать Hashicorp Vault для хранения ваших секретов. Затем вы все равно можете извлечь значения из него почти так же легко, как из хранилища Ansible, используя https://github.com/jhaals/ansible-vault .
Затем вам придется управлять аутентификацией в Hashicorp Vault, и это вопрос черепахи . Для людей, я думаю, лучшее решение - периодически запрашивать пароль и истекать токен через короткое время; для машин - использовать бэкэнд аутентификации AWS или аналогичный. Вы никогда не сможете полностью избавиться от необходимости аутентификации где-либо, но вы можете усложнить злоумышленнику доступ к нему.
Теперь, если настройка и администрирование сервера секретов слишком сложны для вас, тогда, конечно, вы можете просто использовать Ansible vault. Зачем вообще хранить пароль на отдельных машинах? Для интерактивного использования вы можете просто запросить пароль, и пользователи могут сохранить его в выбранном менеджере паролей. iTerm на OS X имеет менеджер паролей, который интегрируется с Keychain.app, что делает это особенно легко там.
источник
Это в значительной степени касается внутренних политик обработки конфиденциальных данных.
Я хотел бы рассказать вам о моем подходе к этому и объяснить то, что я считаю за и против. Я храню пароль Ansible Vault в файле на управляющем компьютере и на него указывает переменная среды:
У меня это есть на моей рабочей станции (так как мне нужно тестировать и разрабатывать игровые книги), у некоторых коллег оно есть, и, конечно, у нас оно есть на главном управляющем компьютере Ansible.
Плюсы:
Минусы:
У минусов есть свои недостатки, но опять-таки это зависит от политик и правил, которые вы приняли в своей повседневной деятельности.
источник
Взгляните на этот проект, чтобы управлять паролями, зашифровывающими ваши ответные хранилища https://github.com/Smile-SA/ansible-vault-manager
Он поддерживает несколько платформ хранения ключей с помощью плагинов (на данный момент реализован только AWS SSM). Более того, интеграция с текущим проектом Ansible очень проста ...
источник