Каковы оптимальные методы использования Ansible Vault в общедоступных CI и репозиториях контроля версий, таких как BitBucket?

11

Вступление

В частных репозиториях CI и Source Control, таких как Gitlab-ce, можно скопировать ~ / .vault_pass.txt на сервер и позволить CI использовать его для дешифрования файлов с использованием Ansible.

проблема

В общедоступных CI и репозиториях контроля версий, таких как Bitbucket, невозможно скопировать ~ / .vault_pass.txt на сам CI-сервер.

обсуждение

В Bitbucket можно определить зашифрованные переменные, но при проверке этого файла единственными переменными, связанными с VAULT, являются:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Эти переменные не являются опцией для решения проблемы, так как когда они ANSIBLE_ASK_VAULT_PASSустановлены, по- ansible-vaultпрежнему запрашиваются:

user@host $
Vault password:

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

Другая попытка решить проблему была запущена export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, но интерактивный режим сохраняется.

Другой вариант export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, но тогда этот файл нужно отправить в репозиторий, но репозитории исходного контроля не должны содержать пароли.

030
источник
2
Привет @ 030, не могли бы вы уточнить, что вы имеете в виду под КИ? Для меня это означает непрерывную интеграцию , однако и GitLab, и BitBucket также являются репозиториями управления версиями - вопрос был бы яснее, если бы CI был расширен.
Ричард Слейтер,

Ответы:

8

--vault-password-fileвместо этого можно указать на исполняемый скрипт, который пишет в стандартный вывод. Эта малоизвестная особенность должна решить вашу проблему.

Сначала напишите простой исполняемый скрипт, который печатает системную переменную окружения, и проверьте это в своем контроле исходного кода. Затем используйте функцию зашифрованных переменных Bitbucket, чтобы установить для этой переменной среды свой секрет ansible-vault. Наконец, выполните так:

ansible-playbook site.yml --vault-password-file ./mypass.sh,

Использованная литература:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto

Лесной Охотник
источник
И тогда mypass.sh будет содержать, echo $VARнапример, и эта переменная будет установлена ​​в интерфейсе BitBucket?
030
Ага! Кроме того, вот пример Python: stackoverflow.com/questions/4906977/…
Лесной Охотник
([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030
1

С помощью

ansible-playbook site.yml --vault-password-file ./mypass.sh

привело к:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

На основании этого поста в bitbucket-конвейерах было определено следующее:

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt
030
источник
-1

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

Создайте host_vars / localhost / vault, который работает только для локальной тестовой установки.

Таким образом, вы можете использовать пароль открытого хранилища, который работает только для этого локального хранилища хоста.

Findarato
источник