תובנות אבטחה בזמן הריצה

1. מבוא

בשיעור ה-Lab הזה תפרסו אפליקציה לאשכול Cloud Run ו-GKE ותצפו בתובנות אבטחה לפריסה ב- Software Delivery Shield Security

מה תלמדו

  • תובנות אבטחה של Artifact Registry
  • תובנות אבטחה של Cloud Run
  • מצב האבטחה של GKE

2. הגדרה ודרישות

הגדרת פרויקט ב-Cloud

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הגדרת סביבה

לוחצים על הסמל שמופיע מימין לסרגל החיפוש כדי להפעיל את Cloud Shell.

ecdc43ada29e91b.png

ב-Cloud Shell, מפעילים את ממשקי ה-API הנדרשים לשיעור ה-Lab הזה:

gcloud services enable run.googleapis.com \
  cloudbuild.googleapis.com \
  artifactregistry.googleapis.com \
  container.googleapis.com \
  containersecurity.googleapis.com

אם מתבקשים לאשר, לוחצים על 'מתן הרשאה' כדי להמשיך.

6356559df3eccdda.png

אמורה ליצור מסר מוצלח שדומה להודעה הזו:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

מריצים את הפקודה כדי ליצור את אשכול GKE באופן אסינכרוני. נשתמש בה בהמשך שיעור ה-Lab:

gcloud beta container clusters create gke-cluster \
    --zone us-central1-a \
    --async

3. הכנת הבקשה

קודם כול, צריך להכין אפליקציית Node.js פשוטה שמבוססת על Express ומגיבה לבקשות HTTP.

יוצרים ספרייה חדשה ב-Cloud Shell בשם starter-nodejs, ואז עוברים אליה:

mkdir starter-nodejs
cd starter-nodejs

כדי ליצור קובץ package.json, מריצים את הפקודות הבאות:

cat > ./package.json << EOF
{
  "name": "cloudrun-starter-app",
  "version": "1.0.0",
  "description": "Node.js Starter Application",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "Apache-2.0",
  "dependencies": {
    "express": "^4.18.2"
  }
}
EOF

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

לאחר מכן, באותה ספרייה, יוצרים קובץ index.js באמצעות הרצת הפקודות הבאות:

cat > ./index.js << EOF
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  console.log('Received a request.');
  res.send("Hello Cloud Run!");
});

const port = process.env.PORT || 8080;

app.listen(port, () => {
  console.log('Listening on port', port);
});
EOF

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

4. פריסת אפליקציית Cloud Run

מריצים את הפקודה הבאה כדי לפרוס את האפליקציה:

gcloud run deploy starter-app \
  --source . \
  --region us-central1 \
  --allow-unauthenticated \
  --max-instances=3

מאשרים את יצירת המאגר ב-Artifact Registry:

Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [us-central1] will be created.

Do you want to continue (Y/n)? y

5. Artifact Registry ו-Cloud Build Security Insights

ה-build יימשך כמה דקות.

פותחים את Cloud Build ובודקים את ארטיפקטים של ה-build כדי להשתמש בגרסת ה-build האחרונה.

ממשק המשתמש של Cloud Build במסוף Google Cloud מכיל את חלונית התובנות בנושא אבטחה של Software Delivery Shield שבה מוצגים פרטי אבטחה שקשורים ל-build, כמו רמת SLSA, נקודות חולשה בתלות ופיתוח מקורות.

7d9fd2213f3704c4.png

מעיינים בתובנות האבטחה לגבי קובץ אימג' של קונטיינר שנוצר. לוחצים על הקישור לפריטי מידע שנוצרו בתהליך הפיתוח (Artifact) שנסרקים כדי להציג את פרטי נקודות החולשה של התמונה הזו ב-Artifact Registry.

חוזרים למסוף Cloud Shell ומוודאים שפריסת האפליקציה ב-Cloud Run הושלמה.

Done.
Service [starter-app] revision [starter-app-00001-maw] has been deployed and is serving 100 percent of traffic.
Service URL: https://starter-app-nin5jpgefq-uc.a.run.app

6. תובנות אבטחה של Cloud Run

Cloud Run מכיל חלונית אבטחה (Preview) שמציגה תובנות אבטחה של שרשרת אספקת התוכנה, כמו פרטי תאימות ברמת ה-build של SLSA, מקור ה-build ונקודות חולשה שנמצאו בשירותים שפועלים.

פותחים את Cloud Run ובודקים את Security Insights בכרטיסייה REVISIONS / SECURITY.

62a9f5d26207e58e.png

בחלונית הזו מוצגים הפרטים הבאים:

  • זהות והצפנה: כתובת האימייל של חשבון השירות שמשמש כברירת מחדל ב-Compute Engine ומפתח ההצפנה שמשמש לפריסה.
  • רמת SLSA: ה-build הזה נמצא ברמה 3 ב-SLSA, שמזהה את רמת הבשלות של תהליך פיתוח התוכנה בהתאם למפרט ה-SLSA
  • נקודות חולשה: נקודות חולשה שנמצאו בתלות של אפליקציות.
  • פרטי ה-build: פרטים על ה-build, כמו ה-builder והקישור לצפייה ביומנים.
  • יצירת מקור: מקור ה-build, שהוא אוסף של מטא-נתונים שאפשר לאמת לגבי גרסת build. היא כוללת פרטים כמו תקצירים של התמונות שנוצרו, המיקומים של מקור הקלט, שרשרת הכלים של ה-build, שלבי ה-build ומשך הזמן של ה-build.

