Я настраиваю сервер MySQL и хочу, чтобы Ansible установил mysql-root
пароль во время установки.
С помощью Интернета я придумал это решение:
- name: Set MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
apt: pkg=mysql-server state=latest
mysql_root_pwd
переменная, загружаемая из Ansible Vault. Это работает нормально, но теперь на сервере есть много строк в журнале:
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None
Как я могу запретить Ansible записывать пароли в виде открытого текста в файлы журналов?
Наблюдаемое поведение кажется ошибкой в модуле debconf. Я подал отчет об ошибке .
Пользователь bcoca на github указал, что
no_log: true
директива может использоваться в задачах, которые устанавливают пароли, чтобы предотвратить ведение журнала. Это обходной путь, который работает для меня, пока ошибка не будет исправлена.источник
ERROR: no_log is not a legal parameter in an Ansible task or handler
sudo apt-add-repository ppa:ansible/ansible
,sudo apt-get update
,sudo apt-get install ansible
Я решил обновить версию Ansible до 1.6.1
источник
Согласно Ansible документам :
Похоже, что установка
log_path
на вашем контрольном узле приведет к тому, что на целевых узлах не будет журналов.источник
vtype='password'
. Это должно быть достаточно явно ИМХО? Я предполагаю, что сообщение журнала также создается модулем debconf.Существует лучший способ, чем просто no_log: True
Как видите, вам нужно добавить:
А затем сделайте вывод результата команды с помощью regex_replace, где:
При таком подходе вы будете не только скрывать пароли и логины, но и получать результаты своей работы.
источник
Это дополнение к ответу TheDESTROS из этой темы:
обертка-script.sh.j2
Вам нужно немного меньше кода и вы можете выводить команды из ваших журналов. Предусмотрено только одно предупреждение, если секрет находится в командах stdout. Если вы хотите избежать внешнего шаблона,
copy
модуль с параметромcontent
может помочь написать небольшой скрипт-оболочку на лету.источник
Этот
no_log: true
подход следует использовать в качестве последнего средства, если другие попытки потерпят неудачу, потому что это сделает выполнение задачи полностью непрозрачным, и у вас не будет никакой подсказки, когда она потерпит неудачу.Практики безопасности рекомендуют вводить учетные данные из stdin или, когда это невозможно, использовать файлы учетных данных (или даже исполняемые файлы).
Вот пример того, как выполнить безопасный вход в систему podman, не раскрывая пароль:
При этом секрет не будет раскрыт,
result
но вы все равно сможете увидеть вывод команды.Большинство инструментов, требующих входа, реализуют один из упомянутых более безопасных подходов. Использование учетных данных для CLI в коде похоже
123456
на пароль вашего банка.источник