יחידה 3 / 11

ניהול תשתיות כקוד: בינה מלאכותית עם Terraform ו-IAC

רווחים:

  • יכולת להבין את תפיסת IaC ואת מחזור העבודה של Terraform (התחלה, תכנון, החל, מצב, מודול) ובינה מלאכותית לייצר טיוטות HCL בטוחות
  • יכולת לבדוק כל שינוי עם תוכנית לפני היישום ולתפוס קווי הרס/החלפה בלתי צפויים
  • יכולת ליישם את העקרונות של שמירת סודות מחוץ לקוד, שמירה על מצב מאובטח ומזעור הרשאות IAM

בעבר, הקמת שרת הייתה עניין של לחיצה דרך פאנל ענן: צור מכונה וירטואלית, הגדר את הרשת, הוסף את כלל האבטחה. שיטה זו הייתה איטית, מועדת לשגיאות ואי אפשר לחזור עליהן - כמעט בלתי אפשרי להגדיר את אותה סביבה בפעם השנייה. כיום, התשתית מנוהלת כקוד. IaC (תשתית כקוד) היא גישה לתיאור משאבי ענן כגון שרתים, רשתות ומסדי נתונים בקבצי טקסט ולא באופן ידני. קבצים אלה יושבים בבקרת גרסאות (Git); אתה יכול לראות מי שינה מה, מתי ומה; ניתן להגדיר את אותה תשתית פעמים רבות, בדיוק באותו אופן, בפקודה אחת.

כלי IaC הנפוץ ביותר הוא Terraform. Terraform לוקח את ההגדרות שאתה כותב בשפה קריאה בשם HCL (HashiCorp Configuration Language — שפת התצורה של Terraform), מתרגמת אותן ל-API של ספק הענן (AWS, Azure, GCP) ויוצרת את המשאבים. ה-AI מכיר היטב את HCL ומייצר בלוקים מורכבים במהירות. אבל ב-IAC, העלות של טעות היא גבוהה: הגדרה שגויה אחת יכולה למחוק מסד נתונים ייצור שלם. לכן כלל הזהב ב-Terraform הוא לראות כל שינוי עם 'תוכנית' לפני היישום שלו.

זמן הריצה של Terraform

Terraform עובד עם שלוש פקודות בסיסיות - הידיעה שאלו היא תנאי מוקדם לשליטה בפלט AI:

  • `terraform init`: מתחיל את הפרויקט, מוריד את התוספים הדרושים לספק.
  • `תכנית terraform`: משווה את המצב הנוכחי למצב הרצוי ומראה מה להוסיף, מה לשנות, מה למחוק. לא מיישם כלום. זהו שלב האבטחה הקריטי ביותר.
  • `terraform apply`: למעשה מחיל את התוכנית, יוצר/משנה משאבים.

בנוסף, שני מושגים חיוניים. מצב (קובץ מצב): זהו הקובץ שבו Terraform שומר על המצב הנוכחי של המשאבים שהיא מנהלת; לרוב הוא מאוחסן במחסן מרוחק ונעול כך ששני אנשים לא יכולים לשנות או להרוס אותו בו זמנית. מודול: חבילת תצורה לשימוש חוזר; לדוגמה, אתה יכול להשתמש במודול "הגדר רשת" בפרויקטים רבים.

טיפ: הסימן המסוכן ביותר בפלט Terraform הוא הרס או -/+ (החלף) שורות בפלט התוכנית. המשמעות היא שהמשאב יימחק. אם אתה רואה הרס בלתי צפוי בתוכנית, לעולם אל תחיל, קודם כל תבין מדוע היא הופיעה.

שלב אחר שלב: כתיבת IaC עם AI

  1. הבהרת התשתית הרצויה. היה קונקרטי כמו "VPC אחד, שתי רשתות משנה, קבוצת אבטחה אחת ואחת t3.micro EC2 ב-eu-central-1".
  2. ציין ספק וגרסה. איזה ענן, איזו גרסת Terraform וספק? אם לא תציין גרסה, AI עשוי להחזיר תחביר מיושן/לא תואם.
  3. יש להפיק את טיוטת HCL. בקש גם משתנים ותפוקות.
  4. תוציא את סוד. ערכים כמו סיסמאות ומפתחות צריכים לעבור לכספת המשתנה והסודית, לא לקוד.
  5. הפעל את 'init' + 'plan'. קרא את הפלט של התוכנית שורה אחר שורה; בדוק אם יש מחיקות בלתי צפויות.
  6. התחל בקטן, יישם בהדרגה. החל אותו תחילה בחשבון בדיקה/סביבה מבודדים.

