אימות החיבורים של 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 מריץ פקודה אחת שאתם מאשרים.

תמחור

השיקולים הבאים רלוונטיים לתמחור:

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

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

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

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

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

דרישות

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

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

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

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

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

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

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

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

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

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

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

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 שתואמים לרכיבי רישום ספציפיים מופיעה בטבלה יומנים זמינים.

  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 ב-method ‏projects.locations.clusters.update.

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