Используйте Ansible Vault для защиты конфиденциальных данных Playbook
Учебное пособие по Ansible Vault | Шифрование контента с помощью Ansible Vault
В этой статье мы узнаем, что такое Ansible Vault и как использовать Ansible Vault для защиты конфиденциальных данных playbook путем шифрования данных в Linux.
Что такое Ansible Vault?
Ansible Vault — это функция ansible, которая позволяет хранить конфиденциальные данные, такие как пароли или ключи, в зашифрованных файлах, а не оставлять данные видимыми в виде открытого текста в книгах сценариев или ролях.
Аутентификация и авторизация — это два важных уровня, контролирующих доступ программных приложений. Когда вы работаете в среде совместной работы, не все данные будут вам видны.
Аналогичным образом, когда вы создаете проект с помощью Ansible, вам может потребоваться обеспечить безопасность некоторой конфиденциальной информации, такой как ключ API, пароль базы данных и токены доступа.
Сохранение этой информации видимой для всех вредно для безопасности, особенно если вы храните ее в общедоступных репозиториях.
В следующем разделе этого Учебного пособия по Ansible vault мы узнаем, как использовать ansible vault для шифрования файла или строки, чтобы безопасно защитить ваши секреты, а также как >используйте хранилище Ansible в сборниках пьес для защиты конфиденциальных данных с помощью примеров команд.
Работа с командой Ansible Vault
По умолчанию ansible-vault поставляется с установкой ansible. Запустите терминал и выполните следующую команду, которая предоставит вам список параметров, которые вы можете использовать с командой ansible vault.
ansible-vault --help
Раздел справки Ansible
Шифрование файлов с помощью Ansible Vault
Если вы хотите создать новый файл, записать в него некоторые данные и зашифровать его, выполните следующую команду. Здесь "секретный ключ
" — это имя файла.
ansible-vault create secretkey
Давайте разберемся, что происходит, когда вы запускаете эту команду.
- Поскольку этот файл недоступен, файл будет создан и открыт для записи.
- Вам будет предложено ввести пароль для этого файла, который следует хранить в безопасности. Помните, что без пароля вы не сможете снова расшифровать файл.
Зашифруйте новый файл с помощью Ansible Vault
После закрытия файла содержимое будет зашифровано. Если вы попытаетесь открыть зашифрованный файл с помощью приложения текстового редактора/просмотра, вы увидите некоторые случайные данные, как показано на рисунке ниже.
Просмотр зашифрованного файла
В первой строке есть некоторые метаданные, которые ansible будет использовать для внутреннего шифрования и дешифрования. Как видно из первой строки, для шифрования файла используется алгоритм AES256.
Вы также можете зашифровать существующие файлы.
Чтобы зашифровать существующий файл, выполните следующую команду. Вам снова будет предложено ввести пароль хранилища, который позже будет использоваться для расшифровки файла.
echo "api_key: 'XUITZ89776XX'" > secretkey2 # Writing random data to file
ansible-vault encrypt secretkey2
Зашифровать существующий файл
Как изменить пароль Ansible Vault
Вы можете установить новый пароль хранилища для любых существующих зашифрованных файлов, выполнив следующую команду. Здесь вы должны запомнить свой старый пароль, который сначала будет предложен, а затем новый пароль хранилища.
ansible-vault rekey secretkey2
Изменить пароль хранилища Ansible
Как расшифровать зашифрованный файл
Если вы хотите просмотреть исходное содержимое файла, есть несколько способов сделать это. Первый способ — запустить команду decrypt
, которая преобразует файл в незашифрованную форму.
ansible-vault decrypt secretkey2
Расшифровать зашифрованный файл
Вы также можете просмотреть содержимое зашифрованного файла без расшифровки, выполнив следующую команду с "view
" вместо "decrypt
".
ansible-vault view secretkey2
Просмотр содержимого зашифрованного файла без его расшифровки
Разница между decrypt
и view
заключается в том, что первый удаляет шифрование для просмотра исходного содержимого, а второй просто расшифровывает и распечатывает содержимое, сохраняя при этом исходный файл зашифрованным.
Изменить содержимое зашифрованного файла
Допустим, вы хотите отредактировать содержимое зашифрованного файла. В этом случае вы можете либо расшифровать файл, отредактировать его содержимое, либо снова зашифровать файл. Альтернативно вы можете использовать команду "edit
" для редактирования содержимого.
ansible-vault edit secretkey2
Изменить содержимое зашифрованного файла
Преимущество команды «edit
» заключается в том, что вам не нужно расшифровывать файл и шифровать его снова. Он откроет файл для редактирования, и как только вы закроете файл, он будет автоматически зашифрован.
Зашифрованный контент с помощью Ansible Playbook
До сих пор мы видели, как шифровать и расшифровывать данные на уровне файлов. Вы также можете зашифровать строку. Давайте возьмем пример.
У меня есть несколько переменных, используемых для удаленного подключения, а также пароль подключения. Чтобы зашифровать пароль, выполните следующую команду. Здесь я использую пароль как "пароль".
Запомните пароль хранилища, который понадобится для расшифровки строки.
ansible-vault encrypt_string "password"
В приведенной ниже книге я создал несколько переменных, имитирующих детали соединения, и "connect_pwd
" будет хранить зашифрованные данные. Я печатаю переменную «connection_pwd
», используя модуль отладки в задаче.
- name: "Test playbook for ansible vault"
gather_facts: False
hosts: local
vars:
remote_user: produser
default_role: prodrole
connect_pwd: << COPY PASTE THE ENCRYPTED PASSWORD HERE >>
tasks:
- name: print the password
debug:
msg: "{{ connect_pwd }}"
Используйте Ansible Vault в Playbook
При запуске плейбука вы должны использовать либо --ask-vault-password
, либо --ask-vault-pass
, который предложит вам ввести пароль хранилища для расшифровки строки.
ansible-playbook playbook.yml --ask-vault-pass
Запустите Playbook с помощью Ansible Vault
Если вы попытаетесь запустить playbook без флага --ask-vault-password
или --ask-vault-pass
, задача завершится ошибкой со следующей ошибкой.
fatal: [master.anslab.com]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
Вы также можете сохранить пароль хранилища в файле и передать его в качестве аргумента --vault-password-file
или --vault-pass-file
.
При сохранении пароля хранилища в файле убедитесь, что установлены соответствующие разрешения, чтобы только владелец файла мог прочитать его содержимое.
echo "password" > .secretkey
chmod 600 .secretkey
Я создал файл с именем .secretkey
и установил разрешение 600. Теперь этот файл можно использовать для расшифровки строки в моей книге игр.
ansible-playbook --vault-password-file .secretkey playbook.yml
Сохраните пароль хранилища в файле конфигурации Ansible
Вы также можете сохранить пароль хранилища в файле ansible.cfg
. В этом случае вы можете запустить команду playbook без необходимости использования каких-либо дополнительных флагов хранилища.
vault_password_file = .secretkey
Вы также можете установить следующую переменную среды, которая будет использоваться для всей расшифровки.
export ANSIBLE_VAULT_PASSWORD_FILE="./.secretkey"
Заключение
К этому времени вы должны иметь четкое представление о том, как защитить свои секреты с помощью хранилища Ansible. Шифровать контент с помощью Ansible Vault довольно просто и не требует каких-либо внешних инструментов.
Попрактикуйтесь во всех примерах, приведенных в статье, которые помогут вам лучше понять, как хранилище Ansible помогает защитить конфиденциальные данные Playbook.
Ресурс:
- Шифрование содержимого с помощью Ansible Vault
Изображение Джагрита Параджули с сайта Pixabay.