הצפנת הנתונים במעבר ב-GKE באמצעות מפתחות הצפנה בניהול המשתמש

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

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

לפני שקוראים את הדף הזה, חשוב להכיר את המושגים הבאים:

כברירת מחדל, Google מצפינה את כל הנתונים במעבר בין מכונות וירטואליות ברמת בקר ממשק הרשת (NIC), כדי להבטיח את סודיות הנתונים במעבר, בלי קשר לשירות או לאפליקציה שפועלים במכונה הווירטואלית (כולל GKE). שכבת ההצפנה הזו חלה על כל התנועה של צומתי GKE ו-Pod. ‫Google מספקת ומנהלת את מפתחות ההצפנה.

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

מגבלות

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

  • הצפנה שקופה בין צמתים ב-GKE נתמכת רק באשכולות של GKE Dataplane V2.

  • אין תמיכה ב-GKE Autopilot.

  • הצפנה שקופה בין צמתים ב-GKE משתמשת ב-WireGuard. ‫WireGuard לא עומד בתקן FIPS.

  • מפתחות ההצפנה לא עוברים רוטציה באופן דינמי. צריך לטפל ברוטציית המפתחות באופן ידני על ידי הפעלה מחדש של הצמתים.

  • הצפנה שקופה בין צמתים בשילוב עם Confidential GKE Nodes פועלת רק במערכת הפעלה שמותאמת לקונטיינרים (COS) וב-Ubuntu, ולא ב-Windows.

  • הצפנה שקופה בין צמתים לא מצפינה את התנועה ברשת שנוצרת על ידי צומת GKE או Pod באמצעות hostNetwork.

  • הצפנה שקופה בין צמתים לא מצפינה את התנועה ברשת שנשלחת לפוד שנחשף ביציאת צומת. גם כשמגדירים את ExternalTrafficPolicy: Cluster בשירות, התנועה שמועברת מהצומת הראשון שמקבל תנועה מהלקוח אל ה-Pod בקצה העורפי לא מוצפנת.

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

  • הצפנה שקופה בין צמתים עלולה לגרום להקצאת יתר של הצמתים. לדוגמה, יכול להיות שתהיה עלייה ממוצעת של 15% בשימוש ב-CPU בצומתי n2-standard-8 עם מערכת ההפעלה Ubuntu וקצב העברה של 2Gbps.

    העלייה בניצול המעבד (CPU) לא משויכת לאף Pod כי היא לא ידועה ל-kube-scheduler. ה-Pod עם התנועה המוגברת עלול להשתמש בכל משאבי המעבד (CPU) בצומת. זה יכול למנוע מפודים אחרים לקבל את משאבי המעבד שהם צריכים, גם אם הם מוגדרים כמו שצריך. זה יכול לגרום לבעיות ב-Pods שמנסים להריץ עומסי עבודה רגישים או שצריכים להגיב במהירות לבקשות. כדי לעקוף את הבעיה, אפשר להשאיר כמות משמעותית של מעבד (CPU) לא מתוזמן בצמתים שבהם מופעלת הצפנה שקופה בין צמתים. לחלופין, אפשר לתזמן Pod עם PriorityClass נמוך, שיש לו בקשת מעבד (CPU) גדולה אבל הוא אף פעם לא משתמש במעבד הזה.

  • הצפנה שקופה בין צמתים גורמת לזמן אחזור של 150 מיקרו-שניות בשני צמתים באותו אזור שלא משתמשים ב-Confidential GKE Nodes.

  • כשמפעילים הצפנה שקופה בין צמתים, יכול להיות שתכונות התצפיתיות של התנועה שמשמשות למעקב אחרי התנועה ב-Pods לא יפעלו כמו שצריך, כי הנתונים במעבר מוצפנים באמצעות מפתחות שלא נגישים לתשתית הבסיסית של Google.

  • כשמפעילים הצפנה שקופה בין צמתים, כתובות ה-IP של Pod לא גלויות ב-VPC. תכונות שתלויות בבדיקת חבילות נתונים, כמו רפליקציה של חבילות נתונים וכללי חומת אש של VPC שמבוססים על Pod CIDR, לא תואמות להצפנה שקופה בין צמתים.

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

  • הצפנה שקופה בין צמתים משביתה חלק מהיכולות של שכבה 7 ב-GKE Dataplane V2. לכן אי אפשר להפעיל בו-זמנית את מדיניות הרשת ב-Kubernetes של FQDN ואת ההצפנה השקופה בין הצמתים.

  • אי אפשר להפעיל את התכונה הזו במקביל להרשאות גישה בתוך הצומת.

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

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

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