אבטחה: סיכונים ספציפיים ל-IAC

IaC מסוכן כמו שהוא חזק. שלוש נקודות קריטיות:

  1. יש סוד בתיק המדינה. מצב Terraform שומר לפעמים ערכים רגישים, כגון סיסמאות מסד נתונים, בטקסט רגיל. לעולם אל תכניס את המדינה למאגר ציבורי; השתמש בקצה מרוחק מוצפן והגבלת גישה.
  2. אל תטמיע סודות ב-HCL. שורות כמו password="prod123" נכתבות לצמיתות להיסטוריית Git. במקום זאת, השתמש במשתנה ותן את הערך בזמן ריצה ממשתנה הסביבה (TF_VAR_...) או הכספת הסודית.
  3. הרשאת IAM רחבה מאוד. AI מייצר לפעמים בלוקים כמו Action: "*" (אפשר הכל) כדי "לגרום לזה לעבוד". זוהי פגיעות; לצמצם את ההרשאה למינימום הנדרש.
שימו לב: ברגע שסוד נכנס להיסטוריה של Git, הוא נשאר בעבר וניתן להתפשר עליו, גם אם תמחק את הקובץ. אם אתה מתחייב בטעות, בטל מיד וסובב את הסוד; רק למחוק זה לא מספיק.

טבלת סימני תוכנית מסוכנת

תדפיס תוכנית

משמעות

מה לעשות

+ליצור

משאב חדש יתווסף

בטוח בדרך כלל, אבל סקירה

~ עדכון במקום

המקור ישתנה באתר

אמת השפעה (האם תהיה הפסקה?)

-/+ להחליף

יימחק וייצור מחדש

זהירות: אובדן נתונים עלול להתרחש

- להרוס

המשאב יושמד

עצור: לעולם אל תגיש בקשה אם אתה לא מצפה לזה

שלושה מיני תיקים

מקרה 1 - יומיים עבודה ב-3 שעות. צוות אחד התכוון לכתוב Terraform כדי להקים סביבת בדיקה חדשה (VPC, רשתות משנה, מסד נתונים RDS, אשכול ECS) אבל הם בדיוק עברו ל-HCL. הם תיארו את הארכיטקטורה והגרסאות ל-AI והפיקו תוכנית מודולרית. הם אימתו כל מודול עם התוכנית והפעילו אותו תוך 3 שעות; זה ייקח להם יומיים של ניסוי וטעייה ידני.

מקרה 2 - התוכנית תפסה מחיקה. מהנדס הפעיל תוכנית מבלי להחיל קוד עדכון שנוצר בינה מלאכותית. הפלט הכיל -/+ replace עבור מסד הנתונים הייצור - ה-AI ניסה להחליף שדה שאינו ניתן להחלפה, מה שאומר מחיקה ויצירה מחדש של מסד הנתונים. המהנדס הפסיק ליישם ושינה את השינוי לשיטה בטוחה. הרגל התכנון מנע אסון.

מקרה 3 - דליפה סודית קבורה. צעיר, YZ הוציא db_password = "S3cret!" הוא ביצע את הקו כפי שהוא ודחף אותו. נתפס בסקירת קוד; הסיסמה בוטלה ושונתה מיד, הערך הועבר למשתנה והוזנה מהכספת הסודית. שיעור: אף פעם אין סודות טקסט רגיל ב-HCL.

ארבע תבניות הניתנות להעתקה

1) יצירת טיוטת תשתית:

כתוב את התשתית הבאה ב-[CLOUD: AWS] עם Terraform (גרסה ~> 1.7): [SOURCE LIST]. אזור [X]. כללים:- הפוך את כל הערכים הרגישים למשתנים, אל תטמיע אותם ב-HCL.- תקן גרסת ספק (required_providers).- צמצם את הרשאות IAM, אל תשתמש ב-"*".- החזר [X, Y] כפלט. תן קוד באופן מודולרי ועם הסברים.

2) פירוש פלט התוכנית:

נתח את הפלט של 'תוכנית terraform' להלן. רשום אותי:(1) אילו משאבים נוספו/שונו/נמחקו,(2) שורות בסיכון לאובדן נתונים או הפרעה,(3) 3 שאלות שעלי לשאול לפני הגשת הבקשה. תוכנית: [פלט]

