אימות החיבורים של Google למישור הבקרה של GKE

בדף הזה מוסבר איך לאמת את החיבורים שאנשי Google יוצרים לרמת הבקרה של אשכול Google Kubernetes Engine‏ (GKE) באמצעות התאמה בין יומני GKE ליומנים של Access Transparency.

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

חשוב לוודא שאתם מכירים את המושגים הבאים:

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

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

מידע על הגישה של Google למופעי מישור הבקרה של אשכול

במהלך פגישות לפתרון בעיות או מסיבות עסקיות מוצדקות אחרות, יכול להיות שאנשי Google כמו מהנדסי אמינות אתרים ועובדי Cloud Customer Care יזדקקו לגישת אדמין למכונות של Compute Engine שמארחות את מישור הבקרה שלכם. בהתאם לחבילת התמיכה שלכם ב-Customer Care ולהגדרות, Access Transparency מספקת יומני ביקורת מפורטים לגבי גישת אדמין. התכונה 'אישור גישה' מאפשרת לדרוש אישור מפורש לפני שאנשי Google יכולים לגשת למשאבים שלכם. מידע נוסף על הרשאת אדמין ועל הכלים שבהם אפשר להשתמש כדי לאשר גישה ולתעד שינויים זמין במאמר הרשאת אדמין לעובדי Google.

יומני גישה למישור הבקרה

כשמפעילים את ההרשאה למישור הבקרה של GKE, ‏ GKE יוצר יומני גישה למישור הבקרה שאפשר להשתמש בהם כדי להצליב נתונים עם יומני הביקורת שנוצרו על ידי Access Transparency ועל ידי Access Approval. ‫GKE מוסיף יומנים של גישה למישור הבקרה ל-bucket‏ _Default ב-Logging כדי לתעד חיבורים נכנסים לרשת ואירועי SSH ספציפיים במופעים של מישור הבקרה. כדי ליצור יומני גישה למישור הבקרה של האשכולות, צריך להפעיל את ההרשאה של מישור הבקרה של GKE בפרויקט.

‫GKE יוצר את יומני הגישה הבאים למישור הבקרה:

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

כדי לאמת את החיבורים למישור הבקרה, צריך למצוא את יומני הגישה של מישור הבקרה עבור האשכול ולהשוות אותם ליומני הביקורת מ-Access Transparency ומ-Access Approval. כך תוכלו לוודא שכל חיבורי ה-SSH למופעים של מישור הבקרה נוצרו כתוצאה מגישת אדמין מורשית של צוות Google. כשמפעילים את ההגדרה 'שליטה במישור הבקרה של GKE' עבור האשכול, כל גישת SSH של צוות Google למישור הבקרה היא לא אינטראקטיבית, כלומר כל חיבור SSH מריץ פקודה אחת שאתם מאשרים. כדי לראות פרטים ברמת הפקודה לגבי גישת אדמין, צריך להירשם ל-Augmented Access Approval ול-Augmented Access Transparency. כדי לקבל מידע נוסף על הזכאות ועל ההרשמה, אפשר לפנות לצוות התמיכה בחשבון Google Cloud .

תמחור

צריך להתחשב בשיקולי התמחור הבאים:

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
  • מפעילים את Cloud Logging API.

    תפקידים שנדרשים להפעלת ממשקי API

    כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

    להפעלת ה-API

  • מפעילים את Access Transparency בארגון. הוראות מפורטות זמינות במאמר בנושא הפעלת Access Transparency.

  • אופציונלי: מפעילים את אישור הגישה לפרויקט ובוחרים את שירות GKE. הוראות מפורטות זמינות במאמר בנושא בדיקה ואישור של בקשות גישה באמצעות מפתח החתימה שמנוהל על ידי Google.

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

דרישות

יומני הגישה למישור הבקרה דורשים GKE מגרסה ‎1.31.1-gke.1846000 ואילך.

תפקידים והרשאות נדרשים

כדי לקבל את ההרשאות שדרושות להפעלת יצירת יומנים ולגישה ליומנים ולעיבוד שלהם, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

  • מפעילים את רישום החיבורים למישור הבקרה באשכול: אדמין של אשכול Kubernetes Engine (roles/container.clusterAdmin) בפרויקט
  • כדי לגשת ליומנים ולהשתמש ב-Logs Explorer וב-Observability Analytics: Logs Viewer (roles/logging.viewer) בפרויקט
  • כדי להפעיל את Access Transparency בארגון: אדמין Access Transparency (roles/axt.admin) בארגון

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

