===== 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