Сохранение ваших секретов от попадания в неправильные руки – это главный приоритет. Но как именно вы обеспечиваете безопасность своих секретов? Сохраняете их в локальном текстовом файле? Без шифрования эта опция слишком рискованна. Почему бы не использовать Ansible Vault для шифрования ваших переменных и файлов?
В этом руководстве вы узнаете, как обеспечить безопасность чувствительного контента, такого как ваши пароли или ключи, с помощью Ansible Vault.
Читайте далее и держите любопытные глаза подальше от ваших секретов!
Предварительные требования
В этом уроке будет практическое демонстрация. Если вы хотите следовать за нами, убедитесь, что у вас есть следующее.
- A Linux machine – This tutorial uses Ubuntu 20.04, but any Linux distribution will work.
- Ansible установлен на вашем компьютере.
Настройка редактора Ansible Vault по умолчанию
Как системный администратор, вы можете работать с различными файлами Ansible playbook, содержащими имена пользователей и пароли для разных серверов. Вы не можете зафиксировать эти файлы в системе контроля версий в открытом текстовом формате, потому что это небезопасно. Именно по этой причине полезен Ansible Vault.
Ansible Vault предназначен для интеграции в ваш текущий рабочий процесс для хранения ваших данных в зашифрованном файле. Но перед созданием вашего первого Ansible Vault вам нужно установить свой редактор Ansible Vault по умолчанию.
1. Откройте ваш терминал и подключитесь по SSH к вашему компьютеру.
2. Затем откройте файл ~/.bashrc с помощью текстового редактора. Файл ~/.bashrc представляет собой сценарий оболочки, который выполняется каждый раз при запуске новой сессии терминала. Этот сценарий оболочки инициализирует интерактивную сессию оболочки и определяет переменные среды.
3. Добавьте следующую строку в конец файла ~/.bashrc, сохраните изменения и выйдите из редактора.
Эта строка устанавливает переменную EDITOR для текущего пользователя. Переменная EDITOR гарантирует, что ваш предпочтительный текстовый редактор будет использоваться каждый раз при открытии новой сессии терминала.
Вы можете установить любой другой текстовый редактор по вашему выбору, но в этом учебнике используется текстовый редактор nano.

4. Наконец, выполните следующие команды, чтобы применить изменения (source) без выхода и повторного входа в систему, а затем выведите (echo) текущий текстовый редактор вашей системы.
Убедитесь, что переменная EDITOR установлена в вашем предпочтительном редакторе, как показано ниже.

Создание и шифрование вашего первого хранилища Ansible Vault
Вы установили свой редактор хранилища по умолчанию, поэтому пришло время создать свое первое хранилище. Вы создадите и зашифруете файл, содержащий чувствительную информацию, такую как имена пользователей, пароли, секретные ключи доступа и т. д.
Вы будете использовать команду ansible-vault, основной интерфейс для взаимодействия с Ansible Vaults.
1. Выполните следующую команду для создания файла secret.yml. Ansible использует формат YAML, более человекочитаемый по сравнению с другими форматами данных, такими как JSON.
Вам будет предложено ввести и подтвердить пароль для файла. Вы будете использовать этот пароль для шифрования и расшифровки файла secret.yml позже, так что выберите надежный пароль, который вы можете запомнить.

2. После установки пароля хранилища ваш редактор текста по умолчанию откроет пустой файл. Введите чувствительную информацию, которую вы хотите сохранить в файле, сохраните и закройте редактор.
В этом руководстве переменные aws_access_key и aws_secret_key сохраняются в файле secret.yml. На данном этапе Ansible шифрует файл secret.yml, и никто другой не может прочитать содержимое хранилища, если не знает пароль хранилища.

3. Выполните команду cat, чтобы попытаться просмотреть содержимое файла secret.yml без пароля.
Вы можете проверить, что содержимое файла зашифровано, если вы видите случайные числа, как показано ниже. Заголовок $ANSIBLE_VAULT;1.1;AES256$ в верхней части файла указывает, что файл зашифрован с использованием Ansible Vault с шифром AES256.
Стандарт шифрования данных (AES) – это симметричный алгоритм, который использует один и тот же ключ для шифрования и дешифрования данных.

Шифрование существующих файлов
Вы создали файл с нуля, который автоматически зашифрован. Но как насчет шифрования существующих файлов? Ansible также предлагает подкоманду encrypt для шифрования указанного файла. Чтобы увидеть, как зашифровать существующий файл, вы зашифруете конкретный файл, содержащий переменные Ansible.
Выполните следующую команду для шифрования файла (vars.yml
).
Как и при создании файла secret.yml в первый раз, вам будет предложено ввести пароль для файла vars.yml.
Редактор по умолчанию на этот раз не откроется, потому что файл vars.yml уже существует. Вместо этого вы получите сообщение Шифрование успешно, указывающее, что Ansible зашифровал файл, как показано ниже.

Теперь выполните команду cat ниже, чтобы проверить, что Ansible зашифровал файл vars.yml.

Расшифровка данных из Ansible Vault
Вы видели, как зашифровать файлы, сделав их безопасными. Но как только вам понадобится просмотреть содержимое файлов, как вы расшифруете их? Расшифровка файла полезна, когда вы хотите отредактировать зашифрованный файл или прочитать его содержимое без ввода пароля каждый раз. И подкоманда decrypt Ansible будет полезной.
1. Выполните следующую команду, чтобы расшифровать файл secret.yml.
Подкоманда decrypt принимает путь зашифрованного файла как единственный аргумент.
Укажите пароль для файла, и его содержимое будет расшифровано и записано на диск в виде обычного текста.