הפעלת יומני גישה למישור הבקרה של אשכול GKE

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

אלה השמות של רכיבי הרישום ביומן שנתמכים ביומני הגישה של מישור הבקרה:

  • יומני SSH של מישור הבקרה: KCP_SSHD
  • יומני חיבור של מישור הבקרה: KCP_CONNECTION

הפעלת יומני גישה למישור הבקרה באשכול חדש

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

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --logging=SYSTEM,KCP_SSHD,KCP_CONNECTION

מחליפים את מה שכתוב בשדות הבאים:

  • ‫CLUSTER_NAME: השם של האשכול החדש.
  • ‫LOCATION: המיקום שבו רוצים ליצור את האשכול.

כדי לציין רכיבי רישום ביומן כשיוצרים אשכול באמצעות GKE API, בשיטה projects.locations.clusters.create, מגדירים את הערכים המתאימים באובייקט LoggingConfig של משאב Cluster.

הפעלת יומני גישה למישור הבקרה באשכול קיים

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

  1. מחפשים את רכיבי הרישום ביומן שבהם נעשה שימוש באשכול.
  2. מזהים את הערכים המתאימים שצריך לציין בסימן --logging ב-CLI של gcloud כדי להשאיר את רכיבי הרישום האלה מופעלים.
  3. מעדכנים את הגדרות הרישום ביומן של האשכול כדי להפעיל את יומני הגישה של רמת הבקרה לצד הגדרות הרישום ביומן הקיימות.

הערכים שציינתם עבור הדגל --logging בפקודה gcloud container clusters update שונים מהערכים שמוצגים כשאתם מתארים את האשכול.

  1. בודקים את הגדרות הרישום ביומן הקיים של האשכול:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    הפלט אמור להיראות כך:

    SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER
    
  2. מזהים את הערכים של ה-CLI של gcloud עבור הדגל --logging שמתאימים להגדרת רכיב הרישום ביומן מהפלט של השלב הקודם. רשימת הערכים של ה-CLI של gcloud שתואמים לרכיבי רישום ספציפיים מופיעה בטבלה Available logs (יומנים זמינים).

  3. מעדכנים את הגדרות הרישום ביומן עם יומני גישה למישור הבקרה:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,EXISTING_LOGS,KCP_ACCESS_LOGS
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫EXISTING_LOGS: רשימה מופרדת בפסיקים של רכיבי רישום ביומן שהאשכול כבר משתמש בהם. חשוב לוודא שציינתם את הערכים של ה-CLI של gcloud שמתאימים לרכיבי הרישום האלה, מתוך הטבלה Available logs.
    • ‫KCP_ACCESS_LOGS: רשימה מופרדת בפסיקים של סוגי יומני הגישה של מישור הבקרה שרוצים להפעיל באשכול, באופן הבא:

      • כדי לראות את יומני ה-SSH של מישור הבקרה, מציינים KCP_SSHD.
      • כדי לראות את יומני החיבור של מישור הבקרה, מציינים KCP_CONNECTION.

כדי לציין רכיבי רישום ביומן כשמעדכנים אשכול באמצעות GKE API, בשיטה projects.locations.clusters.update, מגדירים את הערכים הקיימים והחדשים של רכיבי הרישום ביומן באובייקט LoggingConfig של המשאב ClusterUpdate.

דוגמה לעדכון אשכול כדי להפעיל יומני גישה למישור הבקרה

נניח שיש אשכול שמוצגות בו הגדרות הרישום ביומן הבאות אחרי הרצת הפקודה gcloud container clusters describe:

SYSTEM_COMPONENTS,WORKLOADS,APISERVER,SCHEDULER,CONTROLLER_MANAGER

הפקודה הבאה לעדכון האשכול מאפשרת את שני סוגי היומנים של הגישה למישור הבקרה, תוך שמירה על הגדרת היומנים הקיימת עבור האשכול לדוגמה הזה:

gcloud container clusters update example-cluster \
    --location=us-central1 \
    --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION

השוואה בין יומני גישה למישור הבקרה לבין יומני Access Transparency