הפעלת הצפנה שקופה בין צמתים באמצעות GKE

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

הפעלה באשכול חדש

  1. כדי להפעיל הצפנה שקופה בין צמתים באשכול חדש:

    gcloud container clusters create CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --enable-datapane-v2 \
        --in-transit-encryption inter-node-transparent
    

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

    • CLUSTER_NAME בשם של האשכול.
    • ‫CONTROL_PLANE_LOCATION: המיקום ב-Compute Engine של מישור הבקרה של האשכול. לאשכולות אזוריים צריך לציין אזור, ולאשכולות של תחומים צריך לציין תחום.
  2. כדי לאמת את ההגדרות, משתמשים בפקודה הבאה כדי לבדוק את סטטוס ההצפנה:

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

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

    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 2)]
    

הפעלה באשכול קיים

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

    gcloud container clusters update CLUSTER_NAME \
      --in-transit-encryption inter-node-transparent \
      --location=CONTROL_PLANE_LOCATION
    

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

    • CLUSTER_NAME בשם של האשכול.
    • ‫CONTROL_PLANE_LOCATION: המיקום ב-Compute Engine של מישור הבקרה של האשכול. לאשכולות אזוריים צריך לציין אזור, ולאשכולות של תחומים צריך לציין תחום.
  2. כדי לבדוק אם הפקודה של Google Cloud CLI הושלמה בהצלחה :

    gcloud container clusters describe CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --format json | jq .status
    

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

    • CLUSTER_NAME בשם של האשכול.
    • ‫CONTROL_PLANE_LOCATION: המיקום ב-Compute Engine של מישור הבקרה של האשכול. לאשכולות אזוריים צריך לציין אזור, ולאשכולות של תחומים צריך לציין תחום.

    מחכים עד שהסטטוס יהיה "RUNNING". הפעלת הצפנה בין צמתים ב-GKE תפעיל מחדש את הצמתים באופן אוטומטי. יכול להיות שיעברו כמה שעות עד שהצומת יופעל מחדש והצמתים החדשים יאכפו את כללי המדיניות.

  3. כדי לוודא שהצמתים הופעלו מחדש:

    kubectl get nodes
    

    בודקים את השדה AGE בכל צומת וממשיכים אם השדה AGE משקף צמתים חדשים.

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

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

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

    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 2)]
    

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

הפעלה בכמה אשכולות

באשכולות Autopilot אין תמיכה בהצפנה שקופה בין צמתים. אם ה-fleet כולל אשכולות Autopilot, הם לא יוכלו לתקשר עם אשכולות Standard שההצפנה מופעלת בהם.

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

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

  2. רושמים את האשכול ל-fleet.

  3. מפעילים הצפנה שקופה בין צמתים ב-fleet:

    gcloud container fleet dataplane-v2-encryption enable --project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  4. מאמתים את הסטטוס בכל הצמתים:

    kubectl -n kube-system get pods -l k8s-app=cilium -o name | xargs -I {} kubectl -n kube-system exec -ti {} -- cilium status
    

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

    ...
    Encryption: Wireguard [cilium_wg0 (Pubkey: <key>, Port: 51871, Peers: 5)]
    ...
    

