יחידה 6 / 11

ניהול תשתיות כקוד (IaC): Terraform, Ansible ו-Plan Control

רווחים:

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

ניהול תשתית כקוד (IaC): Terraform, Ansible ו-Plan Control עם AI

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

ביחידה זו נדון בגישה ההצהרתית, ההבחנה בתוכנית/החלה, בביטחון המדינה ובאי-דמוטנטיות; תלמדו יצירת IaC עם AI ואת המיומנות הקריטית ביותר, "בקרת תכנון".

חשיבה הצהרתית: "מה אם", לא "איך לעשות"

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

תכנן/החל: מעקה בטיחות חיוני ביותר

התכונה מצילת החיים של IaC היא שלב התוכנית. ב-Terraform, terraform plan, ב-Ansible, --check mode מייצר תצוגה מקדימה של "מה ישתנה אם אחיל אותו" לפני הפעלת הקוד: "2 משאבים יתווספו, 1 ישתנה, 0 יימחק". זו הדרך היחידה להשוות את כוונתך למציאות לפני היישום. כלל קריטי: לעולם אל תגיש בקשה מבלי לקרוא את התוכנית. חפשו במיוחד את קווי ה"הרוס"; אם אתה רואה "12 יימחקו" במקום "1 ישתנה" בגלל שגיאת הקלדה, התוכנית הצילה אותך מאסון. לאחר הדפסת הקוד ל-AI, תגיד "בדוק איתי את הפלט של התוכנית שורה אחר שורה, סמן כל שורה שמכילה מחיקה/שידור".

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

תיק המדינה: תיעוד של סודות ואמת

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

צעד אחר צעד: אבטח IaC עם AI

  1. כוונת המדינה וספק. "שני שרתים ב-AWS, עם Terraform, באזור זה, בגודל כזה וקבוצת אבטחה." אם הענן, הכלי והגרסה ברורים, ה-AI מייצר תחביר נכון.
  2. בקש ברירת מחדל אבטחה. "פתח קבוצת אבטחה, אפשר הצפנה, חילוץ סודות למשתנה, הענק גישה לציבור." בינה מלאכותית יכולה ליצור דוגמאות רופפות כברירת מחדל.
  3. קרא והבין את הקוד. הבן כל משאב, כל הרשאה, שורה אחר שורה. אל תחיל הרשאה שאינך מבין.
  4. קבל תוכנית ובדוק אותה. הפעל תוכנית/--בדוק, בחן את הפלט עם AI, סמן את שורות המחיקה והבנה מחדש.
  5. למרוח קטן והפיך. בצע שינוי גדול בחלקים קטנים, לא בבת אחת. דע את הדרך חזרה בכל צעד.
  6. הגן על המדינה. השתמש בקצה אחורי ובנעילה מרחוק, מוצפן; לעולם אין מצב של דליפה.

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

מקרה 1 - התוכנית שחזרה מסד נתונים. מהנדס רצה להגדיל את גודל מסד הנתונים עם קוד Terraform שייצר עם AI. בזמן שהוא ציפה ש"1 ישתנה" בפלט של תוכנית ה-terraform, הוא ראה "1 להרוס, 1 להוסיף" - הפרמטר שהוא בחר היה הפעלת בנייה מחדש, לא עדכון במקום, כלומר כל הנתונים יימחקו. בקרת התוכנית עצרה אובדן נתונים בלתי הפיך לפני יישום.

מקרה 2 - חזרה מברירת מחדל רופפת. צוות ביקש מה-AI קוד חומת אש. כדי להפעיל את הדוגמה, ה-AI יצר כלל פשוט של 0.0.0.0/0, כלומר "ציבורי באינטרנט". המהנדס הבחין בכך בעת קריאת הקוד וצמצם את הגישה לטווח ה-IP הארגוני בלבד. אם זה היה מיושם ללא ביקורת, מסד הנתונים היה פתוח לכל האינטרנט.

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

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