כדי לאמת את הגישה למישור הבקרה של אשכול, צריך לקבל את יומני החיבור של מישור הבקרה, את יומני ה-SSH של מישור הבקרה ואת יומני Access Transparency של האשכול:

  1. במסוף Google Cloud , פותחים את הדף Logs Explorer.

    כניסה לדף Logs Explorer

  2. כדי לקבל את כל היומנים של אשכול ספציפי, כולל יומני הגישה של מישור הבקרה ויומני Access Transparency, מריצים את השאילתה הבאה:

    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection"
    resource.labels.cluster_name="CLUSTER_NAME"
    jsonPayload.connection.dest_port="22")
    OR
    (logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-sshd"
    resource.labels.cluster_name="CLUSTER_NAME")
    OR
    (logName="projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Faccess_transparency"
    json_payload.accesses.methodName="GoogleInternal.SSH.Master"
    json_payload.accesses.resourceName="//container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME")
    

הפלט צריך להציג את כל סוגי היומנים הבאים עבור האשכול:

  • יומן Access Transparency
  • יומן החיבורים של מישור הבקרה
  • יומני SSH לכל סשן SSH

ביצוע בדיקות אימות

הבדיקה העיקרית שלכם היא אם אתם רואים את כל סוגי היומנים עבור כל חיבורי ה-SSH כשאתם מריצים את שאילתת הרישום ביומן מהקטע הקודם. לכל יומן של Access Transparency צריך להיות יומן חיבור מקביל של מישור הבקרה ויומן SSH אחד או יותר. היומנים האלה מיועדים לפעולות שאנשים מבצעים במופעים של מישור הבקרה, ולכן נפח היומנים צריך להיות קטן.

אפשר לבצע את הבדיקות הנוספות הבאות של תוכן היומן:

  1. לכל יומן SSH של מישור הבקרה, בודקים אם קיים יומן Access Transparency בחלון של 15 דקות לפני חותמת הזמן של יומן ה-SSH. חלון הזמן הזה כולל את הסגירה הסופית של סשן ה-SSH, שמתרחשת כמה דקות אחרי שהחיבור הראשוני נרשם ב-Access Transparency.
  2. לכל יומן חיבור של מישור הבקרה, בודקים אם קיים יומן של Access Transparency בחלון של 5 דקות לפני חותמת הזמן של יומן החיבור של מישור הבקרה.
  3. אם אתם משתמשים ב-Access Approval באשכול, בדקו אם לכל יומן של Access Transparency יש שדה accessApprovals תואם. הצלבת נתונים של שדה זה מול בקשות לאישורי גישה עבור האשכול שלך.

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

  4. אפשר גם לאמת את החתימה של אישור הגישה החתום שמשויך ליומן של Access Transparency.

פרטים ביומן הגישה של מישור הבקרה

בקטע הזה מפורטים יומני הגישה למישור הבקרה שנוצרים ב-GKE כשעובדי Google מתחברים למופעים של מישור הבקרה.

יומנים של חיבורים למישור הבקרה

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

  • כתובות ה-IP והיציאות של המקור והיעד
  • כיוון החיבור והפרוטוקול

דוגמה ליומן חיבור של מישור בקרה:

{
  insertId: "z1eq8wonio335a5h",
  jsonPayload: {
    instance: {
      vm_name: "gke-dee49f0d6fa34ce3a2ac-f513-d195-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "CLUSTER_ID",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1-c/clusters/CLUSTER_NAME"
    },
    connection: {
      state: "NEW",
      src_ip: "192.0.2.100",
      src_port: 32774,
      dest_ip: "203.0.113.12",
      dest_port: 22,
      direction: "INGRESS"
      protocol: "TCP"
    },
  }
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-connection",
  receiveTimestamp: "2024-04-11T04:08:01.883070399Z",
  resource: {
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1-c",
      project_id: "PROJECT_ID"
    }
    type: "gke_cluster",
  }
  severity: "NOTICE",
  timestamp: "2024-04-11T04:07:59.019330Z"
}

