u19-23savkin 2 éve
szülő
commit
453c13c493

BIN
Лекции/П2.2.700_Расширяем_возможности_ Ansible_Ansible_Vault/1.png


+ 65 - 0
Лекции/П2.2.700_Расширяем_возможности_ Ansible_Ansible_Vault/Новый текстовый документ.md

@@ -0,0 +1,65 @@
+##	Расширяем возможности Ansible: Ansible Vault
+Задачи автоматизации развертывания какого-либо ПО или изменения настроек системы практически всегда связаны с использованием учетных записей, обладающих необходимым набором прав для выполнения данных действий. И одна из самых важных проблем при использовании различных скриптов автоматизации состоит в том, что в этом сценарии приходится указывать учетные данные в открытом виде. Соответственно возникает проблема обеспечения безопасности этих данных, ведь к исходному коду скрипта может получить доступ любой пользователь, обладающий соответствующими правами. Кроме того, репозитории, в которых хранится исходный код сценариев тоже нуждаются в защите, так как здесь тоже любой имеющий доступ на чтение может узнать пароли. Конечно, можно попробовать хранить секретную информацию в отдельных файлах и считывать при выполнении сценария, но это не всегда возможно и часто требует дополнительного ручного труда, что несколько снижает преимущества автоматизации.
+![](1.png)
+Склеп для секретов
+И здесь на помощь нам приходит 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