Які найкращі практики використання Ansible Vault в громадських сховищах користувачів та сховищах управління джерелами, як BitBucket?


11

Вступ

У приватних сховищах інтерфейсів та джерел контролю, таких як Gitlab-ce, можна скопіювати ~ / .vault_pass.txt на сервер і дозволити CI використовувати його для розшифрування файлів за допомогою Ansible.

Проблема

На загальнодоступних сховищах CI та Source Control, таких як 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, але тоді цей файл потрібно перенести до сховища, але джерельні сховища Control не повинні містити паролі.


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

Відповіді:


8

--vault-password-fileможе замість цього вказати на виконуваний скрипт, який пише в stdout. Ця маловідома функція повинна вирішити вашу проблему.

Спочатку напишіть простий виконавчий скрипт, який друкує змінну системного середовища, і перевірте це у свій джерело управління. Потім скористайтеся зашифрованою змінною Bitbucket, щоб встановити цю змінну середовища для вашої таємниці ansible-treult. Нарешті, виконайте так:

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наприклад, і цей var буде встановлений в інтерфейсі BitBucket?
030

Так! Як варіант, ось приклад Python: stackoverflow.com/questions/4906977/…
Woodland Hunter

([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.

На основі цієї посади було визначено наступне в бітбукет-конвеєрах:

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

-1

Ви можете створити тестовий набір, який не запускає виробництво, і завантажувати для них різні файли.

Створіть host_vars / localhost / treult, який працює лише для локальної тестової установки.

Таким чином, ви можете використовувати пароль відкритого сховища, який працює лише для цього локального сховища хоста.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.