Как Запустить Плейбуки Ansible Azure, Избегая Хранения Учетных Данных В Файлах?

  • Автор темы Владимир 71
  • Обновлено
  • 21, Oct 2024
  • #1

Фон

  1. Мы используем Ansible для подготовки и управления инфраструктурой Azure. На данный момент мы запускаем Ansible «вручную», т.е. мы вручную выполнить плейбуки для различных автоматизированных задач. Никакой CI-инфраструктуры.
  2. Вероятно, это не актуально, но мы управляем запасами с помощью динамического скрипта. .bashrc .
  3. Нас призывают соблюдать максимальную безопасность, т.е.
    1. Не храните пароли Хранилища в ~/.azure/credentials or in any local file
    2. Не храните секреты Azure в ~/.vault_pass
    3. Не храните ничего безопасного в azure_rm.py .

В таком сценарии у меня возникают проблемы с разработкой последовательной стратегии, обеспечивающей доступ моих сборников сценариев к секретам Azure при соблюдении приведенных выше рекомендаций.

Вопрос

Как мне избежать хранения учетных данных Ansible Vault и Azure в файлах, сохраняя при этом доступ к ним для моих плейбуков?

Что я пробовал

На данный момент я придумал сценарий-обертку, который

  1. запрашивает у пользователя пароль Vault
  2. Использует это для расшифровки сценария Vaulted Shell.
  3. Оценивает сценарий, который загружает переменные среды Azure в среду;
  4. Запускает playbook в установленной таким образом среде.

Есть ли лучшие (более элегантные, менее сложные, более «Ansible») решения?

#ansible #ansible-vault

Владимир 71


Рег
15 Apr, 2011

Тем
89

Постов
193

Баллов
648
  • 25, Oct 2024
  • #2

Пароль хранилища

Прежде всего, вам следует ознакомиться с тем, что файл паролей хранилища может быть исполняемым скриптом. В этом случае Ansible выполняет его и ожидает получения пароля в качестве вывода.

Например, вы можете использовать

 
 
 
 
 
 
 
 
 Vault password (default):
 
or ansible-playbook some-playbook --vault-id @prompt сохранить действительный пароль и разблокировать его при необходимости. Подробнее читайте в этом сообщении в блоге: https://benincosa.com/?p=3235

Если вы немного параноик, вы можете добавить уведомление при вызове сценария пароля, например:

@prompt

Этот сценарий пароля хранилища использует fatal: [localhost]: FAILED! => {"msg": "A vault password or secret must be specified to decrypt /path/to/encrypted/file"} as actual vault key and also shows popup notification (for MacOS) with parent process name when script is used. Gpg-agent caches unlock password for some time, so there is no need to enter password every time you start playbook.

Просто установите ansible-vault encrypt /path/to/encrypted/file in your --vault-id @prompt .

Среда

Вы сказали, что используете ansible-playbook as dynamic inventory script. This means that you have to set credentials into your environment variables before you start ansible-playbook for it to be able to use them.

Вы можете создать два файла:

source set_env (encrypted with vault):

secure_env

key.gpg (plain text):

ansible-playbook provision-my-azure-instances.yml

Когда вы открываете новый терминал для выполнения задач автоматизации, вам необходимо запустить:

secure_env

В этот момент bash оценивает set_env and source set_env (расшифровывается через ansible-vault). После этой команды у вас есть учетные данные Azure, определенные для текущей оболочки, поэтому вы можете выполнять плейбуки как обычно:

echo -n "Setting secure vars... " eval $(ansible-vault view secure_env) echo "done."

Таким образом, используя эти два подхода, вы можете хранить set_env and export AZURE_SECRET=xxx;export AZURE_SUBSCRIPTION_ID=xxx; в вашем репозитории; затем в новом вызове терминала secure_env once, enter gpg password once (to unlock future use of key.gpg); then call azure_rm.py сколько угодно раз без каких-либо паролей.

 

Panviktr


Рег
18 Apr, 2020

Тем
87

Постов
215

Баллов
670
  • 25, Oct 2024
  • #3

Пожалуйста, прочитайте https://docs.ansible.com/ansible/2.4/vault.html Начиная с Ansible 2.4 можно было использовать ansible.cfg .

Зашифруйте файл с помощью ansible-vault:

vault_password_file = ./vault_pass.sh

Запустите playbook, и это приведет к следующему:

key.gpg

Существует несколько вариантов расшифровки файлов, в том числе #!/bin/bash PARENT_PROCESS=$(ps -p $PPID -o args | tail -n 1) osascript -e "display notification \"Vault password used by ${PARENT_PROCESS}\" with title \"Ansible\" sound name \"default\"" gpg --batch --use-agent --no-tty --decrypt key.gpg 2>/dev/null :

keychain

подскажет:

gpg-agent

После ввода пароля хранилища пьеса должна завершиться успешно.

 

8lad


Рег
04 Dec, 2005

Тем
62

Постов
172

Баллов
502