1) יצירת משאבי IaC (ברירת מחדל מאובטחת):

תפקידך: מהנדס תשתיות ענן בכיר. [ענן, למשל. AWS] עבור[כלי, למשל. Terraform] ליצור קוד. מטרה: [תכלית]. כללי אבטחה: גישה ציבורית (0.0.0.0/0) OPEN; התחל עם ההרשאה המצומצמת ביותר; הפעל הצפנה; לחלץ סודות למשתנים, אל תטמיע אותם בקוד; בדוק הגדרות שעלולות להוביל למחיקה/בילוי. הסבר כל מקור בהערה קצרה.

2) תכנן ביקורת פלט:

להלן פלט [תוכנית Terraform / Ansible check]. אמור לי: (1) כמה משאבים יתווספו/ישונו/ימחקו, (2) סמן גם את שורות "השמד" או "אלץ החלפה" המהוות סיכון לאובדן נתונים, (3) רשום כל שינוי שנראה בלתי צפוי או מסוכן. פלט: [תוכנית]

3) סקירת אבטחה של קוד IaC:

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

4) חלקו את השינוי לחלקים בטוחים:

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

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

הנחיה חלשה:

כתוב קוד Terraform שיוצר שרת ב-AWS.

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

הנחיה עוצמתית:

תפקידך: מהנדס תשתיות ענן בכיר. הגדירו שרת אינטרנט עם Terraform ב-AWS eu-central-1: t3.small, רק מטווח ה-IP הארגוני (אני אתן אותו עם משתנה), יציאה 443 פתוחה, הדיסק מוצפן, אין גישה ציבורית, התוויות הן חובה. סודות מתגלים למשתנה. אחרי הקוד: לפני הטמעתו, ספר לי על 3 סוגי הקווים שעלי לשים לב אליהם בתוכנית והסבר את נתיב החזרה.

במה

סיכון

מעקה בטיחות

כתיבת קוד

ברירת מחדל רופפת (ציבורי)

ההרשאה הכי צרה + קריאה

לתכנן/לבדוק

מוחק בלי לשים לב

לתכנן בדיקה, להרוס סימון

החל

שינוי חד פעמי גדול

צעדים קטנים הפיכים

ממשל המדינה

דליפת זיגוג, עיוות

Backend מוצפן מרחוק + נעילה

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

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

לסיכום

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

משימת יישום

בחר יעד תשתית קטן (לדוגמה, מכונה וירטואלית יחידה וכלל אבטחה). עם התבנית "יצירת משאב IaC" למעלה, בקש מה-AI קוד עם ברירות מחדל בטוחות. בדוק שוב את הקוד עם התבנית "סקירת אבטחת קוד IaC" ונסה למצוא לפחות הגדרה אחת רופפת. במידת האפשר, הפעל תוכנית/--בדוק בחשבון בדיקה וסקור את הפלט עם התבנית "בדיקת פלט לתכנן"; בדוק אם יש קו מחיקה או יצירה מחדש. רשמו את הממצאים שלכם וכיצד תבטיחו את המדינה ב-6 נקודות.

רשימת בדיקה

  • [ ] האם ציינתי ענן, כלי וגרסה ל-AI וביקשתי קוד עם ההרשאות המצומצמות ביותר?
  • [ ] האם בדקתי את הקוד עבור ברירות מחדל רופפות (0.0.0.0/0, הצפנה סגורה)?
  • [ ] האם חילצתי את הסודות למשתנה במקום להטמיע אותם בקוד?
  • [ ] האם קראתי את התוכנית/בדקתי את הפלט וסימנתי את שורות המחיקה לפני הגשת הבקשה?
  • [ ] האם הערכתי את ההשפעה על אובדן הנתונים של קווי "החלפת כוחות" / בנייה מחדש?
  • האם לא שמרתי את קובץ המדינה [ ] מוצפן, נעול, בקצה האחורי המרוחק והדלפתי אותו החוצה?