- Как зашифровать конфиденциальные данные с помощью Ansible Vault ?
- Как защитить Ansible Playbook с Vault ?
- Как использовать Ansible Vault ?
- Шаг 1: Установите Ansible / Ansible Vault
- Шаг 2: Использование Ansible Vault
- Пример 2: зашифровать существующий файл
- Пример 3: Редактировать зашифрованный файл
- Пример 4: обновить пароль шифрования
- Пример 5: просмотр Ansible зашифрованного файла
- Пример 6: Расшифровать зашифрованные файлы Vault
- Пример 7. Выполнение Ansible с файлами, зашифрованными в хранилище
- Использование пароля
- Использование файла паролей
- Пример 8. Шифрование только чувствительных переменных
- Заключение
Как зашифровать конфиденциальные данные с помощью Ansible Vault ?
Как защитить Ansible Playbook с Vault ?
Как использовать Ansible Vault ?
Это руководство было сделано в качестве справочного руководства / шпаргалки для энтузиастов Ansible, использующих Vault, чтобы обеспечить шифрование и защиту данных при работе с Ansible.
Ansible оказался самым популярным и любимым инструментом управления конфигурацией для разработчиков и системных администраторов всех классов.
С большим внедрением возникает проблема безопасности.
Чтобы сохранить вашу конфиденциальную информацию, такую как пароли или секретные ключи, вам нужен Vault.
Зашифрованные данные хранилища автоматически дешифруются во время выполнения.
Ansible является обязательным требованием для этого руководства.
Убедитесь, что Ansible установлен в вашей системе и предоставляет инструмент командной строки ansible-vault, который мы будем использовать во всем этом руководстве.
Прежде чем начать, установите редактор по умолчанию для Ansible Vault.
--- Для Bash---
$ echo "export EDITOR=vim" >> ~/.bashrc
$ source ~/.bashrc
--- Для Zsh ---
$ echo "export EDITOR=vim" >> ~/.zshrc
$ source ~/.zshrc
Шаг 1: Установите Ansible / Ansible Vault
Самый простой способ установить Ansible в Linux и большинстве систем Unix – через менеджер пакетов Ansible – pip.
Установить pip:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py --user
pip install --user ansible
Шаг 2: Использование Ansible Vault
В этом разделе мы увидим много примеров использования Ansible Vault.
Команда ansible-vault используется для управления зашифрованным содержимым в Ansible.
С его помощью вы создаете, редактируете, просматриваете и расшифровываете зашифрованные файлы.
$ ansible-vault create create_users.yml
Вам будет предложено ввести и подтвердить безопасный пароль:
New Vault password:
Confirm New Vault password:
Пример 2: зашифровать существующий файл
Для существующих файлов используйте команду ansible-vault encrypt, чтобы установить пароль.
$ echo "SecurePassword" > passwords.txt $ ansible-vault encrypt passwords.txt New Vault password: Confirm New Vault password: Encryption successful
Пример 3: Редактировать зашифрованный файл
$ ansible-vault edit passwords.yml
Vault password:
Пример 4: обновить пароль шифрования
Вы всегда можете обновить пароль шифрования с помощью команды ansible-vault rekey.
$ ansible-vault rekey create_users.yml Vault password: New Vault password: Confirm New Vault password: Rekey successful
Пример 5: просмотр Ansible зашифрованного файла
Вы можете просматривать содержимое зашифрованного файла, не открывая окно редактора.
Для этого вы будете использовать команду ansible-vault view.
$ ansible-vault view create_users.yml
Перед отображением содержимого вам необходимо ввести пароль файла.
Vault password:
Secret information
Пример 6: Расшифровать зашифрованные файлы Vault
Если вам больше не нужно шифрование, вы можете расшифровать зашифрованный в хранилище файл с помощью команды ansible-vault decrypt.
$ ansible-vault decrypt myfile.yml
Укажите пароль для шифрования файла.
Vault password:
Decryption successful
Пример 7. Выполнение Ansible с файлами, зашифрованными в хранилище
После того, как вы зашифруете свои конфиденциальные данные, вы, очевидно, захотите запустить Ansible playbook, который каким-то образом ссылается на зашифрованные данные.
Команды ansible и ansible-playbook могут расшифровывать файлы, защищенные хранилищем, если указан правильный пароль.
Использование пароля
Для выполнения playbook передайте флаг –ask-vault-pass.
$ ansible-playbook --ask-vault-pass <vault-encrypted-playbook-file>.yaml
Для Ansible версии моложе или 2,4, вы можете использовать флаг –vault-id @prompt.
Смотрите пример ниже.
$ ansible-playbook --ask-vault-pass -i hosts osp-pre.yml
Vault password:
PLAY [Run presetup on OSP nodes] ******************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
...................................................................................
или
$ ansible-playbook -i hosts osp-pre.yml --vault-id @prompt
Vault password (default):
Использование файла паролей
Если вы хотите избежать интерактивного запроса пароля во время выполнения playbook, рассмотрите возможность использования Ansible Vault с файлом паролей.
Создать файл паролей.
$ echo 'MyStrongVaulPassword' > .ansible_vault_pass
$ echo '.ansible_vault_pass' >> .gitignore
$ ansible --vault-password-file=.ansible_vault_pass ...
$ ansible-playbook --vault-password-file=.ansible_vault_pass ....
Пример:
$ ansible-playbook --vault-password-file=.ansible_vault_pass -i hosts osp-pre.yml
PLAY [Run presetup on OSP nodes] ******************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************************
Как показано выше, нет запроса на ввод файла пароля.
Установите переменную среды
ANSIBLE_VAULT_PASSWORD_FILE
Если вам не нравится указывать флаг пароля или использовать интерактивный запрос пароля, вы можете настроить Ansible на автоматическое чтение файла пароля.
Это достигается путем установки переменной среды ANSIBLE_VAULT_PASSWORD_FILE с путем к файлу пароля:
export ANSIBLE_VAULT_PASSWORD_FILE=./.ansible_vault_pass
$ vim ansible.cfg
[defaults]
........
vault_password_file = ./.ansible_vault_pass
Пример 8. Шифрование только чувствительных переменных
В идеальном мире автоматизации с совместной работой вам нужно только шифровать конфиденциальные данные, такие как пароли базы данных, ключи API, учетные данные пользователя и т. д.
Создать файл зашифрованных переменных.
$ vim vars/vault.yml vault_db_pass: MyStrongPassword $ ansible-vault encrypt vars/vault.yml New Vault password: Confirm New Vault password: Encryption successful
Подтвердите, что это все зашифровано.
$ cat vars/vault.yml
$ANSIBLE_VAULT;1.1;AES256
62383961353832333263356333356465633635633731393039303834623832626162613235343930
6238663730366237616639326233393361626639616136300a393665326434633438613436316630
61656261616132366436646434393833613064326531346631666630616535663535353038666135
3732333338313739340a656434633336666662393161393663303662616264643364313630383163
30643763323038396161316339663037353632626462626233363836346461656238393035623533
6531353930326133656165326130303661303965316464306330
$ vim vars/plain.yml db_user: computingforgeeks db_port: 3306 db_pass: "{{ vault_db_pass }}"
Обратите внимание, что мы использовали шаблоны Jinja2 для ссылки на переменную, определенную в защищенном от хранилища файле.
Создать файл Playbook.
$ vim vault.yml
---
- name: Create users
hosts: localhost
tasks:
- name: Include vars
include_vars:
dir: vars
- name: Generate dummy variables data
blockinfile:
path: /tmp/vault
block:
Database user: "{{ db_user }}"
Database Port: "{{ db_port }}"
Database Password: "{{ db_pass }}"
Запустим плейбук:
$ ansible-playbook --connection=local vault.yml --ask-vault-pass Vault password: PLAY [Create users] ******************************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************************************** ok: [localhost] TASK [Include vars] ******************************************************************************************************************************* ok: [localhost] TASK [Generate dummy variables data] ************************************************************************************************************** changed: [localhost] PLAY RECAP **************************************************************************************************************************************** localhost : ok=3 changed=1 unreachable=0 fa
Давайте проверим содержимое созданного файла.
$ cat /tmp/vault # BEGIN ANSIBLE MANAGED BLOCK Database user: "computingforgeeks" Database Port: "3306" Database Password: "MyStrongPassword" # END ANSIBLE MANAGED BLOCK
Заключение
В этом руководстве мы продемонстрировали, как вы можете использовать Ansible Vault для шифрования конфиденциальных переменных и данных, чтобы вы могли безопасно делиться своими проектами без ущерба для безопасности.