Как да използвате отговорни променливи и трезори

Как ExpressVPN използва Ansible

Как широко използваме Ansible в ExpressVPN

Нашите екипи за развитие работят независимо, тоест екип притежава своя продукт за целия му жизнен цикъл. Тази настройка означава, че нашето разбиране за Ansible идва от колекция от знания от много различни екипи във фирмата, а не от централизирана група, която управлява Ansible.

Децентрализираната работна сила дава на нашите екипи много гъвкавост и мобилност, но също така оказва натиск върху хората да знаят много за много инструменти.

За да улесним споделянето на знания и правилното използване на инструментите, решихме да стандартизираме начина, по който използваме Ansible за управление на конфигурацията и операции на сървъра..

Този блог обхваща уроците, които научихме, оперирайки в нашия мащаб, размисли за начина, по който работим и как управляваме Ansible в такъв контекст.

Отговорна документация

Нека влезем веднага! Документацията за Ansible оставя някои неща да се желаят, особено когато става въпрос за документация от край до край (например, как да стигнете от точка А до точка Z?).

Някои въпроси, с които редовно се сблъскваме, са: „Как работи променливото приоритет?“ И „Как се вписва Ansible Vault?“

И двата проблема са документирани много добре независимо (тук и тук), а страницата Ansible Variables има много хубав раздел за приоритета изрично, но пресечната точка на двете се споменава само за кратко. Проблемът е, че няма връзка между документацията за променливи и трезори, създавайки впечатление, че натискът е върху потребителя, за да разбере как двете се пресичат помежду си.

Затова днес ще се опитаме да обхванем пресечната точка между променливи и трезори и най-добрите практики.

За какво можете да използвате файлове Ansible Vault

В обобщение: Документацията на Vault посочва това можете по същество да криптирате всичко в папката Ansible във файл Vault, и Ansible ще се опита да го „дефилира“ умело, когато играта включва тези файлове. Хм. Готино!

В документацията за Variables изобщо не се споменава за Vault файлове, което е странно, тъй като Vault е създаден за файлове с променлива. И така, как да се поберат заедно? Важно е да се отбележи това Самите хранилищни файлове нямат специално значение за обработката на променлива или приоритет, така че има голяма гъвкавост Но потенциално това не ви оставя достатъчно информация как да го използвате правилно.

Как да не използваме AnsibleПравиш го грешно.

Вземете този пример на обикновена папка Ansible:

.
├── group_vars
│ ├── всички
│ ├── производство
│ └── постановка
├── ansible.cfg
├── инвентар
└── playbook.yml

На пръв поглед тази настройка изглежда добре; това би било сравнително често срещана структура, която трябва да създадете, ако четете документацията. Наблюдател може потенциално да приеме, че файловете за поставяне и производство в group_vars са Сейфове, но това не е непременно вярно, което само по себе си е проблем.

Сега файлът „всички“ не може да бъде Vault файл, тъй като вие (да се надяваме) шифровате файловете за поставяне и производство Vault с различни пароли. Но това също означава, че файлът ви group_vars за среди трябва да съдържа комбинация от тайни и несекретни, тъй като сте ограничени до един файл на среда.

Поради това - и ако сте екстраполирали малко след като прочетете въвеждането на „Сейфове“ в документацията на отговорите - вероятно сте създали производствените / сценичните трезори, като копирате първоначално съдържанието на „всички“ и след това ги променяте..

Това означава, че вашият "all" файл може да изглежда така:

база данни:
потребителско име: default_user
парола: невярно

super_important_var_that_should_be_one: 1

И файлът ви за производство на Vault може да изглежда така:

база данни:
потребителско име: produser
парола: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(Не се притеснявайте, това не е нашата действителна парола за производство! Ние проверихме два пъти.)

Горното е опасно по причини, които може да не са очевидни. Например, може да пропуснете да промените по подразбиране за производство и / или файлът ви „всички“ може дори да бъде посочен грешно и изобщо да не е включен! (Това е първопричината за прекъсването, което имахме миналата седмица.)

Най-добра практика: Как да използвате безопасно файлове с отговори

Както е посочено на страницата с най-добри практики, правенето на файл във файл Vault затъмнява съдържанието на файла, така че те идват с голям недостатък: Не можете да търсите какви променливи са във файла Vault, без изрично да ги декриптирате. Тази система означава, че който гледа вашата конфигурация Ansible, няма представа какво има вътре в тези файлове, без също да знае паролата Vault (ужасно за прегледи на код!). Затова препоръчваме да поставите възможно най-малко променливи във файлове с Vault. (С други думи, само поставяйте тайни във файловете с Vault!)

Така че, нека да разгледаме структура, която ще улесни не се стреляте в крака:

.
├── group_vars
│ ├── всички
│ │ └── vars.yml
│ ├── производство
│ │ ├── vars.yml
│ │ └── vault.yml
│ └── постановка
│ └── vault.yml
├── ansible.cfg
├── инвентар
└── playbook.yml

Документацията за най-добри практики също препоръчва използването на „слой на индирекцията“, което означава, че трябва да шаблонирате във всички променливи във файла „Vault“ във „Променливи“, посочени във вашите книги за игра. Препоръчва ви също да префиксирате вашите променливи на трезор с „vault_“, което означава, че all / vars.yml може да изглежда като:

база данни:
потребителско име: default_user
парола: „{{vault_database_password}}“

super_important_var_that_should_be_one: 1

Вашето производство / vars.yml изглежда така:

база данни:
потребителско име: produser

И файлът ви за производство / vault.yml трябва да съдържа само това:

vault_database_password: supersecretpasswordnoonecansee

Тази преработена структура има няколко предимства. На първо място, ако правите прегледи на код (моля, направете!), Това означава, че вашите рецензенти могат да видят какво сте променили, заедно с това, което сте добавили и премахнали в (почти цялата) конфигурация. При тази структура рецензърите няма да видят пълна промяна на файл на Vault, която трябва да бъде дешифрирана ръчно, запазена на диск и различена с по-ранната версия.

И още по-важното е, че Ansible няма да успее дори да предаде варите, ако липсва vault_database_password Променлива в рамките на Vault, която ще ви спести от поне един брой проблеми, с които може да се сблъскате, ако не поддържате близки раздели във вашите Vault файлове.

Ако се придържате към този модел, без значение дали е хост група в среда, пълна среда, за която задавате Променливи, или дори папка „всички“, вашите колеги никога няма да бъдат объркани за това какво е и не е в рамките трезора.

Това е всичко засега, надяваме се, че е било от полза за вас!

Как да използвате отговорни променливи и трезори
admin Author
Sorry! The Author has not filled his profile.