3) בדוק את HCL הקיים לאבטחה:

בדוק את הקוד הבא של Terraform לאבטחה: סוד מוטבע, הרשאת IAM רחבה מדי, כלל רשת פתוחה (0.0.0.0/0), אחסון לא מוצפן? כתבו כל ממצא לפי סדר חשיבות ותיקון. קוד: [HCL]

4) המר את הקוד החוזר למודול:

המר את קוד Terraform החוזר על עצמו למודול שניתן לשימוש חוזר: אילו ערכים צריכים להיות משתנים, מה צריך להיות ממשק המודול? הצג גם שימוש לדוגמה. קוד: [HCL]

הנחיה חלשה / הנחיה חזקה

חלש: "צור מסד נתונים עם Terraform."

תוצאה: לא ברור איזה ענן, איזה מנוע, איזו גרסה, מוצפן או לא; עם תחביר מדור קודם, AI יכול לספק דוגמה זמינה לציבור שמטמיע את הסיסמה בקוד.

חזק: "צור מופע RDS PostgreSQL 15 ב-AWS עם Terraform ~> 1.7. הפוך את הסיסמה למשתנה, אל תטמיע אותו בקוד. האחסון מוצפן, נגיש רק מרשת משנה פרטית, לא ציבורית. תקן את גרסת הספק. החזר נקודת קצה כפלט."

הבדל: ההנחיה השנייה נותנת את המנוע, הגרסה, ההצפנה, אילוץ הרשת והכלל הסודי - הפלט מאובטח וקרוב למוצר.

טעויות נפוצות

  • 'להגיש בקשה' מבלי לעשות 'תוכנית'. הטעות היקרה ביותר ב-IAC; תמיד לתכנן קודם.
  • הטמעת סוד ב-HCL. יוצר דליפה קבועה להיסטוריית Git.
  • מצב אחסון לא בטוח. מדינה ציבורית לא מוצפנת, לא נעולה היא אסון.
  • לא מתקן את הגרסה. שימוש בספק מבלי לציין גרסה יוביל לכשלים פתאומיים בעתיד.
  • *`פעולה: הרשאה רחבה כגון ""`.** מפר את עיקרון המינימום הפריבילגיה.
  • התעלמות מ'הרס' בלתי צפוי. החלת שורות המחיקה בתכנית ללא חקירה.

לסיכום

IaC הופך תשתית לקוד בר-חזרה, בר-גירסאות וניתן לביקורת; הכלי הנפוץ ביותר הוא Terraform. AI מייצר במהירות בדלי HCL, אך עליך לספק את הגרסה, פרטים ספציפיים לענן וכללי אבטחה. הכלל הבלתי ניתן לטעות ב-Terraform: לראות כל שינוי בתוכנית, לבקש מחיקות בלתי צפויות, להרחיק סודות מהקוד ולשמור על המדינה בצורה מאובטחת. הקווים להרוס ולהחליף בפלט תוכנית הם המקומות שצריך לקרוא בזהירות רבה ביותר.

משימת יישום

בקש מה-AI לייצר תשתית קטנה (למשל דלי אחסון ומדיניות גישה) באמצעות התבנית "צור סקיצה של תשתית" למעלה. לאחר מכן: (1) תבקש מתבנית ה"בדיקה" לבדוק אם יש הרשאות סודיות או * הרשאות מוטמעות בקוד; (2) במידת האפשר, הפעל init + plan בחשבון בדיקה וקרא את פלט התוכנית עם תבנית "פירוש התוכנית"; (3) שימו לב למחיקות/שינויים בלתי צפויים.

רשימת בדיקה

  • [ ] הוספתי ענן, גרסת Terraform/ספק ומגבלות הצפנה/רשת להנחיה שלי.
  • [ ] אין סוד טקסט רגיל בקוד; ערכי דיוק משתנים.
  • [ ] צמצמתי את הרשאות IAM/הרשאות מינימליות, * לא השתמשתי בה.
  • [ ] הרצתי את התוכנית לפני היישום וקראתי את הפלט שורה אחר שורה.
  • [ ] וידאתי שאין השמדה/החלפה בלתי צפויה בתוכנית.
  • [ ] אני בטוח שהמדינה נשמרת ב-backend מוצפן, נעול ומוגבל.