Идея состоит в том, чтобы поместить все наши конфиденциальные данные [...]
Значение «все» в этом предложении должно быть тщательно проанализировано, прежде чем внедрять решение, которое вы планируете.
Ansible vault - очень полезный инструмент, но его следует использовать только для хранения секретов, которые:
- Специально необходим для развертывания
- Легко сделать бесполезным для владельцев, которые должны не знать о них, но которые могут незаконно «запомнить» их (как правило, уволенные сотрудники)
Второй момент имеет решающее значение.
Многие люди и, возможно, вся команда DevOps будут иметь доступ к паролю к хранилищу и, следовательно, ко всем секретам.
Следовательно, для всех секретов, хранящихся в хранилище, должно соблюдаться условие, при котором человек или машина с несанкционированным доступом к ним не могут использовать их, если это необходимо.
В частности, если вы используете ansible для развертывания базы данных и ее пользователей, вы можете хранить пароли в хранилище, но вам придется быть очень осторожным (и, скорее всего, рассмотреть другое решение), если эта служба будет доступна из Интернета. и без необходимости какой-либо аутентификации VPN!
Пользователи (DevOps), раскрывающие секрет, должны быть неспособны использовать «запомненные» пароли, если на них наложен один барьер безопасности (например, аннулирован доступ к VPN). В дополнение к этому, доступ к хранилищу исходного кода (где хранится хранилище) также должен быть аннулирован до изменения паролей.
В этих условиях ансайловое хранилище является очень полезным инструментом.
Попытка сохранить в хранилище секрет, который может быть использован любым человеком или машиной в Интернете, вместо этого будет ошибкой (например, учетные данные пользователей VPN).
Есть ли другие варианты, которые являются лучшим (и безопасным) способом хранения пароля ansible-vault
В условиях предыдущего параграфа, я думаю, что хорошей практикой будет:
- Храните пароль хранилища во внешнем безопасном хранилище (что-то вроде Vault от HashiCorp или любого SaaS для управления учетными данными)
- Разрешить доступ к внешнему элементу хранилища для DevOps (для тестирования им потребуется пароль), а также для системы CI / CD или контроллера ANSI
Соблюдайте соглашение об использовании секретов ! Вы не сможете просматривать изменения в секретах, и вы не сможете найти доступные переменные в файлах секретов! Так что будьте внимательны с самого начала. Хорошим соглашением является присвоение secret_
префиксам всех переменных, хранящихся в хранилище ansible . Когда вы увидите что-то вроде:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
вы будете знать, что значение хранится в хранилище ansible.