نحوه استفاده از متغیرهای قابل قبول و Vaults

چگونه ExpressVPN از Ansible استفاده می کند

نحوه استفاده گسترده از Ansible در ExpressVPN

تیم های توسعه ما به طور مستقل کار می کنند ، یعنی یک تیم برای چرخه زندگی کامل خود محصول خود را دارد. این مجموعه به این معنی است که درک مسئولیت ما از مجموعه دانش های بسیاری از تیم های مختلف شرکت به جای یک گروه متمرکز که مسئولیت مدیریت Ansible را دارند ناشی می شود..

نیروی کار غیر متمرکز ، انعطاف پذیری و تحرک را به تیمهای ما می دهد ، اما همچنین به افراد فشار می آورد تا در مورد بسیاری از ابزارها چیزهای زیادی را بدانند.

برای سهولت در به اشتراک گذاری دانش و استفاده صحیح از ابزارها ، تصمیم گرفتیم نحوه استفاده از Ansible را برای مدیریت پیکربندی و عملکرد سرور استاندارد سازی کنیم.

این وبلاگ درسی را که یاد گرفته ایم در مقیاس ما یاد بگیریم ، بازتاب هایی در مورد نحوه کار و نحوه مدیریت پاسخگو در چنین زمینه ای را پوشش می دهد.

مستندات قابل قبول

بیایید درست وارد آن شویم! مستندات مربوط به Ansible برخی موارد مورد نظر را به جای می گذارد ، به خصوص وقتی که اسناد پایان به پایان می رسد (مثلاً ، از نقطه A تا نقطه Z چگونه می گیرید؟).

برخی از سؤالاتی که مرتباً با آنها روبرو می شویم عبارتند از: “اولویت متغیر چگونه کار می کند؟” و “چگونه Ansible Vault جا دارد؟”

هر دو مشکل به طور مستقل بسیار خوب مستند شده اند (اینجا و اینجا) ، و صفحه Ansible Variables دارای بخش بسیار زیبایی در رابطه با تقدم به صراحت است ، اما تقاطع این دو فقط به یک مختصر اشاره می کند. مشکل این است که هیچ ارتباطی بین مستندات مربوط به متغیرها و طاق ها وجود ندارد ، و این تصور را می دهد که onus بر روی کاربر است تا بفهمد چگونه این دو با یکدیگر درهم می شوند.

بنابراین ، امروز ما سعی خواهیم کرد تقاطع بین متغیرها و Vaults و بهترین تمرین را بپوشانیم.

آنچه می توانید از پرونده های Ansible Vault استفاده کنید

به طور خلاصه: اسناد Vault بیان می کند که در اصل می توانید هر چیزی را در پوشه Ansible خود در یک پرونده Vault رمزگذاری کنید, و Ansible سعی خواهد کرد هر زمان که یک نمایشنامه شامل این پرونده ها باشد ، آن را رمزگشایی کند. متعجب. سرد!

اسناد مربوط به متغیرها به هیچ وجه در مورد پرونده های Vault ذکر نشده است ، عجیب است زیرا Vault برای پرونده های متغیر طراحی شده است. بنابراین چگونه آنها در کنار هم قرار می گیرند؟ مهم است که توجه داشته باشید خود پرونده های Vault معنای خاصی برای پردازش متغیر یا تقدم ندارند, انعطاف پذیری زیادی وجود دارد اما به طور بالقوه این به شما اطلاعات کافی در مورد چگونگی استفاده صحیح از آن نمی دهد.

چگونه از Ansible استفاده نکنیمتو داری آن را اشتباه انجام میدهی.

از این مثال از یک پوشه ساده Ansible استفاده کنید:

.
├── group_vars
│ همه
│ تولید
صحنه برداری
├── ansible.cfg
├── موجودی
└── playbook.yml

در نگاه اول ، این تنظیم خوب به نظر می رسد؛ اگر بخواهید مستندات را بخوانید ، این یک ساختار نسبتاً متداول است. یک ناظر به طور بالقوه می تواند فرض کند که پرونده های مرحله بندی و تولیدی در گروه_vars Vaults هستند ، اما این لزوماً صحیح نیست ، که به خودی خود یک مشکل است..

اکنون پرونده “همه” نمی تواند یک پرونده Vault باشد زیرا شما (امیدوارم) پرونده های Vault را با رمزهای مختلف رمزگذاری کرده اید. اما این بدان معناست که پرونده گروه_vars شما برای محیط ها باید حاوی ترکیبی از اسرار و غیر اسرار باشد زیرا شما به یک پرونده در هر محیط محدود هستید.

