|
@@ -0,0 +1,65 @@
|
|
|
+## Расширяем возможности Ansible: Ansible Vault
|
|
|
+Задачи автоматизации развертывания какого-либо ПО или изменения настроек системы практически всегда связаны с использованием учетных записей, обладающих необходимым набором прав для выполнения данных действий. И одна из самых важных проблем при использовании различных скриптов автоматизации состоит в том, что в этом сценарии приходится указывать учетные данные в открытом виде. Соответственно возникает проблема обеспечения безопасности этих данных, ведь к исходному коду скрипта может получить доступ любой пользователь, обладающий соответствующими правами. Кроме того, репозитории, в которых хранится исходный код сценариев тоже нуждаются в защите, так как здесь тоже любой имеющий доступ на чтение может узнать пароли. Конечно, можно попробовать хранить секретную информацию в отдельных файлах и считывать при выполнении сценария, но это не всегда возможно и часто требует дополнительного ручного труда, что несколько снижает преимущества автоматизации.
|
|
|
+
|
|
|
+Склеп для секретов
|
|
|
+И здесь на помощь нам приходит Ansible Vault – утилита для шифрования любых файлов в которых вы хотите хранить секретные переменные (пароли, ключи и т.д.). В качестве алгоритма шифрования Ansible Vault использует алгоритм симметричного шифрования AES256.
|
|
|
+
|
|
|
+В этой статье мы рассмотрим использование Ansible Vault для работы с секретной информацией. Сразу замечу, что многие предпочитают использовать Hashicorp Vault для работы с Ansible, однако этого мощного средства в данной статье касаться не будем и поговорим только о встроенных в Ansible средствах.
|
|
|
+
|
|
|
+Итак, основное предназначение Vault это хранение конфиденциальной информации, такой как учетные данные и секретные ключи. Как происходит обработки зашифрованных данных: в процессе выполнения плейбука данные автоматически расшифровываются и наша задача при выполнении плейбука правильно указать ключи, необходимые для расшифровки. Для шифрования используется парольная фраза и, соответственно, чем сложнее фраза, тем сложнее злоумышленнику расшифровать данные.
|
|
|
+
|
|
|
+Важное уточнение. Ansible Vault защищает данные только когда они находятся в состоянии покоя, после того, как они расшифрованы Vault уже никаким образом не может их защитить и об их безопасности необходимо заботиться уж другими средствами.
|
|
|
+
|
|
|
+Приступая к работе
|
|
|
+Для работы с Vault нам прежде всего потребуется сам Ansible. В предыдущих статьях мы уже рассматривали его установку, поэтому будем считать, что все что нужно у вас уже есть.
|
|
|
+
|
|
|
+Для работы с файлами мы можем вводить парольную фразу с клавиатуры при каждом обращении к Vault или же использовать файл, в котором хранится парольная фраза. В первом случае в строку вызова добавляется ключ —ask-vault-pass, во втором добавляется параметр —vault-password-file=<путь к файлу>.
|
|
|
+
|
|
|
+Но прежде, чем начать работу с утилитой официальное руководство по Ansible предлагает нам определиться со стратегией управления паролями вашего хранилища. А именно, для начала нам нужно определиться с тем, будем ли мы шифровать весь контент одним паролем или же мы будем применять разные парольные фразы для разных случаев. Также, очень важный вопрос это где вы собираетесь хранить свои пароли.
|
|
|
+
|
|
|
+В случае, если у вас небольшая команда или немного данных, вы можете использовать один пароль для всего, что вы шифруете с помощью Ansible Vault. Здесь важно помнить, что не стоит пытаться шифровать все данные, шифруйте только то, что является действительно секретной информацией, что критично для бизнеса и инфраструктуры.
|
|
|
+
|
|
|
+Несколько паролей удобны если у вас большая команда или большой объем конфиденциальных данных. Например, вы можете использовать разные пароли для разных пользователей или для разграничения разных уровней доступа. В зависимости от решаемых задач вам может потребоваться другой пароль для каждого зашифрованного файла или каталога. Например, у вас может быть playbook, который включает в себя два файла vars, один для среды разработки и один для рабочей среды, зашифрованные двумя разными паролями. При запуске плейбука вам потребуется выбрать правильный пароль хранилища для среды, на которую вы ориентируетесь, используя идентификатор хранилища.
|
|
|
+
|
|
|
+Начнем с простого примера. Создадим зашифрованный файл с консольным вводом пароля. Пока никакой автоматизации.
|
|
|
+
|
|
|
+ansible-vault create --vault-id @prompt secret.yml
|
|
|
+
|
|
|
+New vault password (default):
|
|
|
+
|
|
|
+Confirm new vault password (default):
|
|
|
+
|
|
|
+Содержимое файла плейбука может быть например следующим:
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+- name: This is a secret file
|
|
|
+
|
|
|
+ hosts: s1.otus.local
|
|
|
+
|
|
|
+ tasks:
|
|
|
+
|
|
|
+ - name: Execute command 'ls'
|
|
|
+
|
|
|
+ command: ls
|
|
|
+
|
|
|
+После сохранения yml файла убедимся что он зашифрован.
|
|
|
+Как видно, все кроме заголовка превратилось в бессмысленный набор цифр. Однако, зашифровать данные недостаточно, важно еще и расшифровать их и для этого мы воспользуемся следующей командой.
|
|
|
+
|
|
|
+ansible-vault view --vault-id @prompt secret.yml
|
|
|
+
|
|
|
+Как видно все достаточно просто. Если нам необходимо внести изменения в зашифрованный файл то можно воспользоваться следующей командой:
|
|
|
+
|
|
|
+ansible-vault edit secret.yml
|
|
|
+Управление паролями
|
|
|
+В завершении статьи немного поговорим об управлении паролями, используемыми для шифрования. Общеизвестно, что пароли необходимо на регулярной основе менять, в противном случае со времени они перестанут быть секретом.
|
|
|
+
|
|
|
+Для замены пароля необходимо указать старый пароль и затем два раза ввести новый:
|
|
|
+
|
|
|
+ansible-vault rekey --ask-vault-pass secret.yml
|
|
|
+Заключение
|
|
|
+Сегодня мы рассмотрели работу с шифрованием данных в Ansible с помощью Ansible Vault. Данная утилита предоставляет базовый функционал для шифрования, а для более решения более сложных задач управления шифрованием рекомендуется использовать Hashicorp Vault.
|
|
|
+Список литературы
|
|
|
+https://habr.com/ru/company/otus/blog/722106/
|
|
|
+https://docs.ansible.com/ansible/latest/vault_guide/index.html
|
|
|
+https://docs.ansible.com/ansible/2.8/user_guide/vault.html
|