אתם יכולים לאמת את התקינות של תמונת המכונה הווירטואלית (VM) ב-Compute Engine שמשמשת את Google Kubernetes Engine (GKE) למכונות וירטואליות של מישור הבקרה. בדף הזה מופיעות הוראות לצוות אבטחה שעוקב אחרי יומני רמת הבקרה כדי לאמת את הדברים הבאים:
- המכונה הווירטואלית של מישור הבקרה הופעלה עם קושחה מקורית ותוכנות הפעלה אחרות שאומתו באופן קריפטוגרפי על ידי הפעלה מאובטחת וניטור של התקינות.
- המכונה הווירטואלית של מישור הבקרה הופעלה מקובץ אימג' אותנטי של מערכת ההפעלה GKE.
אפשר גם לבצע את האימות הזה לתמונות של מערכת ההפעלה ולתקינות ההפעלה של הצמתים.
בדף הזה מתואר חלק אחד מתוך קבוצה של תכונות אופציונליות של מישור הבקרה ב-GKE, שמאפשרות לבצע משימות כמו אימות של מצב האבטחה של מישור הבקרה או הגדרת הצפנה וחתימה על אישורים במישור הבקרה באמצעות מפתחות שאתם מנהלים. פרטים נוספים זמינים במאמר מידע על הרשאות במישור הבקרה של GKE.
כברירת מחדל, Cloud de Confiance מחיל אמצעי אבטחה שונים על מישור הבקרה המנוהל. בדף הזה מתוארות יכולות אופציונליות שמאפשרות לכם לקבל יותר שקיפות או שליטה במישור הבקרה של GKE.
מידע על אימות התקינות של מכונות וירטואליות
כברירת מחדל, כל המופעים של רמת הבקרה של GKE הם מכונות וירטואליות מוגנות, שהן מכונות וירטואליות מוקשחות שמשתמשות ביכולות אבטחה כמו הפעלה מאובטחת ומדודה, מודול פלטפורמה וירטואלית מהימנה (vTPM) וקושחת UEFI. בנוסף, בכל צומתי ה-GKE מופעל ניטור של התקינות, שמאמת את רצף האתחול של כל מכונה וירטואלית מוגנת בהשוואה לרצף אתחול בסיסי 'טוב'. האימות הזה מחזיר תוצאות של הצלחה או כישלון לכל שלב ברצף האתחול, ומוסיף את התוצאות האלה ל-Cloud Logging. התכונה 'מעקב אחר תקינות' מופעלת כברירת מחדל בכל אשכולות GKE ומאמתת את השלבים הבאים:
- רצף אתחול מוקדם: מהרגע שקושחת ה-UEFI מתחילה לפעול עד שמנהל האתחול מקבל שליטה. התווסף ליומני ה-VM בשם
earlyBootReportEvent. - רצף אתחול מאוחר: מהרגע שתוכנת האתחול מקבלת שליטה ועד שהקרנל של מערכת ההפעלה מקבל שליטה. נוסף ליומני ה-VM בתור
lateBootReportEvent.
GKE גם מוסיף יומנים של יצירת מכונות וירטואליות במישור הבקרה ל-Logging. היומנים האלה מכילים מטא-נתונים שמזהים את המכונה וכוללים פרטים על תמונת ה-VM ורצף האתחול. Cloud de Confiance מפרסמת אימות סיכום (VSA) לכל תמונת VM של מישור הבקרה של GKE במאגר gke-vsa ב-GitHub. ב-VSA נעשה שימוש בframework של in-toto לאימותים. אתם יכולים לאמת את היומנים של מכונות וירטואליות במישור הבקרה של האשכולות שלכם מול ה-VSA המתאים כדי לוודא שהצמתים במישור הבקרה הופעלו כמצופה.
ביצוע האימותים האלה יכול לעזור לכם להשיג את המטרות הבאות:
- צריך לוודא שהתוכנה במישור הבקרה מוגנת על ידי אתחול מאובטח ומעקב אחר השלמות, שהיא תואמת לקוד המקור המיועד ושמדובר באותה תמונה שבה משתמשים לקוחות אחרים של Cloud de Confiance .
- להגביר את האמון באבטחת מישור הבקרה של GKE.
תמחור
התכונה הזו מוצעת ב-GKE ללא עלות נוספת.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
-
מפעילים את Cloud Logging API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של שימוש בשירות' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידים - מוודאים שכבר יש לכם אשכול במצב GKE Autopilot או במצב Standard שפועלת בו גרסה 1.29 ואילך.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לאימות שלמות המכונה הווירטואלית של מישור הבקרה, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
-
יצירה של אשכולות ואינטראקציה איתם:
אדמין של אשכול Kubernetes Engine (
roles/container.clusterAdmin) -
גישה ליומנים ועיבוד שלהם:
מציג היומנים (
roles/logging.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בדיקה של שלבים ברצף האתחול שנכשלו
ניטור שלמות מוסיף יומן ל-Logging אם מכונת VM של מישור הבקרה נכשלת או משלימה בהצלחה שלב ברצף האתחול. כדי להציג אירועי אתחול שנכשלו, מריצים את הפקודות הבאות:
נכנסים לדף Logs Explorer במסוף Cloud de Confiance :
בשדה Query, מציינים את השאילתה הבאה:
jsonPayload.@type="type.googleapis.com/cloud_integrity.IntegrityEvent" jsonPayload.earlyBootReportEvent.policyEvaluationPassed="false" OR jsonPayload.lateBootReportEvent.policyEvaluationPassed="false" jsonPayload.metadata.isKubernetesControlPlaneVM="true"אפשר גם לבדוק אם יש אירועי אתחול מוצלחים על ידי החלפת
falseב-trueבשאילתה הזו.לוחצים על Run query. אם לא מוצגות תוצאות, סימן שהמכונות הווירטואליות של מישור הבקרה עברו את כל הבדיקות של ניטור השלמות. אם מופיע פלט, ממשיכים לשלב הבא כדי לזהות את האשכול המתאים.
במאגר היומנים של שלמות האתחול שנכשל, מעתיקים את הערך בשדה
resource.labels.instance_id.בשדה Query, מציינים את השאילתה הבאה:
protoPayload.@type="type.googleapis.com/google.cloud.audit.AuditLog" protoPayload.metadata.isKubernetesControlPlaneVM="true" resource.labels.instance_id="INSTANCE_ID" protoPayload.methodName="v1.compute.instances.insert"מחליפים את
INSTANCE_IDבערך של השדהinstance_idמהשלב הקודם.לוחצים על Run query. הערך בשדה
protoPayload.metadata.parentResource.parentResourceIdהוא מזהה אשכול GKE.מאתרים את השם של אשכול GKE:
gcloud asset query \ --organization=ORGANIZATION_ID \ --statement="SELECT name FROM container_googleapis_com_Cluster WHERE resource.data.id='CLUSTER_ID';"מחליפים את מה שכתוב בשדות הבאים:
-
ORGANIZATION_ID: המזהה המספרי שלCloud de Confiance הארגון. -
CLUSTER_ID: הערך של השדהprotoPayload.metadata.parentResource.parentResourceIdמהשלב הקודם.
הפלט אמור להיראות כך:
# lines omitted for clarity //container.googleapis.com/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAMEהפלט הזה כולל את השדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . -
LOCATION: המיקום של האשכול. -
CLUSTER_NAME: שם האשכול.
-
חיפוש ובדיקה של יומני ה-VM של מישור הבקרה
יומני יצירת מכונות וירטואליות ב-Compute Engine שתואמים לאשכולות GKE מאוחסנים במאגר היומנים _Default.
כדי למצוא את יומני היצירה של מכונות וירטואליות במישור הבקרה של האשכול ולאחזר את המטא-נתונים האלה, מבצעים את הפעולות הבאות:
נכנסים לדף Logs Explorer במסוף Cloud de Confiance :
בשדה Query, מציינים את השאילתה הבאה:
resource.type="gce_instance" protoPayload.methodName="v1.compute.instances.insert" protoPayload.metadata.isKubernetesControlPlaneVM="true"לוחצים על Run query. אם לא מוצגות תוצאות, צריך לוודא שאתם עומדים בכל הדרישות שמפורטות בקטע לפני שמתחילים.
בודקים את השדה
metadataבתוצאות השאילתה. הפלט אמור להיראות כך:# fields omitted for clarity "metadata": { "usedResources": { "attachedDisks": [ { "sourceImageId": "9046093115864736653", "sourceImage": "https://www.googleapis.com/compute/v1/projects/1234567890/global/images/gke-1302-gke1627000-cos-113-18244-85-49-c-pre", "isBootDisk": true } # fields omitted for clarityהשדה
metadataכולל את הפרטים הבאים:-
usedResources: רשימת המשאבים ששימשו ליצירת המכונה הווירטואלית. -
attachedDisks: דיסק האתחול של המכונה הווירטואלית. -
sourceImageId: המזהה הייחודי של תמונת ה-VM. -
sourceImage: כתובת ה-URL של תמונת המכונה הווירטואלית של המקור. התחביר של הערך בשדה הזה הואhttps://www.googleapis.com/compute/v1/projects/PROJECT_NUMBER/global/images/IMAGE_NAME, כאשרPROJECT_NUMBERהוא מספר הפרויקט בבעלותCloud de Confianceשמארח את מכונות ה-VM של מישור הבקרה, ו-IMAGE_NAMEהוא שם התמונה ששימשה לאתחול מכונת ה-VM. -
isBootDisk: מזהה בוליאני שמציין אם הדיסק הזה שימש כדיסק האתחול של המכונה הווירטואלית.
-
חיפוש ואימות של VSA לתמונות של מכונות וירטואליות במישור הבקרה
בקטע הזה תוכלו למצוא את ה-VSA שמתאים לתמונת מכונת ה-VM של מישור הבקרה במאגר gke-vsa ב-GitHub. אחר כך משתמשים בכלי שנקרא slsa-verifier שמופיע במסגרת Supply chain Levels for Software Artifacts (SLSA) כדי לאמת את ה-VSA. תצטרכו את הנתונים הבאים מיומן היצירה של המכונה הווירטואלית של מישור הבקרה:
- מזהה תמונת ה-VM
- מספר הפרויקט בבעלות Cloud de Confianceשמארח את מכונות ה-VM
- שם תמונת מערכת ההפעלה ששימשה לאתחול מכונת ה-VM
הפורמט של שם הקובץ שמתאים למכונת ה-VM של מישור הבקרה הוא:
IMAGE_NAME:IMAGE_ID.intoto.jsonl
מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_NAME: שם תמונת ה-VM, שהוא המחרוזת אחרי/images/בשדהattachedDisks.sourceImageביומן הביקורת של ה-VM מהקטע הקודם. לדוגמה,gke-1302-gke1627000-cos-113-18244-85-49-c-pre. -
IMAGE_ID: מזהה תמונת ה-VM, שהוא הערך של השדהattachedDisks.sourceImageIdביומן הביקורת של ה-VM מהקטע הקודם. לדוגמה:9046093115864736653.
כדי למצוא ולאמת את ה-VSA כשאתם יודעים את שם הקובץ של קובץ ה-VSA, מבצעים את השלבים הבאים:
- פותחים את מאגר הנתונים של GitHub
gke-vsa. - בספרייה gke-master-images, מחפשים את הקובץ שמתאים לתמונת מכונת ה-VM. לדוגמה,
https://github.com/GoogleCloudPlatform/gke-vsa/blob/main/gke-master-images:78064567238/IMAGE_NAME:IMAGE_ID.intoto.jsonl - מורידים את קובץ ה-VSA.
- התקנת הכלי
slsa-verifier שומרים את המפתח הציבורי לאימות ה-VSA בקובץ בשם
vsa_signing_public_key:מאמתים את ה-VSA:
slsa-verifier verify-vsa \ --attestation-path=PATH_TO_VSA_FILE \ --resource-uri=gce_image://gke-master-images:IMAGE_NAME \ --subject-digest=gce_image_id:IMAGE_ID\ --verifier-id=https://bcid.corp.google.com/verifier/bcid_package_enforcer/v0.1 \ --verified-level=BCID_L1 \ --verified-level=SLSA_BUILD_LEVEL_2 \ --public-key-path=PATH_TO_PUBLIC_KEY_FILE \ --public-key-id=keystore://76574:prod:vsa_signing_public_keyמחליפים את מה שכתוב בשדות הבאים:
-
PATH_TO_VSA_FILE: הנתיב לקובץ ה-VSA שהורדתם. -
IMAGE_NAME: השם של תמונת ה-VM, כמוgke-1302-gke1627000-cos-113-18244-85-49-c-pre. -
IMAGE_ID: מזהה תמונת ה-VM, כמו9046093115864736653.
אם ה-VSA עובר את בדיקות האימות, הפלט הוא:
Verifying VSA: PASSED PASSED: SLSA verification passed-