به همین دلیل – و اگر کمی بعد از خواندن مقدمه وارد Vaults در مستندات Ansplolation کردید ، احتمالاً با کپی کردن مطالب “همه” در ابتدا ، آنها را برای تولید طاق ها تولید کرده و سپس آنها را تغییر داده اید..

این بدان معنی است که پرونده “همه” شما ممکن است به صورت زیر باشد:

بانک اطلاعاتی:
نام کاربری: default_user
رمز عبور: نادرست

super_important_var_that_should_be_one: 1

و ممکن است پرونده Vault تولیدی شما به این شکل باشد:

بانک اطلاعاتی:
نام کاربری: سازنده
رمز عبور: supersecretpasswordnoonecansee

super_important_var_that_should_be_one: 1

(نگران نباشید ، این رمز عبور تولید واقعی ما نیست! ما دوبار بررسی کردیم.)

موارد فوق به دلایلی که ممکن است آشکار نباشد خطرناک است. به عنوان مثال ، ممکن است تغییر یک پیش فرض برای تولید از دست بدهید و / یا پرونده “همه” شما حتی ممکن است اشتباه باشد و اصلاً درج نشده است! (این دلیل اصلی قطع شدن هفته گذشته است.)

بهترین روش: نحوه استفاده ایمن از پرونده های Ansible Vault

همانطور که در صفحه بهترین روش ها گفته شد ، ساختن پرونده به پرونده Vault محتویات پرونده را مبهم می کند ، بنابراین آنها با یک اشکال بزرگ همراه هستند: شما نمی توانید بدون رمزگشایی صریح آنها را جستجو کنید که متغیرها در پرونده Vault چیست. این سیستم بدان معنی است که هرکسی که به پیکربندی Ansible شما نگاه می کند بدون دانستن رمز عبور Vault (وحشتناک برای بررسی کد ها) هیچ ایده ای در داخل این پرونده ها ندارد. از این رو ، توصیه می کنیم تا حد ممکن چند متغیر را در پرونده های Vault قرار دهید. (به عبارت دیگر ، فقط اسرار را در پرونده های Vault قرار دهید!)

بنابراین ، بیایید به ساختاری نگاه کنیم که باعث می شود خود را با پای خود شلیک نکنید:

.
├── group_vars
│ همه
ars │ └── vars.yml
│ تولید
ars │ ├── vars.yml
ault │ └── vault.yml
صحنه برداری
ault ault vault.yml
├── ansible.cfg
├── موجودی
└── playbook.yml

بهترین اسناد و مدارک شیوه ای همچنین استفاده از “لایه ای از استراحت” را توصیه می کند ، به این معنی که شما باید در همه متغیرهای موجود در پرونده Vault به متغیرهای ارجاع شده در دفترچه های بازی خود الگو باشید. همچنین توصیه می کند که متغیرهای طاق خود را با “vault_” به معنی پیش بینی کنید ، به این معنی که همه / vars.yml شما می تواند چیزی شبیه به:

بانک اطلاعاتی:
نام کاربری: default_user
رمز عبور: “{{vault_database_password}}”

super_important_var_that_should_be_one: 1

تولید / vars.yml شما شبیه این است:

بانک اطلاعاتی:
نام کاربری: سازنده

و پرونده تولیدی / vault.yml شما فقط باید شامل این موارد باشد:

vault_database_password: supersecretpasswordnoonecansee

این ساختار اصلاح شده دارای چندین مزیت است. اول از همه ، اگر شما بررسی کد را انجام می دهید (لطفاً این کار را انجام دهید!) ، به این معنی است که داوران شما می توانند آنچه را تغییر داده اید ، همراه با مواردی که اضافه کرده اید و حذف کرده اند (تقریباً همه) پیکربندی خود را مشاهده کنید. با استفاده از این ساختار ، داوران فقط تغییر کامل فایل را در Vault مشاهده نخواهند کرد که باید به صورت دستی رمزگشایی شود ، در دیسک ذخیره شود و با نسخه قبلی متفاوت باشد.

و مهمتر از همه ، اگر پاسخ آن را از دست ندهید ، Ansible حتی در ارائه متن ها نیز شکست خواهد خورد vault_database_password متغیر در Vault ، که باعث می شود شما در صورت عدم نگه داشتن زبانه های نزدیک در پرونده های Vault خود ، حداقل از وقوع مواردی که ممکن است با آنها روبرو شوید ، نجات دهد.

اگر به این الگوی پایبند باشید ، مهم نیست که آن یک گروه میزبان در یک محیط باشد ، یک محیط کامل که شما برای آن متغیرها یا حتی پوشه “همه” را تنظیم می کنید ، همسالان شما هرگز در مورد آنچه موجود نیستند دچار سردرگمی می شوند. خرک.

اکنون این همه است ، امیدواریم که مورد استفاده شما باشد!