▍Ansible Vault¶
Небольшая шпаргалка по работе с 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 и только тогда, когда это нужно. Например во время запуска плейбука:
Для этого нужно указать опцию --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 в список игнорируемых файлов.
Для изменения зашифрованного файла нужно набрать команду:
В файл поместите чувствительную переменную. Обычной практикой является использование одного и того же имени переменной, но с префиксом, vault_ чтобы указать, что они определены в файле, защищенном хранилищем. Тройка --- указывает на файл yaml. Сохраните и закройте файл после внесения необходимых изменений.
Теперь зададим нашу переменную в файле group_vars/all/all.yml
Запускаем наш плейбук:
Если вам не нравится указывать флаг пароля или использовать интерактивный запрос пароля, вы можете настроить Ansible на автоматическое чтение файла пароля.
Это достигается путем установки переменной среды ANSIBLE_VAULT_PASSWORD_FILE с путем к файлу пароля:
Чтобы сохранить конфигурацию, установите ее в локальном файле ansible.cfg.
Ansible будет использовать пароль конфигурации для всех операций шифрования и создания.