سود:
- امکان تولید کد IaC (Terraform, Ansible) با هوش مصنوعی با محدودترین مجوزها و پیش فرض های ایمن و درک رویکرد اعلامی
- امکان جلوگیری از از دست دادن اطلاعات با خواندن و گرفتن خطوط حذف و جایگزینی اجباری قبل از اعمال خروجی طرح/بررسی
- امکان جلوگیری از نشت مخفی با رمزگذاری، قفل نگه داشتن فایل حالت در باطن از راه دور و شکستن تغییرات به مراحل کوچک و برگشت پذیر
مدیریت زیرساخت به عنوان کد (IaC): Terraform، Ansible و Plan Control با هوش مصنوعی
در گذشته راه اندازی سرور با کلیک های دستی، دستورات و یادداشت های شخصی انجام می شد. نتیجه سرورهای تکرار نشدنی "دانه برفی" بود که هیچکس دقیقاً نمی دانست چگونه آنها را راه اندازی کند. زیرساخت به عنوان کد (IaC) رویکردی است که به این هرج و مرج پایان می دهد: سرورها، شبکه ها، قوانین امنیتی نه به صورت دستی، بلکه توسط فایل های متنی قابل نسخه (کد) تعریف می شوند. هنگامی که این کد را اجرا می کنید، زیرساخت دقیقاً همانطور که آن را نوشته اید تنظیم می شود - یکسان، مستند، و هر بار تکرار می شود. رایج ترین ابزارها Terraform و CloudFormation برای زیرساخت ابری و Ansible برای پیکربندی سرور هستند. در اینجا هوش مصنوعی در نوشتن، توضیح و بررسی این کد IaC بسیار ماهر است. اما قدرت IaC خطر آن نیز است: یک خط اشتباه می تواند کل زیرساخت را از بین ببرد. بنابراین هوش مصنوعی کد می نویسد، شما "طرح" را می خوانید، آن را تایید می کنید و آن را اجرا می کنید.
در این بخش، رویکرد اعلامی، تمایز طرح/اعمال، امنیت دولتی و ناتوانی را مورد بحث قرار خواهیم داد. شما نسل IaC را با هوش مصنوعی و مهم ترین مهارت، "کنترل برنامه" یاد خواهید گرفت.
فکر کردن به صورت توضیحی: "چه می شود اگر"، نه "چگونه انجام دهیم"
اکثر ابزارهای IaC بیانی هستند: شما وضعیت نهایی سیستم را توصیف می کنید ("بگذریم 3 سرور وب، 1 متعادل کننده بار")، خود ابزار نحوه رسیدن به آن حالت را محاسبه می کند. این با نوشتن یک اسکریپت متفاوت است («این کار را انجام بده، سپس آن را انجام بده» گام به گام). مزیت بزرگ رویکرد اعلامی عدم توانایی است: حتی اگر کد را ده بار اجرا کنید، نتیجه یکسان است، زیرا ابزار بررسی می کند که آیا حالت مورد نظر از قبل وجود دارد یا خیر، و اگر وجود داشته باشد، آن را لمس نمی کند. هنگامی که IaC را روی هوش مصنوعی می نویسید، این تفاوت را به خاطر بسپارید: به آن می گویید "بگذارید این زیرساخت وضعیت شود" نه "این دستورات را اجرا کنید".
طرح/اعمال: حیاتی ترین نرده ایمنی
ویژگی نجات جان IaC مرحله طرح است. در Terraform، terraform plan، در Ansible، حالت --check پیش نمایشی از «چه چیزی تغییر می کند اگر آن را اعمال کنم» را قبل از اجرای کد ایجاد می کند: «2 منبع اضافه می شود، 1 تغییر می کند، 0 حذف می شود». این تنها راه مقایسه قصد خود با واقعیت قبل از اجرا است. قانون اساسی: هرگز بدون مطالعه طرح درخواست نکنید. به خصوص به دنبال خطوط "تخریب" باشید. اگر به دلیل یک اشتباه تایپی به جای «1 تغییر خواهد شد» «12 حذف خواهد شد» را مشاهده کردید، این طرح شما را از فاجعه نجات داده است. پس از چاپ کد روی هوش مصنوعی، از آن بخواهید که بگوید "خروجی طرح را خط به خط با من بررسی کنید، هر خطی را که حاوی حذف/تکرار است علامت بزنید."
احتیاط: برخی تغییرات در Terraform به جای «بهروزرسانی در محل»، یک منبع را «تخریب و بازآفرینی میکند». این به معنای از دست دادن اطلاعات برای یک پایگاه داده است. نادیده گرفتن -/+ یا "اجبار جایگزینی" در خروجی طرح یکی از گرانترین اشتباهات است.
پرونده دولتی: ثبت اسرار و حقیقت
ابزارهایی مانند Terraform وضعیت فعلی زیرساختی را که مدیریت می کنند در یک فایل حالت نگه می دارند. این فایل به دو دلیل حیاتی است. اول، ممکن است حاوی اسرار باشد (رمزهای عبور پایگاه داده، کلیدها ممکن است در حالت متن ساده قرار گیرند). بنابراین، هرگز وضعیت را در یک مخزن عمومی یا هوش مصنوعی قرار ندهید، آن را در یک باطن راه دور رمزگذاری شده و با محدودیت دسترسی نگه دارید. دوم، اگر دولت فاسد یا گم شود، وسیله نقلیه ارتباط بین زیرساخت واقعی و زیرساخت تصوری را از دست می دهد. بنابراین، پشتیبان گیری از حالت و مکانیزم قفل (قفلی که از شکستن همزمان دو نفر جلوگیری می کند) ضروری است.
گام به گام: IaC را با هوش مصنوعی ایمن کنید
- قصد دولت و ارائه دهنده. "2 سرور در AWS، با Terraform، در این منطقه، این اندازه و یک گروه امنیتی." اگر ابر، ابزار و نسخه واضح باشند، هوش مصنوعی نحو درستی را تولید می کند.
- درخواست پیش فرض های امنیتی "گروه امنیتی را باز کنید، رمزگذاری را فعال کنید، اسرار را به متغیر استخراج کنید، دسترسی عمومی را اعطا کنید." هوش مصنوعی به طور پیش فرض می تواند نمونه های شل تولید کند.
- کد را بخوانید و بفهمید. هر منبع، هر مجوز، خط به خط را درک کنید. مجوزی را که درک نمی کنید اعمال نکنید.
- یک برنامه بگیرید و آن را حسابرسی کنید. برنامه را اجرا کنید/--بررسی کنید، خروجی را با هوش مصنوعی بررسی کنید، خطوط حذف را علامت بزنید و دوباره بسازید.
- کوچک و قابل برگشت اعمال شود. یک تغییر بزرگ را در قطعات کوچک اجرا کنید، نه یکباره. در هر قدم راه بازگشت را بدانید.
- محافظت از دولت از راه دور و باطن رمزگذاری شده و قفل استفاده کنید. حالت نشتی هرگز
سه کیف کوچک
مورد 1 - طرح یک پایگاه داده را بازیابی کرد. یک مهندس می خواست با کد Terraform که با هوش مصنوعی تولید کرده بود، اندازه پایگاه داده را افزایش دهد. در حالی که انتظار داشت "1 تغییر کند" در خروجی پلان زمینی، "1 برای تخریب، 1 برای افزودن" را دید - پارامتری که او انتخاب کرد باعث ایجاد بازسازی میشد، نه بهروزرسانی در محل، به این معنی که همه دادهها حذف میشوند. کنترل طرح قبل از اجرای آن از دست دادن داده های برگشت ناپذیر جلوگیری کرد.
مورد 2 - بازگشت از پیش فرض شل. تیمی از هوش مصنوعی یک کد فایروال درخواست کردند. برای اجرای مثال، هوش مصنوعی یک قانون ساده 0.0.0.0/0 به معنای "عمومی در اینترنت" ایجاد کرد. مهندس هنگام خواندن کد متوجه این موضوع شد و دسترسی فقط به محدوده IP سازمانی را محدود کرد. اگر بدون ممیزی اجرا می شد، پایگاه داده برای کل اینترنت باز می شد.
مورد 3 - از نشت حالت جلوگیری شد. یکی از اعضای جوان قصد داشت فایل terraform.tfstate را دست نخورده در یک ابزار عمومی برای حل یک مشکل Terraform بچسباند. مهندس ارشد متوقف شد: حالت حاوی رمز عبور پایگاه داده متن ساده بود. در عوض، یک خلاصه رمزگشایی شده که مشکل را توصیف میکرد به اشتراک گذاشته شد و وضعیت به پشتوانه رمزگذاریشده راه دور منتقل شد.
چهار قالب قابل کپی
1) تولید منبع IaC (پیشفرض ایمن):
نقش شما: مهندس ارشد زیرساخت ابر. [ابر، به عنوان مثال AWS] برای [ابزار، به عنوان مثال. Terraform] ایجاد کد. هدف: [هدف]. قوانین امنیتی: دسترسی عمومی (0.0.0.0/0) OPEN؛ شروع با محدودترین مجوز. رمزگذاری را روشن کنید؛ اسرار را در متغیرها استخراج کنید، آنها را در کد جاسازی نکنید. تنظیماتی را که ممکن است منجر به حذف/بازسازی شود را بررسی کنید. هر منبع را با یک نظر مختصر توضیح دهید.
2) برنامه ممیزی خروجی:
در زیر یک خروجی [Terraform plan / Ansible check] وجود دارد. به من بگویید: (1) چه تعداد منبع اضافه/تغییر/حذف خواهد شد، (2) همچنین خطوط «نابودی» یا «تعویض نیروها» را که خطر از دست دادن داده ها را به همراه دارند علامت گذاری کنید، (3) هر گونه تغییری را که غیرمنتظره یا خطرناک به نظر می رسد فهرست کنید. خروجی: [طرح]
3) بررسی امنیتی کد IaC:
کد IaC زیر را از نظر امنیت بررسی کنید: (1) آیا دسترسی/مجوزهای بیش از حد گسترده وجود دارد، (2) رمزگذاری خاموش است، (3) آیا رازهایی در کد تعبیه شده است، (4) آیا منابع در دسترس عموم وجود دارد؟ برای هر یافته اصلاحی پیشنهاد کنید. کد: [کد ماسک شده]
4) تغییر را به قسمت های ایمن تقسیم کنید:
من نمی خواهم این تغییر زیرساخت بزرگ [توضیح] را به یکباره اجرا کنم. آن را به مراحل کوچک و مستقل تقسیم کنید که بازگشت به آن آسان است. برای هر مرحله: چه تغییراتی، باید به چه مواردی در طرح توجه کنم، در صورت وجود مشکل چگونه آن را لغو کنم؟
اعلان ضعیف / اعلان قوی
اعلان ضعیف:
کد Terraform را بنویسید که یک سرور در AWS ایجاد می کند.
منطقه، اندازه، امنیت، شبکه، رمزگذاری نامشخص است. هوش مصنوعی ضعیفترین و صریحترین پیشفرضها را برای کار تولید میکند – اگر وارد مرحله تولید شود، آسیبپذیری خواهد بود.
اعلان قدرتمند:
نقش شما: مهندس ارشد زیرساخت ابر. یک وب سرور با Terraform در AWS eu-central-1: t3.small تعریف کنید، فقط از محدوده IP شرکتی (من آن را با یک متغیر می دهم)، پورت 443 باز است، دیسک رمزگذاری شده است، دسترسی عمومی وجود ندارد، برچسب ها اجباری هستند. اسرار برای متغیر آشکار می شود. بعد از کد: قبل از اجرای آن، 3 نوع خطی که باید در پلان به آنها توجه کنم را بگویید و مسیر برگشت را توضیح دهید.
مرحله
ریسک
نرده ایمنی
نوشتن کد
پیشفرض آزاد (عمومی)
محدودترین مجوز + خواندن
برنامه ریزی/بررسی
بدون اینکه متوجه بشی حذف میکنی
بازرسی برنامه ریزی کنید، علامت گذاری را از بین ببرید
درخواست کنید
تغییر عمده یکباره
مراحل کوچک و برگشت پذیر
اداره دولتی
نشت لعاب، اعوجاج
باطن + قفل رمزگذاری شده از راه دور
اشتباهات رایج
- درخواست بدون خواندن طرح. این طرح حذف و بازسازی را پیش بینی می کند. اگر نادیده گرفته شود، از دست دادن داده ها اجتناب ناپذیر است.
- عدم توجه به پیش فرض شل. نمونه های هوش مصنوعی اغلب 0.0.0.0/0 تولید می کنند. اگر به تولید منتقل شود، به معنای منبع باز برای کل اینترنت است.
- ایالت در حال نشت صادر کردن فایل حالت به هوش مصنوعی یا مخزن باز، اسرار متن ساده را فاش می کند.
- جاسازی اسرار در کد نوشتن رمز عبور در کد IaC یک نشت مداوم در تاریخچه نسخه کد است.
- اشتباه گرفتن بازسازی با بهروزرسانی. نادیده گرفتن خط جایگزینی نیروها منجر به از دست رفتن داده ها در پایگاه داده می شود.
نکته: حتی زمانی که خروجی طرح را برای بازبینی به هوش مصنوعی میدهید، تصمیم نهایی را بر اساس دانش خودتان قرار دهید، نه متن طرح. هوش مصنوعی طرح را خلاصه می کند و خطوط پرخطر را مشخص می کند. اما پاسخ به سوال "آیا این حذف قابل قبول است" به زمینه کسب و کار شما بستگی دارد.
به طور خلاصه
IaC قابلیت تکرار و مستندسازی را با مدیریت زیرساخت با کد قابل نسخه به جای کلیک های دستی به ارمغان می آورد. هوش مصنوعی شریک قدرتمندی در نوشتن این کد، توصیف آن و بررسی آن برای امنیت است. اما قدرت IaC خطر آن است: یک خط می تواند کل زیرساخت را از بین ببرد. شفاف فکر کنید، با محدودترین مجوز شروع کنید، پیشفرضهای ضعیف را اصلاح کنید، اسرار را خارج از کد و حالت نگه دارید. حیاتی ترین حفاظ مرحله طرح/بررسی است: هرگز بدون خواندن خطوط حذف و بازسازی آن را اجرا نکنید. حالت را رمزگذاری، قفل و از راه دور نگه دارید. کد مربوط به هوش مصنوعی است، تصمیم با شماست.
وظیفه کاربردی
یک هدف زیرساخت کوچک (به عنوان مثال، یک ماشین مجازی واحد و یک قانون امنیتی) انتخاب کنید. با الگوی «تولید منبع IaC» در بالا، از هوش مصنوعی کدی با پیشفرضهای ایمن بخواهید. کد را با الگوی "بازبینی امنیتی کد IaC" دوباره بررسی کنید و سعی کنید حداقل یک تنظیم ضعیف را پیدا کنید. در صورت امکان، برنامه را اجرا کنید/--یک حساب آزمایشی را بررسی کنید و خروجی را با الگوی "بررسی خروجی طرح" بررسی کنید. ببینید آیا خط حذف یا ایجاد مجدد وجود دارد یا خیر. یافته های خود و نحوه ایمن سازی دولت را در 6 نقطه بنویسید.
چک لیست
- [ ] آیا ابر، ابزار و نسخه را برای هوش مصنوعی مشخص کردم و کدی را با محدودترین مجوزها درخواست کردم؟
- [ ] آیا کد را برای پیشفرضهای ضعیف (0.0.0.0/0، رمزگذاری بسته) بررسی کردهام؟
- [ ] آیا من اسرار متغیر را به جای جاسازی در کد استخراج کرده ام؟
- [ ] آیا من خروجی طرح/بررسی را خواندم و خطوط حذف را قبل از درخواست علامت زدم؟
- [ ] آیا تاثیر از دست دادن داده های "تعویض نیروها" / خطوط بازسازی را ارزیابی کرده ام؟
- آیا فایل [ ] State را به صورت رمزگذاری شده، قفل شده، در پشتیبان راه دور نگه نداشتم و آن را به بیرون درز نکردم؟