השדות הבאים ברשומה ביומן רלוונטיים לאימות הפעולות של Google:

  • ‫cluster.cluster_urn: מזהה המשאב המלא של האשכול. המזהה הזה הוא בפורמט //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, עם המשתנים הבאים:

    • ‫PROJECT_NUMBER: מספר הפרויקט של האשכולות.
    • ‫LOCATION: Google Cloud המיקום של האשכול.
    • ‫CLUSTER_NAME: השם של האשכול.
  • ‫connection: פרטים על ניסיון החיבור. השדה הזה כולל את הפרטים הבאים:

    • state: מצב החיבור. בחיבורים חדשים, הערך הוא NEW.
    • ‫src_ip: כתובת ה-IP של מקור החיבור.
    • ‫src_port: מספר היציאה של מקור החיבור.
    • ‫dest_ip: כתובת ה-IP הפנימית של מכונת ה-VM של מישור הבקרה.
    • ‫dest_port: מספר יציאת היעד.
    • ‫direction: כיוון החיבור. הערך הוא תמיד INGRESS.
    • ‫protocol: פרוטוקול ה-IP, כמו TCP.

יומני SSH של מישור הבקרה

‫GKE מוסיף יומני SSH של מישור הבקרה לאירועים שקשורים לחיבורי SSH למופעים של מישור הבקרה. ‫GKE מתעד את האירועים הבאים:

  • מפתח SSH שאושר למשתמש
  • הסטטוס של הסשן השתנה מ-0 ל-1, מה שמציין שהמשתמש התחבר בהצלחה
  • סשן SSH נפתח
  • סשן SSH נסגר
  • הסטטוס של הסשן השתנה מ-1 ל-0, מה שמצביע על כך שהמשתמש התנתק
  • סשן SSH נכשל

לדוגמה, יומן ה-SSH של מישור הבקרה הבא הוא עבור הפעלה של סשן SSH:

{
  insertId: "8llczemdulwbbwpa",
  jsonPayload: {
    instance: {
      vm_name: "gke-06cb920c609941c0a5ce-6840-40e9-vm",
      zone: "us-central1-c"
    },
    cluster: {
      cluster_id: "891e6d12889747748c1ac16ffcc6cb7c0a96450b36864eb680917c119fd801d0",
      cluster_urn: "//container.googleapis.com/projects/PROJECT_NUMBER/locations/us-central1/clusters/CLUSTER_NAME",
    },
    message: "pam_unix(sshd:session): session opened for user REDACTED by (uid=0)",
  },
  logName: "projects/PROJECT_ID/logs/container.googleapis.com%2Fkcp-ssh",
  receiveTimestamp: "2024-04-09T13:21:55.231436462Z"
  resource: {
    type: "gke_cluster",
    labels: {
      cluster_name: "CLUSTER_NAME",
      location: "us-central1",
      project_id: "PROJECT_ID"
    }
  },
  severity: "NOTICE",
  timestamp: "2024-04-09T13:21:50.742246Z"
}

השדות הבאים ברשומה ביומן רלוונטיים לאימות הפעולות של Google:

  • ‫cluster.cluster_urn: מזהה המשאב המלא של האשכול. המזהה הזה הוא בפורמט //container.googleapis.com/projects/PROJECT_NUMBER/locations/LOCATION/clusters/CLUSTER_NAME, עם המשתנים הבאים:

    • ‫PROJECT_NUMBER: מספר הפרויקט של אשכול הפרויקט.
    • ‫LOCATION: Google Cloud המיקום של האשכול.
    • ‫CLUSTER_NAME: השם של האשכול.
  • ‫message: פרטים על חיבור ה-SSH.

השבתת יומני גישה למישור הבקרה

  1. כדי לראות את סוגי היומנים הספציפיים שבהם נעשה שימוש באשכול, מריצים את הפקודה הבאה:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --flatten=loggingConfig \
        --format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
    

    הפלט אמור להיראות כך:

    SYSTEM_COMPONENTS,WORKLOADS,API_SERVER,SCHEDULER,CONTROLLER_MANAGER,KCP_SSHD,KCP_CONNECTION
    
  2. כדי להשבית את יומני הגישה למישור הבקרה של אשכול, מריצים את הפקודה הבאה:

    gcloud container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --logging=SYSTEM,WORKLOAD,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

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

כדי להשבית רכיבי רישום ביומן באמצעות GKE API, צריך להגדיר את הערכים המתאימים באובייקט LoggingConfig של משאב ClusterUpdate בשיטה projects.locations.clusters.update.

המאמרים הבאים