Защитите свои секреты с помощью Ansible Vault

В этом блоге о хранилище Ansible объясняется, как конфиденциальные данные (пароли / секретные ключи / файлы сертификатов) хранятся в зашифрованных файлах и встраиваются в Ansible Playbooks.

Чем выше использование технологий, тем выше возможная угроза безопасности. Типичная установка Ansible требует, чтобы вы указали «Секреты». Эти секреты могут быть буквально любыми: паролями, токенами API, общедоступными или закрытыми ключами SSH, сертификатами SSL и т. Д. Как мы можем сохранить эти секреты в безопасности? В Ansible есть функция под названием Ansible Vault.



В этом блоге я продемонстрирую, как использовать Ansible Vault, и изучу некоторые из лучших практик по обеспечению безопасности данных.



Темы, затронутые в этом блоге:

Если вы хотите освоить DevOps, ' конечно был бы вашим вариантом.



Что такое Ansible Vault?

Наличие инфраструктуры в виде кода может создать угрозу раскрытия ваших конфиденциальных данных миру, что приведет к нежелательным проблемам с безопасностью. Ansible Vault - это функция, которая позволяет вам хранить все ваши секреты в безопасности. Он может шифровать целые файлы, целые книги воспроизведения YAML или даже несколько переменных. Он предоставляет возможность не только зашифровать конфиденциальные данные, но и интегрировать их в свои игровые книги.

Vault реализуется с детализацией на уровне файлов, где файлы либо полностью зашифрованы, либо полностью не зашифрованы. Он использует один и тот же пароль для шифрования и дешифрования файлов, что делает использование Ansible Vault очень удобным для пользователя.

Зачем использовать Ansible Vault?

Поскольку Ansible используется для автоматизации, существует высокая вероятность того, что playbooks содержат определенные учетные данные, сертификаты SSL или другие конфиденциальные данные. Сохранять такие конфиденциальные данные в виде обычного текста - плохая идея. Одна неверная фиксация на GitHub или кража ноутбука может нанести организации огромные убытки. Здесь на сцену выходит хранилище Ansible. Это отличный способ иметь инфраструктуру в виде кода без ущерба для безопасности.



Предположим, у нас есть сценарий, который предоставляет ваш экземпляр EC2 на AWS. Вам необходимо указать свой идентификатор ключа доступа AWS и секретный ключ AWS в playbook. Вы не передаете эти ключи другим лицам по понятным причинам. Как вы их не выставляете? Есть два способа: либо зашифровать эти две переменные и встроить их в playbook, либо зашифровать всю playbook.

Это был лишь один из сценариев, в которых можно использовать доступное хранилище. Мы можем либо зашифровать файлы целиком, либо просто зашифровать несколько переменных, которые могут содержать конфиденциальные данные, а затем Ansible автоматически расшифрует их во время выполнения. Теперь мы можем безопасно передать эти значения в GitHub.

Создание зашифрованного файла

Чтобы создать зашифрованный файл, используйте ansible-vault создать команду и передайте имя файла.

как проверить палиндром в Java
$ ansible-vault создать имя_файла.yaml

Вам будет предложено создать пароль, а затем подтвердить его, введя его повторно.

ansible vault create - Ansible Vault - Edureka

После подтверждения пароля будет создан новый файл и откроется окно редактирования. По умолчанию редактор Ansible Vault - vi. Вы можете добавить данные, сохранить и выйти.

И ваш файл зашифрован.

Редактирование зашифрованных файлов

Если вы хотите отредактировать зашифрованный файл, вы можете отредактировать его, используя анзибл-хранилище править команда.

$ ansible-vault редактировать secretts.txt

Где secrets.txt - это уже созданный зашифрованный файл.

Вам будет предложено ввести пароль хранилища. Файл (расшифрованная версия) откроется в редакторе vi, и вы сможете внести необходимые изменения.

Если вы проверите вывод, вы увидите, что ваш текст будет автоматически зашифрован при сохранении и закрытии.

Просмотр зашифрованного файла

Если вы хотите просто просмотреть зашифрованный файл, вы можете использовать доступный вид хранилища команда.

$ ansible-vault просмотр filename.yml

Вам снова будет предложено ввести пароль.

