Перейти к содержанию

▍Ansible Vault

Ansible Vault Logo

Небольшая шпаргалка по работе с Ansible Vault, с помощью которой можно зашифровать пароли, ключи и прочие чувствительные данные. В качестве алгоритма шифрования Ansible Vault использует алгоритм симметричного шифрования AES256.

Подготовка

  • Создаём директорию group_vars/all . Yaml-файлы внутри этой директории автоматически подгружаются Ansible во время выполнения плейбуков
  • Создаём файл group_vars/all/vault.yml. В этом файле мы будем хранить зашифрованные переменные
  • Добавим туда переменную с именем mysql_root_passwd и значением StrongPa$$w0rd

Теперь перейдем непосредственно к шифрованию. Для этого выполните следующую команду:

ansible-vault encrypt group_vars/all/vault.yml
New Vault password:
Confirm New Vault password:
Encryption successful

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

$ANSIBLE_VAULT;1.1;AES256
35643330356439396439313933376238383631306534306534336333366233613935383965626536
3431366561316536663462613331386336306434353866350a376133633931323863613533626261
35646439333434613663333139393263353461366135386262363336353965613663663062623135
3664303562333866330a373930323963313932323966343837653835383466353831643735333462
3335

Однажды зашифровав файл, его больше никогда не нужно расшифровывать самостоятельно. Ключевая фишка безопасности здесь в том, что файл всегда остается зашифрован. Расшифровкой занимается сам Ansible и только тогда, когда это нужно. Например во время запуска плейбука:

ansible-playbook --ask-vault-pass playbook.yml

Для этого нужно указать опцию --ask-vault-pass. Затем Ansible запросит пароль, которым выполнялось шифрование и расшифрует данные файла. Сам файл останется зашифрованным.

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

# внутри файла должен быть только пароль, который мы ранее указали при выполнении ansible-vault encrypt group_vars/all/vault.yml

echo "Megapa$$w0rd" > .vault-password
chmod 600 .vault-password
ansible-playbook --vault-password-file .vault-password playbook.yml

Для тех кто использует системы контроля версий, такие как git, рассмотрите возможность добавления файла .vault-password в список игнорируемых файлов.

echo '.vault-password' >> .gitignore

Для изменения зашифрованного файла нужно набрать команду:

ansible-vault edit group_vars/all/vault.yml --vault-password-file .vault-password

В файл поместите чувствительную переменную. Обычной практикой является использование одного и того же имени переменной, но с префиксом, vault_ чтобы указать, что они определены в файле, защищенном хранилищем. Тройка --- указывает на файл yaml. Сохраните и закройте файл после внесения необходимых изменений.

---
vault_mysql_root_passwd: StrongPa$$w0rd

Теперь зададим нашу переменную в файле group_vars/all/all.yml

---
mysql_root_passwd: "{{ vault_mysql_root_passwd }}"

Запускаем наш плейбук:

ansible-playbook --vault-password-file .vault-password playbook.yml

Если вам не нравится указывать флаг пароля или использовать интерактивный запрос пароля, вы можете настроить Ansible на автоматическое чтение файла пароля.

Это достигается путем установки переменной среды ANSIBLE_VAULT_PASSWORD_FILE с путем к файлу пароля:

export ANSIBLE_VAULT_PASSWORD_FILE=./.vault-password

Чтобы сохранить конфигурацию, установите ее в локальном файле ansible.cfg.

nano ansible.cfg
[defaults]
........
vault_password_file = ./.vault-password

Ansible будет использовать пароль конфигурации для всех операций шифрования и создания.

К началу