سود:
- توانایی درک مفهوم IaC و چرخه کاری Terraform (شروع، برنامه ریزی، اعمال، حالت، ماژول) و داشتن پیش نویس های امن HCL توسط هوش مصنوعی
- امکان بررسی هر تغییر با یک طرح قبل از اعمال و گرفتن خطوط تخریب/جایگزینی غیرمنتظره
- امکان اعمال اصول حفظ اسرار خارج از کد، ایمن نگه داشتن حالت و به حداقل رساندن مجوزهای IAM
در گذشته، راهاندازی سرور با کلیک کردن از طریق یک پنل ابری بود: یک ماشین مجازی ایجاد کنید، شبکه را راهاندازی کنید، قانون امنیتی را اضافه کنید. این روش آهسته، مستعد خطا و تکرار نشدنی بود - تنظیم کردن همان محیط برای بار دوم تقریبا غیرممکن بود. امروزه زیرساخت به صورت کد مدیریت می شود. IaC (زیرساخت به عنوان کد) رویکردی برای توصیف منابع ابری مانند سرورها، شبکهها و پایگاههای داده در فایلهای متنی به جای دستی است. این فایل ها در کنترل نسخه (Git) قرار دارند. شما می توانید ببینید که چه کسی چه چیزی، چه زمانی و چه چیزی را تغییر داده است. شما می توانید زیرساخت های مشابه را بارها، دقیقاً به همان روش، با یک دستور راه اندازی کنید.
رایج ترین ابزار IaC Terraform است. Terraform تعاریفی را که می نویسید به زبانی قابل خواندن به نام HCL (زبان پیکربندی HashiCorp - زبان پیکربندی Terraform) می گیرد، آنها را به API ارائه دهنده ابر (AWS، Azure، GCP) ترجمه می کند و منابع را ایجاد می کند. هوش مصنوعی HCL را به خوبی می شناسد و بلوک های پیچیده را به سرعت تولید می کند. اما در IaC، هزینه یک اشتباه زیاد است: یک تعریف اشتباه می تواند کل پایگاه داده تولید را از بین ببرد. به همین دلیل است که قانون طلایی در Terraform این است که هر تغییری را قبل از اجرای آن با یک "طرح" ببینید.
زمان اجرا Terraform
Terraform با سه دستور اصلی کار می کند - دانستن اینها پیش نیاز کنترل خروجی هوش مصنوعی است:
- `terraform init`: پروژه را شروع می کند، افزونه های ارائه دهنده لازم را دانلود می کند.
- "طرح terraform": وضعیت فعلی را با وضعیت مورد نظر مقایسه می کند و نشان می دهد که چه چیزی را اضافه کنید، چه چیزی را تغییر دهید، چه چیزی را حذف کنید. هیچی اجرا نمیکنه این مهم ترین مرحله امنیتی است.
- "terraform application": در واقع برنامه را اعمال می کند و منابع را ایجاد/تغییر می کند.
علاوه بر این، دو مفهوم حیاتی هستند. State (پرونده حالت): این فایلی است که Terraform وضعیت فعلی منابعی را که مدیریت می کند در آن نگه می دارد. معمولاً در انباری از راه دور و قفل شده نگهداری می شود تا دو نفر نتوانند همزمان آن را عوض یا تخریب کنند. ماژول: بسته پیکربندی قابل استفاده مجدد. به عنوان مثال، می توانید از ماژول "راه اندازی شبکه" در بسیاری از پروژه ها استفاده کنید.
نکته: خطرناک ترین علامت در خروجی Terraform، خراب کردن یا -/+ (جایگزینی) خطوط در خروجی پلان است. اینها به این معنی است که منبع حذف خواهد شد. اگر در یک برنامه تخریب غیرمنتظره ای دیدید، هرگز اعمال نکنید، ابتدا دلیل ظاهر شدن آن را درک کنید.
گام به گام: نوشتن IaC با هوش مصنوعی
- زیرساخت مورد نظر را روشن کنید. مانند "یک VPC، دو زیرشبکه، یک گروه امنیتی و یک t3.micro EC2 در eu-central-1" مشخص باشید.
- ارائه دهنده و نسخه را مشخص کنید. کدام ابر، کدام نسخه Terraform و ارائه دهنده؟ اگر نسخه ای را مشخص نکنید، AI ممکن است نحو منسوخ/ناسازگار را برگرداند.
- پیش نویس HCL را تولید کنید. همچنین متغیرها و خروجی ها را درخواست کنید.
- راز را بیرون بیاور مقادیری مانند رمزهای عبور و کلیدها باید به مخزن متغیر و مخفی بروند نه به کد.
- «init» + «plan» را اجرا کنید. خط به خط خروجی طرح را بخوانید. حذف های غیرمنتظره را بررسی کنید.
- از کوچک شروع کنید، به تدریج اجرا کنید. ابتدا آن را در یک حساب/محیط آزمایشی مجزا اعمال کنید.
امنیت: خطرات ویژه IaC
IaC به همان اندازه که قدرتمند است خطرناک است. سه نکته حیاتی:
- یک راز در پرونده دولتی وجود دارد. حالت Terraform گاهی اوقات مقادیر حساس مانند رمزهای عبور پایگاه داده را در متن ساده نگه می دارد. هرگز State را در یک مخزن عمومی قرار ندهید. از یک باطن راه دور رمزگذاری شده با دسترسی محدود استفاده کنید.
- اسرار را در HCL جاسازی نکنید. خطوطی مانند password="prod123" به طور دائم در تاریخچه Git نوشته می شوند. در عوض، از یک متغیر استفاده کنید و در زمان اجرا مقدار را از متغیر محیطی (TF_VAR_...) یا مخفی مخفی بدهید.
- مجوز IAM بسیار گسترده. AI گاهی اوقات بلوک هایی مانند Action را تولید می کند: "*" (به همه چیز اجازه می دهد) تا "آن را کار کند". این یک آسیب پذیری است. مجوز را به حداقل مورد نیاز محدود کنید.
توجه: هنگامی که یک راز وارد تاریخچه Git می شود، در گذشته باقی می ماند و می تواند در خطر باشد، حتی اگر فایل را حذف کنید. اگر به اشتباه مرتکب شدید، بلافاصله راز را لغو کرده و بچرخانید. فقط حذف کافی نیست.
جدول علائم طرح ریسکی
طرح چاپی
معنی
چه باید کرد
+ ایجاد کردن
منبع جدید اضافه خواهد شد
به طور کلی امن است، هر چند مرور کنید
~ به روز رسانی در محل
منبع در سایت تغییر خواهد کرد
بررسی تاثیر (آیا قطعی وجود خواهد داشت؟)
-/+ جایگزین کنید
حذف و دوباره ایجاد می شود
احتیاط: ممکن است داده ها از بین بروند
- نابود کردن
منبع از بین خواهد رفت
STOP: اگر انتظارش را ندارید هرگز درخواست نکنید
سه کیف کوچک
مورد 1 - 2 روز کار در 3 ساعت. یک تیم قصد داشت Terraform را بنویسد تا یک محیط آزمایشی جدید (VPC، شبکههای فرعی، پایگاه داده RDS، خوشه ECS) راهاندازی کند، اما آنها به تازگی به HCL منتقل شده بودند. آنها معماری و نسخه های آن را برای هوش مصنوعی توصیف کردند و یک طرح ماژولار تولید کردند. آنها هر ماژول را با طرح بررسی کردند و آن را در 3 ساعت راه اندازی کردند. دو روز آزمون و خطای دستی برای آنها زمان می برد.
مورد 2 - طرح حذف شد. یک مهندس طرحی را بدون اعمال کد به روز رسانی تولید شده توسط هوش مصنوعی اجرا کرد. خروجی حاوی -/+ جایگزین برای پایگاه داده تولید بود - هوش مصنوعی سعی کرد یک فیلد غیر قابل تعویض را جایگزین کند، که به معنای حذف و ایجاد مجدد پایگاه داده بود. مهندس درخواست را متوقف کرد و تغییر را به روش ایمن تغییر داد. عادت برنامه ریزی از یک فاجعه جلوگیری کرد.
مورد 3 - نشت مخفی مدفون. یک جوان، YZ db_password = "S3cret!" خط را همانطور که هست متعهد کرد و آن را هل داد. گرفتار بررسی کد. رمز عبور بلافاصله لغو و تغییر کرد، مقدار به یک متغیر منتقل شد و از مخزن مخفی تغذیه شد. درس: هرگز اسرار متن ساده در HCL وجود ندارد.
چهار قالب قابل کپی
1) ایجاد پیش نویس زیرساخت:
زیرساخت زیر را در [CLOUD: AWS] با Terraform (نسخه ~> 1.7) بنویسید: [فهرست منبع]. منطقه [X]. قوانین: - همه مقادیر حساس را متغیر کنید، آنها را در HCL جاسازی نکنید. - رفع نسخه ارائه دهنده (required_providers).- مجوزهای IAM را به حداقل برسانید، از "*" استفاده نکنید - [X, Y] را به عنوان خروجی برگردانید. کد را به صورت ماژولار و همراه با توضیحات بدهید.
2) تفسیر خروجی طرح:
خروجی «طرح زمین» را در زیر تجزیه و تحلیل کنید. من را فهرست کنید: (1) چه منابعی اضافه شد/تغییر شد/حذف شد، (2) ردیف هایی در معرض خطر از دست دادن یا قطع شدن داده ها، (3) 3 سوالی که باید قبل از درخواست بپرسم. طرح: [خروجی]
3) HCL موجود را برای امنیت بررسی کنید:
کد Terraform زیر را برای امنیت بررسی کنید: مخفی جاسازی شده، مجوز IAM بسیار گسترده، قانون شبکه باز (0.0.0.0/0)، فضای ذخیرهسازی رمزگذاری نشده؟ هر یافته را به ترتیب اهمیت و تصحیح بنویسید. کد: [HCL]
4) Convert the repetitive code to the module:
کد Terraform تکراری زیر را به یک ماژول قابل استفاده مجدد تبدیل کنید: چه مقادیری باید متغیر باشد، رابط ماژول چگونه باید باشد؟ همچنین استفاده از نمونه را نشان دهید. کد: [HCL]
اعلان ضعیف / اعلان قوی
ضعیف: "ایجاد پایگاه داده با Terraform."
نتیجه: مشخص نیست کدام ابر، کدام موتور، کدام نسخه، رمزگذاری شده یا نه. با نحو قدیمی، هوش مصنوعی می تواند نمونه ای در دسترس عموم ارائه دهد که رمز عبور را در کد جاسازی می کند.
Strong: "یک نمونه RDS PostgreSQL 15 در AWS با Terraform ~> 1.7 ایجاد کنید. متغیر رمز عبور را ایجاد کنید، آن را در کد قرار ندهید. فضای ذخیره سازی رمزگذاری شده است، فقط از طریق زیرشبکه خصوصی قابل دسترسی است، نه عمومی. نسخه ارائه دهنده را رفع کنید. نقطه پایانی را به عنوان خروجی برگردانید."
تفاوت: فرمان دوم موتور، نسخه، رمزگذاری، محدودیت شبکه و قانون مخفی را ارائه می دهد - خروجی امن و نزدیک به تولید است.
اشتباهات رایج
- برای "اعمال" بدون ایجاد "برنامه". گران ترین اشتباه در IaC; همیشه اول برنامه ریزی کنید
- جاسازی راز در HCL. نشت دائمی در تاریخچه Git ایجاد می کند.
- ذخیره سازی ایالت ناامن یک حالت عمومی رمزگذاری نشده، قفل نشده یک فاجعه است.
- اصلاح نشدن نسخه استفاده از ارائه دهنده بدون تعیین نسخه منجر به خرابی های ناگهانی در آینده می شود.
- *`اقدام: مجوز گسترده مانند ""`. ** اصل کمترین امتیاز را نقض می کند.
- نادیده گرفتن «تخریب» غیرمنتظره. اعمال خطوط حذف در طرح بدون سوال.
به طور خلاصه
IaC زیرساخت را به کد قابل تکرار، نسخهپذیر و قابل ممیزی تبدیل میکند. رایج ترین ابزار Terraform است. هوش مصنوعی به سرعت خرده HCL تولید می کند، اما شما باید نسخه، جزئیات مربوط به ابر و قوانین امنیتی را ارائه دهید. قانون خطاناپذیر در Terraform: دیدن هر تغییر با یک برنامه، درخواست حذف غیرمنتظره، دور نگه داشتن اسرار از کد و ایمن نگه داشتن ایالت. از بین بردن و جایگزینی خطوط در خروجی طرح، مکان هایی هستند که باید با دقت بیشتری خوانده شوند.
وظیفه کاربردی
از هوش مصنوعی بخواهید یک زیرساخت کوچک (مانند یک سطل ذخیره سازی و یک خط مشی دسترسی) با استفاده از الگوی «ایجاد طرح زیرساخت» در بالا ایجاد کند. سپس: (1) الگوی بررسی را برای مجوزهای مخفی یا * در کد قرار دهید. (2) if possible, run init + plan in a test account and read the plan output with the "plan interpretation" template; (3) هر گونه حذف/تغییر غیرمنتظره را یادداشت کنید.
چک لیست
- [ ] من ابر، نسخه Terraform/ارائهدهنده، و محدودیتهای رمزگذاری/شبکه را به درخواست خود اضافه کردم.
- [ ] هیچ رمز متنی ساده در کد وجود ندارد. مقادیر دقیق متغیر
- [ ] IAM/مجوزها را به حداقل مجوزها محدود کردم، * از آن استفاده نکردم.
- [ ] من طرح را قبل از اعمال اجرا کردم و خط به خط خروجی را خواندم.
- [ ] من تأیید کردم که هیچ تخریب/جایگزینی غیرمنتظره ای در طرح وجود ندارد.
- [ ] من مطمئن هستم که وضعیت در یک باطن رمزگذاری شده، قفل شده و محدود نگهداری می شود.