השבתת הצפנה שקופה בין צמתים

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

  • ההצפנה השקופה בין הצמתים מופעלת בכל האשכול, ואי אפשר להשבית אותה באופן חלקי במשאבים ספציפיים ב-Kubernetes, כמו מרחבי שמות או Pods.

  • כדאי לבצע את הפעולה הזו במהלך חלון זמן לתחזוקה, כי היא תשבש את התנועה של ה-Pod.

השבתה באשכול יחיד

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

gcloud container clusters update CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --in-transit-encryption none

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

  • ‫CLUSTER_NAME: שם האשכול.
  • ‫CONTROL_PLANE_LOCATION: המיקום ב-Compute Engine של מישור הבקרה של האשכול. לאשכולות אזוריים צריך לציין אזור, ולאשכולות של תחומים צריך לציין תחום.

השבתה באשכול שהוא חלק מ-fleet

כדי להשבית את ההצפנה של אשכול ב-fleet, אפשר להשתמש באחת משתי האפשרויות הבאות:

  • כדי להסיר את האשכול מה-fleet לגמרי, צריך לבטל את הרישום של האשכול.

  • לחלופין, אפשר להשאיר את האשכול ב-fleet אבל להשבית את ההצפנה:

    gcloud container fleet dataplane-v2-encryption disable --project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

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

    kubectl -n kube-system exec -ti anetd-XXXX -- cilium status | grep Encryption
    

השבתה של כל האשכולות ב-fleet

  • כדי להשבית את ההצפנה השקופה בין צמתים ב-fleet:

    gcloud container fleet dataplane-v2-encryption disable --project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

  • כדי להשבית את ההצפנה השקופה בין הצמתים ולהסיר את ה-API שלא בשימוש, משביתים את GKE Dataplane V2 API ברמת ה-fleet. הפעולה הזו תשבית את הבקר של GKE Dataplane V2 שפועל ב-fleet.

    gcloud services disable gkedataplanev2.googleapis.com \
        --project=PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט.

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

    1. לבטל את הרישום של האשכול הישן מה-fleet לפני שיוצרים אשכול חדש עם אותו שם.

    2. לרשום מחדש את האשכול החדש אחרי שיוצרים אותו מחדש.

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

    אם לא תבצעו את השלבים האלה, יכול להיות שההצפנה בכמה אשכולות לא תופעל באשכול החדש עד שתיצרו מחדש את החברות ב-fleet.

איך פועלת הצפנה שקופה בין צמתים ב-GKE

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

הצפנה של תנועה ברשת בין שני Pods בצמתים שונים

כשההצפנה השקופה בין צמתים מופעלת, GKE Dataplane V2 מצפין את התנועה בין Pods אם הם נמצאים בצמתים שונים, בלי קשר לאשכול שאליו הצמתים האלה שייכים. כשהאשכולות הם חלק מאותו צי, הם שייכים לאותו דומיין הצפנה.

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

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

  • תקשורת בין Pod ל-Pod נכשלת בין צומת באשכול שמופעלת בו הצפנה שקופה בין צמתים לבין צומת באשכול שלא מופעלת בו הצפנה שקופה בין צמתים.

יצירה ושימוש במפתחות הצפנה

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

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

  • המפתח הציבורי משותף עם צמתים אחרים באמצעות מישור הבקרה של GKE Dataplane V2, וכל הצמתים באותו דומיין הצפנה יכולים לגשת אליו.

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

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

  • זוג מפתחות פרטי/ציבורי:

    • המפתח הציבורי מופץ באשכול, ולכל הצמתים באשכול יש גישה אליו.

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

  • מפתח להצפנת פעילות:

    • אי אפשר להגדיר את המפתח הזה.

    • המפתח הזה מתחלף כל שתי דקות.

    • המפתח להצפנת פעילות הוא בלעדי לצמתים שמעורבים במנהרה.

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