===== Ansible Vault =====
==== зашифровать существующий файл ====
Для существующих файлов используйте команду ansible-vault encrypt, чтобы установить пароль.
$ echo "SecurePassword" > passwords.txt
$ ansible-vault encrypt passwords.txt
New Vault password:
Confirm New Vault password:
Encryption successful
Это заменит незашифрованный файл зашифрованным.
==== Редактировать зашифрованный файл ====
Для редактирования зашифрованного файла используйте команду ansible-vault edit.
$ ansible-vault edit passwords.yml
Это попросит вас ввести пароль для файла.
Vault password:
==== обновить пароль шифрования ====
Вы всегда можете обновить пароль шифрования с помощью команды ansible-vault rekey.
$ ansible-vault rekey create_users.yml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
Введите старый пароль и новый пароль для установки при появлении запроса.
После обновления файл будет доступен с использованием нового пароля.
==== просмотр Ansible зашифрованного файла ====
Вы можете просматривать содержимое зашифрованного файла, не открывая окно редактора.
Для этого вы будете использовать команду ansible-vault view.
$ ansible-vault view create_users.yml
Перед отображением содержимого вам необходимо ввести пароль файла.
Vault password:
Secret information
==== Расшифровать зашифрованные файлы Vault ====
Если вам больше не нужно шифрование, вы можете расшифровать зашифрованный в хранилище файл с помощью команды ansible-vault decrypt.
$ ansible-vault decrypt myfile.yml
Укажите пароль для шифрования файла.
Vault password:
Decryption successful
Вы сможете увидеть фактическое содержимое файла после расшифровки.
==== Выполнение Ansible с файлами, зашифрованными в хранилище ====
После того, как вы зашифруете свои конфиденциальные данные, вы, очевидно, захотите запустить Ansible playbook, который каким-то образом ссылается на зашифрованные данные.
Команды ansible и ansible-playbook могут расшифровывать файлы, защищенные хранилищем, если указан правильный пароль.
==== Использование пароля ====
$ ansible-playbook --ask-vault-pass .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
Для парней, использующих системы контроля версий, такие как git, рассмотрите возможность добавления файла .ansible_vault_pass в список игнорируемых файлов.
$ echo '.ansible_vault_pass' >> .gitignore
Теперь используйте файл пароля при запуске команды ansible или ansible-playbook.
$ 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
Чтобы сохранить конфигурацию, установите ее в локальном файле ansible.cfg.
$ vim ansible.cfg
[defaults]
........
vault_password_file = ./.ansible_vault_pass
Ansible будет использовать пароль конфигурации для всех операций шифрования и создания.
==== Шифрование только чувствительных переменных ====
В идеальном мире автоматизации с совместной работой вам нужно только шифровать конфиденциальные данные, такие как пароли базы данных, ключи 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