и вы увидите аналогичный результат.

Изменение пароля хранилища

Конечно, бывают случаи, когда вам нужно изменить пароль хранилища. Вы можете использовать изменение ключа ansible-vault команда.

$ ansible-vault rekey secrets.txt

Вам будет предложено ввести текущий пароль хранилища, затем новый пароль и, наконец, подтвердить новый пароль.

Шифрование незашифрованных файлов

Предположим, у вас есть файл, который вы хотите зашифровать, вы можете использовать ansible-vault шифрование команда.

$ ansible-vault зашифровать filename.txt

Вам будет предложено ввести и подтвердить пароль, и ваш файл будет зашифрован.

Теперь, когда вы посмотрите на содержимое файла, все оно зашифровано.

Расшифровка зашифрованных файлов

Если вы хотите расшифровать зашифрованный файл, вы можете использовать дешифровать анзибл-хранилище команда.

$ ansible-vault расшифровать filename.txt

Как обычно, вам будет предложено ввести и подтвердить пароль хранилища.

Шифрование определенных переменных

Лучшая практика при использовании Ansible Vault - шифровать только конфиденциальные данные. В приведенном выше примере команда разработчиков не хочет делиться своим паролем с производственной и промежуточной группой, но им может потребоваться доступ к определенным данным для выполнения своей собственной задачи. В таких случаях следует шифровать только те данные, которыми вы не хотите делиться с другими, а все остальное оставьте как есть.

Ansible Vault позволяет шифровать только определенные переменные. Вы можете использовать ansible-хранилище encrypt_string команда для этого.

$ ansible-vault encrypt_string

Вам будет предложено ввести и подтвердить пароль хранилища. Затем вы можете начать вставлять строковое значение, которое вы хотите зашифровать. Нажмите ctrl-d, чтобы завершить ввод. Теперь вы можете назначить этот зашифрованныйценностьк строке в playbook.

Вы также можете добиться того же в одной строке.

$ ansible-vault encrypt_string 'строка' --name 'имя_переменной'

Расшифровка зашифрованных файлов во время выполнения

Если вы хотите расшифровать файл во время выполнения, вы можете использовать –Ask-vault-pass флаг.

$ ansible-playbook launch.yml --ask-vault-pass

Это расшифрует все зашифрованные файлы, которые используются для выполнения этой книги запуска launch.yml. Кроме того, это возможно только в том случае, если все файлы зашифрованы одним паролем.

Запросы пароля могут раздражать. Цель автоматизации становится бессмысленной. Как нам это улучшить? В Ansible есть функция под названием «файл паролей», которая ссылается на файл, содержащий пароль. Затем вы можете просто передать этот файл паролей во время выполнения, чтобы автоматизировать его.

$ ansible-playbook launch.yml --vault-файл-пароля ~ / .vault_pass.txt

Также возможно наличие отдельного скрипта, определяющего пароли. Вы должны убедиться, что файл сценария является исполняемым, а пароль выводится на стандартный вывод, чтобы он работал без досадных ошибок.

$ ansible-playbook launch.yml --vault-файл-пароля ~ / .vault_pass.py

Использование идентификатора хранилища

Vault Id - это способ предоставления идентификатора конкретному паролю хранилища. Vault ID помогает шифровать разные файлы с разными паролями, чтобы на них ссылаться в playbook. Эта функция Ansible появилась с выпуском Ansible 2.4. До этого выпуска при каждом выполнении доступного playbook можно было использовать только один пароль хранилища.

Итак, теперь, если вы хотите запустить Ansible playbook, который использует несколько файлов, зашифрованных с разными паролями, вы можете использовать Vault Id.

$ ansible-playbook --vault-id vault-pass1 --vault-id vault-pass2 filename.yml

На этом мы подошли к концу этого блога Ansible Vault. Это удивительно - догнать технологии и реализовать их в полной мере, но без ущерба для безопасности. Это один из лучших способов реализовать инфраструктуру как код (IaC).

Если вы найдете эту статью полезной, ознакомьтесь с ' автор: Edureka. Он охватывает все инструменты, которые сделали ИТ-индустрию умнее.

Есть вопрос к нам? Пожалуйста, разместите это на и мы свяжемся с вами.