7. מצב האבטחה של GKE

GKE יכול להעריך את מצב אבטחת הקונטיינרים שלכם ולספק הדרכה פעילה לגבי הגדרות אשכול, הגדרת עומסי עבודה (workload) ונקודות חולשה. היא כוללת את לוח הבקרה למצב האבטחה (Preview), שסורק את אשכולות GKE ועומסי העבודה (workload) כדי לספק לכם המלצות מקובעות ופרקטיות לשיפור מצב האבטחה שלכם.

בשלבים הבאים תפרסו את האפליקציה באשכול GKE ותבדקו את תובנות האבטחה בלוח הבקרה של מצב האבטחה של GKE.

כדי לוודא שהאשכול מוכן, מריצים את הפקודה הבאה:

gcloud beta container clusters list

פלט לדוגמה:

NAME: gke-cluster
LOCATION: us-central1-a
MASTER_VERSION: 1.24.9-gke.3200
MASTER_IP: 34.29.226.228
MACHINE_TYPE: e2-medium
NODE_VERSION: 1.24.9-gke.3200
NUM_NODES: 3
STATUS: RUNNING

קבלת פרטי כניסה והגדרות אישיות לאשכול GKE:

gcloud container clusters get-credentials gke-cluster  \
    --region=us-central1-a

מריצים את הפקודה לפריסת האפליקציה באמצעות קובץ האימג' שנוצר בשלב הקודם:

export PROJECT_ID=$(gcloud config get-value project)

kubectl run starter-app \
  --image us-central1-docker.pkg.dev/${PROJECT_ID}/cloud-run-source-deploy/starter-app:latest \
  --port 8080

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

הפעלה של סריקת הגדרות של עומסי עבודה:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-config-audit

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

מערכת GKE סורק באופן אוטומטי את תמונות הקונטיינרים בכל Pod כשיר שפועל באשכול GKE, כדי לאתר נקודות חולשה ידועות, באמצעות נתוני נקודות חולשה ממסדי נתונים ציבוריים של CVE כמו NIST.

אם נמצאה נקודת חולשה בקובצי האימג' של הקונטיינרים, מערכת GKE מקצה דירוג חומרה ומציגה את התוצאות בלוח הבקרה של מצב האבטחה במסוף Google Cloud. מערכת GKE גם מוסיפה רשומות ל-Cloud Logging לצורכי ביקורת ויכולת מעקב.

הפעלה של סריקת נקודות חולשה של עומסי עבודה:

gcloud beta container clusters update gke-cluster \
    --region=us-central1-a \
    --enable-workload-vulnerability-scanning \
    --async

פותחים את הדף Security Posture של GKE.

מחכים כמה דקות עד שהבדיקה של עומס העבודה תסתיים ואז בודקים את התוצאות.

5b1b8158bc55ce67.png

בדקו את הבעיות שקשורות להגדרה ואת עומסי העבודה (workloads) שהושפעו.

58e6f4b6d8eaa99a.png

למה כדאי להשתמש במרכז הבקרה של מצב האבטחה

לוח הבקרה של מצב האבטחה הוא אמצעי אבטחה בסיסי שאפשר להפעיל בכל אשכול GKE שעומד בדרישות. מומלץ להשתמש במרכז הבקרה של מצב האבטחה בכל האשכולות ב-Google Cloud מהסיבות הבאות:

  • שיבושים מינימליים: התכונות לא מפריעות לעומסי עבודה (workloads) או משבשות אותם.
  • המלצות פרקטיות: כשאפשר, לוח הבקרה של מצב האבטחה מספק פעולות לביצוע כדי לפתור בעיות שהתגלו. הפעולות האלה כוללות פקודות שאפשר להריץ, דוגמאות לשינויים בהגדרות ועצות לגבי הפעולות שצריך לבצע כדי לצמצם את נקודות החולשה.
  • תצוגה חזותית: מרכז הבקרה של מצב האבטחה מספק תצוגה חזותית ברמה גבוהה של בעיות שמשפיעות על אשכולות בפרויקט שלכם, וכולל תרשימים וגרפים שמציגים את ההתקדמות שלכם ואת ההשפעה הפוטנציאלית של כל חשש.
  • תוצאות מקובעות: ב-GKE, אנחנו מקצים דירוג חומרה לבעיות שהתגלו על סמך המומחיות של צוותי האבטחה והתקנים המקובלים בתחום ב-Google.
  • יומני אירועים ניתנים לביקורת: GKE מוסיף את כל החששות שזוהו ל-Logging, כדי לשפר את יכולת הדיווח והניראות.

8. מעולה!

מעולה! סיימתם את ה-Codelab.

נושאים שטיפלנו בהם:

  • מידע על תובנות אבטחה עבור ארטיפקטים של build ואפליקציות שפועלות ב-Cloud Run וב-GKE

הסרת המשאבים

כדי להימנע מצבירת חיובים בחשבון Google Cloud על המשאבים שנעשה בהם שימוש במדריך הזה, צריך למחוק את הפרויקט שמכיל את המשאבים או לשמור את הפרויקט ולמחוק את המשאבים הספציפיים.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.

עדכון אחרון: 21.03.23