2. Затем выполните команду cat, чтобы просмотреть расшифрованное содержимое файла secret.yml.
Вы можете видеть ниже содержимое файла secret.yml выведенное в терминал без шифрования. На этом этапе вы можете добавлять, редактировать или удалять любые строки в файле по своему усмотрению.

3. Наконец, выполните следующую команду, чтобы зашифровать файл secret.yml и укажите пароль, чтобы сохранить содержимое файла в безопасности.

Обновление пароля хранилища Ansible Vault
Вы видели, что вам нужно вводить пароль каждый раз при шифровании и расшифровке файлов. Но возможно, вам просто нужно обновить пароль файла без расшифровки файла. Если так, вам потребуется использовать подкоманду rekey
. Эта подкоманда позволяет вам изменить пароль вашего файла по своему усмотрению.
Выполните следующую команду для обновления пароля файла secret.yml
.
Подкоманда rekey принимает путь к зашифрованному файлу в качестве единственного аргумента.
Укажите текущий пароль для файла, а затем новый пароль, как показано ниже.
На этом этапе старый пароль больше не сможет расшифровать файл.

Теперь выполните следующую команду, чтобы попытаться расшифровать secret.yml
.
Укажите старый пароль при запросе, и вы увидите сообщение об ошибке, где будет сказано, что Расшифровка не удалась, как показано ниже. Этот вывод подтверждает успешное обновление пароля для файла.

Использование защищенных данных в плейбуках и модулях
Вы видели, что выполнение команд для шифрования и расшифровки файлов работает. Но если вы планируете автоматизировать этот процесс для вашего приложения безопасно, вам нужно использовать плейбуки и модули.
1. Откройте файл конфигурации Ansible (~/.ansible.cfg) в вашем редакторе, который содержит настройки Ansible.
Скопируйте и вставьте следующий код в конец файла ~/.ansible.cfg, сохраните изменения и закройте редактор. Этот код указывает Ansible искать файл инвентаря (~/.ansible-hosts).
2. Затем откройте файл ~/.ansible-hosts, который содержит инвентарь хостов, которыми ваш управляемый узел Ansible может управлять.
Заполните файл ~/.ansible-hosts следующей строкой кода, сохраните изменения и закройте файл. Этот код указывает Ansible, что он может управлять локальным хостом через тип локального соединения.
3. Запустите нижеприведенную команду для создания нового зашифрованного файла. Вы можете назвать файл как угодно, но в данном учебнике файл назван helloworld.yml.

Заполните код ниже в файле helloworld.yml, сохраните изменения и закройте редактор.
Этот код представляет собой базовый плейбук Ansible, который выводит сообщение “hello world” на всех хостах в вашем инвентаре. Символ — вверху блока кода обозначает начало YAML-документа.
4. Наконец, выполните команду ansible-playbook ниже, за которой следуют параметры –ask-vault-pass, чтобы выполнить плейбук helloworld.yml на всех хостах в вашем инвентаре.
Укажите пароль для файла helloworld.yml, когда будет запрошено. Как видно ниже, выполнение вашего плейбука было успешным.
- ok=2 – указывает на то, что обе ваши задачи были выполнены успешно.
- changed=1 – указывает на то, что ваша задача внесла одно изменение в состояние вашей системы. В данном случае было выведено сообщение “hello world” в оболочку.
- unreachable и failed оба равны 0 – указывает на то, что ни один хост не был недоступен или неудачен во время выполнения.

Использование Ansible Vault с файлом пароля
Вручную вводить пароль при выполнении отдельных задач удобно, но не практично для использования в реальном мире.
A better way to provide the password for encrypting and decrypting files is to use a password file. This way, you can store the password in a secure location, and Ansible will read the password from the file needed.
1. Выполните нижеуказанную команду, чтобы сохранить пароль Ansible Vault в файл с именем .vault_pass. Замените my_vault_password на ваш фактический пароль от хранилища.
2. Затем выполните каждую из следующих команд для изменения владельца файла (chown) на root и изменения разрешений файла .vault_pass. Эти команды гарантируют, что только вы (пользователь root) можете читать и записывать в файл.
3. Наконец, выполните команду ansible-playbook, приведенную ниже, а затем используйте опцию –vault-password-file для выполнения playbook (helloworld.yml) с использованием файла пароля .vault_pass.
Обратите внимание, что Ansible выполнил playbook без запроса пароля для зашифрованного файла.

Заключение
В этом учебнике вы узнали, как использовать Ansible Vault для шифрования и дешифрования чувствительных данных для плейбуков и задач Ansible. Вы сохранили пароль Ansible Vault в безопасном месте, используя файл пароля. Это удобно для уменьшения вмешательства пользователя при выполнении плейбука.
С этим новым знанием вы теперь можете уверенно шифровать чувствительные данные и делиться своими сценариями с другими без беспокойства о безопасности ваших данных.
Если вы используете LastPass для управления паролями, почему бы не хранить свой пароль от Ansible Vault в LastPass и позволить Ansible автоматически извлекать его при необходимости?