Перешифрование паролей в конфигурационных файлах при установке на ВМ#
В случае компрометации чувствительных данных или при изменении алгоритма шифрования можно запустить принудительное перешифрование паролей в конфигурационных файлах с помощью запуска playbook reencrypt_passwords.yml.
Перед осуществлением данной операции рекомендуется всегда создавать архивную копию EVPT.
Предусловия#
Предварительно необходимо добавить в конфигурационный файл vars.yml (при установке на ВМ) блок настроек:
reencrypt_passwords:
old_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, с которого осуществляется перешифрация (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
new_algorithm: PBEWithHmacSHA512AndAES_256 # алгоритм, на который перешифровываем (допустимы PBEWithMD5AndTripleDES, PBEWithHmacSHA512AndAES_256)
change_key: false # удалить старый ключ encrypt.pass и сгенерировать новый, которым требуется перешифровать пароли; false - замены ключа не требуется.
Ручной способ#
На сервере, с которого производилась установка, выполнить команду:
ansible-playbook -i inventories/<ID>/inventory reencrypt_passwords.yml --ask-vault-pass
, где ID — имя созданного inventory.
С помощью Jenkins#
Наименование задания Jenkins: scheduler_VM_install. Запустить данную Jenkins Job с ниже перечисленными параметрами.
Параметры запуска:
job_config_renew— параметр, использующийся для перенастройки задания Jenkins. Данный параметр используется, если был добавлен новый inventory. Меняет значения по умолчанию всех параметров. Сохраняет предыдущее состояние параметров inventories_repo, inventories_branch, inventories_path. Обновляет список тегов для всех playbooks. По умолчанию не указывается;inventory— выбратьinventory, для которого необходимо произвести последовательное обновление;nexusUrl— полный путь до дистрибутива (можно указать несколько через запятую);nexusUrlKafka— полный путь до дистрибутива KFKA или дистрибутива Apache Kafka;emailto— список адресов электронной почты, на которые придет письмо с результатом выполнения задания Jenkins;playbook— указать значение reencrypt_passwords.yml;tags— используемые теги. Если ни один тег не выбран, то отрабатывается весь playbook;select_all_hosts— запуск задания Jenkins на всех hosts из указанного inventory;only_on_host— отметить галочками необходимые hosts. Доступен для выбора только в случае, когда не выбран параметрselect_all_hosts;custom_vault_password— указывается, если нужен ручной ввод пароля для Ansible Vault;jenkins_slave— выбор Slave Jenkins;jdk_tool— указание Jenkins Tool с нужной версией JDK, конкретное значение необходимо получить у администратора Jenkins;ansible_branch— ветка скриптов развертывания (в настройках Jenkins Job указать ${ansible_branch});;ansible_version— указание Jenkins Tool с необходимой версией Ansible. Конкретное значение необходимо получить у администратора Jenkins;nexus_user_cred— ID credential типа username with password для выкачивания дистрибутива. При заданииsecman_url- полный путь в HashiCorp Vault до УЗ и пароля, например, {ID credential типа vault app role для получение секретов из HashiCorp Vault}|path/to/nexus:{УЗ},{пароль};vault_cred— ID credential типа secret file со строкой для расшифровки паролей (ansible vault) (несколько через запятую); при заданииsecman_url— полный путь в HashiCorp Vault до пароля, например {ID credential}|/path/to/vault:{password_1},{ID credential_2}|/path/to/vault:{password_2} (в качестве пароля можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например, myVaultBase64);server_ssh_cred— ID credential типа ssh key для подключения к серверам. При заданииsecman_url- полный путь в HashiCorp Vault, например {ID credential типа vault app role для получение секретов из HashiCorp Vault}|/path/to/ssh:{УЗ},{ключ},{passphrase} (в качестве ключа можно использовать не строку, а файл в base64 формате с ключом секрета, заканчивающимся на Base64, например myPrivateKeyBase64);secman_url— URL для подключения к HashiCorp Vault;ssl_verify— проверка, являются ли сертификаты HashiCorp Vault/Nexus доверенными;second_hand_approve— подтверждение запуска другим администратором (контроль «второй рукой»). Двухэтапное подтверждение запуска, требующее действия другого администратора для запуска задания Jenkins Job. При активации этой опции одному администратору будет недоступна возможность запуска задания Jenkins Job без подтверждения со стороны другого администратора;inventories_repo— репозиторий с inventory (ssh://);inventories_branch— ветка репозитория;inventories_path— путь до inventories от корня репозитория.
Процесс перешифрации паролей#
Запускается перешифрация паролей в конфигурационных файлах на каждом планировщике.
В случае, если в vars.yml задан параметр change_key: true, старый ключ, хранящийся в файле /conf/encrypt.pass, будет удален, а затем будет автоматически сгенерирован новый ключ, которым будут перешифрованы пароли в конфигурационных файлах.
После перешифрации паролей на каждом планировщике производится проверка, что каждый «обработанный» планировщик восстановил работу.
Если после перешифрации паролей планировщик не запускается — происходит прерывание работы процесса проверки запуска планировщика. После чего необходимо либо восстановить архивную копию компонента EVPT, либо проанализировать логи, исправить ошибки конфигурирования и перезапустить процесс перешифрования паролей компонента EVPT.